Temel sınıfımda statik bir yöntem oluşturma zorunluluğuyla karşı karşıyayım, ancak tür argümanlarını bildirmem gerektiğini beğenmedim, bu yüzden bu konuda gidip gitmediğimi merak ediyorum. doğru yol.Statik yöntemi tanımlamanın daha iyi bir yolu
Temel olarak, sınıftaki özellikleriyle ilişkilendireceğim temsilciler atayım. Ben kolayca şöyle, kalıtsal sınıfları yöntemi bırakabilir: Bir uzatma sınıfında,
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)
{
}
}
Ya ben bunu:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
Bunların her ikisi de AssignDel
kullanmak için bana sağlayacak örneklenmiş sınıf:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
Ama AssignDel
statik yapmak için bir gereksinim var. Bu uzatma yolunu işe yaramaz hale getirir. Hala InheritsFoo
'da çalışıyor, ancak bunu temel sınıfa taşımak istiyorum. Ben çalışırsanız, jenerik argüman anlaşılmaktadır ve ben yöntemin kullanımını değiştirmek zorunda edilemez:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
bir yolu ben düşünce değil bunu yapmanın başka bir yolu, dışarı var mı?
DÜZENLEME: uzantı yönteminin işe yarayıp yaramayacağı hakkında yorumlarda sorunu gidermek için ... @Mark M. tarafından başvurulan URL'ye gittim.
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
Bu derleme (eğer çalışacak olsa bile bilmiyorum). Yine de, bunun bir statik yöntem olarak nitelendirileceğini düşünmeyin, çünkü 'foo' hala bir örnek olarak kabul edilir; Boş bir örnek, ancak yine de bir örnek.
Uzantı yöntemleri zaten statik. Yöntemi durağan hale getirme gereksinimi, uzantı yöntemlerini kullanma biçiminde nasıl yapılır? –
"AssignDel 'statik yapmak için bir ihtiyacım var". Sonra statik yapınız. –
@Kirk: Uzantı yöntemleri statik yöntemler olarak tanımlanmış olsa da, yalnızca amaçlanan sınıfın örnek yöntemleri olarak kullanılabilirler. –