Nehmen Sie diese Klasse als Beispiel:NHibernate Ausnahme: Methode Add sollte ‚public/geschützte virtuelle‘ oder ‚virtuelle internen geschützt‘
public class Category : PersistentObject<int>
{
public virtual string Title { get; set; }
public virtual string Alias { get; set; }
public virtual Category ParentCategory { get; set; }
public virtual ISet<Category> ChildCategories { get; set; }
public /*virtual*/ void Add(Category child)
{
if (child != null)
{
child.ParentCategory = this;
ChildCategories.Add(child);
}
}
}
Wenn die Anwendung ohne das Schlüsselwort virtual von Add-Methode ausgeführt wird, ich das immer Fehler:
method Add should be 'public/protected virtual' or 'protected internal virtual'
ich verstehe, warum Eigenschaften als virtuelle erklären müssen, weil thay durch die träges Laden-Funktion außer Kraft gesetzt werden müssen.
Aber ich verstehe nicht, warum Methoden als virtuell deklariert werden müssen ... sie müssen aus welchem Grund überschrieben werden?
Das ist sehr verwirrend!
Der Fragesteller fragte nach dem Grund für die Notwendigkeit von Methoden speziell virtuell zu sein. Er erklärte, dass er die Proxy-Klassen für Lazy-Loading bereits versteht. –