Mam do czynienia z wymogiem stworzenia statycznej metody na mojej klasie bazowej, ale nie podoba mi się, że muszę zadeklarować argumenty typu, więc zastanawiam się, czy mam zamiar o tym właściwą drogę.Lepszy sposób definiowania metody statycznej
Zasadniczo przydzielam delegatów, których kojarzę z właściwościami w klasie. Mógłbym łatwo umieścić metodę na odziedziczonych klas, tak jak poniżej:
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)
{
}
}
Lub, w klasie przedłużacza, mogę to zrobić:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
Oba pozwoliłoby mnie do korzystania AssignDel
w instancja klasy:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
Ale mam wymaganie, aby AssignDel
statyczne. To sprawia, że sposób rozszerzenia jest bezużyteczny. Nadal działa w InheritsFoo
, ale naprawdę chcę przenieść to do klasy bazowej. Gdy próbuję argument generyczne nie można wywnioskować, i muszę zmienić wykorzystanie metody:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
czy istnieje sposób tu, innym sposobem w ten sposób, że nie myślę o?
EDYCJA: w celu rozwiązania problemu w komentarzach o tym, czy metoda rozszerzenia miałaby/powinna działać ... Poszedłem do adresu URL, do którego odwołuje się @Mark M. Okazuje się, że jeśli to napiszę ...
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
Który kompiluje (nie wiem, czy to będzie działać). Nadal nie sądzę, że kwalifikuje się to jako użycie metody statycznej, ponieważ "foo" jest nadal uważane za instancję; Instancja zerowa, ale mimo to instancja.
Metody rozszerzeń są już statyczne. W jaki sposób wymóg, aby metoda stała się przeszkodą w stosowaniu metod rozszerzeń? –
"Mam wymóg uczynienia" AssignDel' static ". Następnie uczyń go statycznym. –
@Kirk: Chociaż metody rozszerzeń są zdefiniowane jako metody statyczne, mogą być używane tylko jako metody instancji klasy docelowej. –