Ich stehe vor der Anforderung, eine statische Methode für meine Basisklasse zu erstellen, aber ich mag es nicht, dass ich Typargumente deklarieren muss, also frage ich mich, ob ich das tue der richtige Weg.Bessere Methode zum Definieren der statischen Methode
Im Grunde gebe ich Delegaten, die ich mit Eigenschaften für die Klasse verknüpfen werde. Ich könnte leicht die Methode auf die vererbten Klassen setzen, etwa so:
public class Foo
{
public string Property1 { get; set; }
}
public class InheritsFoo : Foo
{
public void AssignDel<TVal>(
Expression<Func<InheritsFoo, TVal>> expr,
Action<InheritsFoo, TVal> action)
{
}
}
Oder in einer Nebenklasse, konnte ich dies tun:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
Beide würden mir ermöglichen, verwenden AssignDel
in eine instanzierte Klasse:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
Aber ich habe eine Verpflichtung AssignDel
statisch zu machen. Dies macht die Erweiterung zu nutzlos. Es funktioniert immer noch in InheritsFoo
, aber ich möchte dies wirklich in die Basisklasse verschieben. Wenn ich versuche, kann das Generika Argument nicht abgeleitet werden, und ich habe die Verwendung des Verfahrens zu ändern:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
Gibt es eine Möglichkeit sich hier, eine andere Art und Weise, dies zu tun habe ich nicht gedacht?
EDIT: um das Problem in den Kommentaren zu adressieren, ob die Extension-Methode würde/sollte funktionieren ... Ich ging zu der URL von @Mark M verwiesen. Stellt sich heraus, wenn ich es so schreibe ...
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
das compiliert (weiß nicht, ob es läuft, obwohl). Glauben Sie nicht, dass dies eine statische Methode ist, da 'foo' immer noch als Instanz betrachtet wird; Eine Null-Instanz, aber trotzdem eine Instanz.
Erweiterungsmethoden sind bereits statisch. Wie verhindert eine Anforderung, die Methode statisch zu machen, die Verwendung von Erweiterungsmethoden? –
"Ich habe die Anforderung,' AssignDel' statisch zu machen ". Dann mach es statisch. –
@Kirk: Obwohl Erweiterungsmethoden als statische Methoden definiert sind, können sie nur als Instanzmethoden der beabsichtigten Klasse verwendet werden. –