Ich stehe vor der Anforderung, eine statische Methode in meiner Basisklasse zu erstellen, aber ich mag es nicht, dass ich Typargumente deklarieren muss, deshalb frage ich mich, ob ich das richtig mache.
Im Grunde weise ich Delegaten zu, die ich mit Eigenschaften in der Klasse verknüpfen werde. Ich könnte die Methode einfach in den abgeleiteten Klassen platzieren, wie folgt:
public class Foo
{
public string Property1 { get; set; }
}
public class InheritsFoo : Foo
{
public void AssignDel(
Expression> expr,
Action action)
{
}
}
Oder ich könnte dies in einer Erweiterungsklasse tun:
public static void AssignDel(
this T source,
Expression> expression,
Action action)
where T : Foo
{
}
Beide ermöglichen es mir, AssignDel
in einer instanziierten Klasse zu verwenden:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
Aber ich muss AssignDel
statisch machen. Auf diese Weise wird die Verlängerungsmethode nutzlos. Es funktioniert immer noch in InheritsFoo
, aber ich möchte das wirklich in die Basisklasse verschieben. Wenn ich es versuche, können die generischen Argumente nicht abgeleitet werden, und ich muss die Verwendung der Methode ändern:
InheritsFoo.AssignDel(x => x.Property1, handler);
Gibt es hier einen Ausweg, einen anderen Weg, den ich nicht bedacht habe?
EDIT: Um das Problem aus den Kommentaren zu adressieren, ob die Erweiterungsmethode funktionieren würde/sollte... Ich bin zu der von @Mark M. referenzierten URL gegangen. Es stellt sich heraus, dass wenn ich es wie folgt schreibe...
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
Das kompiliert (weiß aber nicht, ob es funktionieren wird). Trotzdem denke ich nicht, dass das als Verwendung einer statischen Methode qualifiziert, da 'foo' immer noch als Instanz betrachtet wird; Eine Nullinstanz, aber dennoch eine Instanz.