Ist es möglich, eine Einschränkung für einen generischen C# -Parameter anzugeben, wobei dieser Parameter abstrakt sein muss? So habe ich derzeit eine Methode, wo der generische Parameter einen parameterlosen Konstruktor haben muss, aber ich habe jetzt in ein Szenario, wo ich eine abstrakte T benötigt, so hoffte ich, die Methode mit einer überladen, die nur abstrakte TsEinschränken des generischen Parameters als abstrakt
akzeptiertpublic static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
Wenn, wie ich vermute, die Antwort lautet "Sie können das nicht tun", gibt es eine vernünftige Problemumgehung?
Es gibt keine Einschränkung für abstrakt - und es ist nicht klar, was Sie wollen, dass Sie denken, Sie eine abstrakte Constraint benötigen. Sie können auf eine Klasse beschränken, die abstrakt ist (zB 'SomeBase' in Ihrem Code). – Jamiec
Die new-constraint existiert nur, um zu bestimmen, ob Sie einen Wert oder einen Referenztyp haben. Ich kann jedoch keinen praktischen Nutzen für eine abstrakte Einschränkung sehen. Welchen Vorteil einer 'IEnumerable' hoffen Sie, dass 'IEnumerable ' nicht auch haben? –
HimBromBeere
Wie erben Sie * SomeBase * in eine neue abstrakte Klasse und verwenden dann * wo T: NewAbstractClass *? – bit