2 Stimmen

Kann eine generische Klasse gezwungen werden, einen Typ von einer der beiden Schnittstellen zu erben?

Ich habe eine generische Klasse, aber ich möchte, dass mein Typ gezwungen wird, entweder von der einen oder der anderen Schnittstelle zu erben. Zum Beispiel:

public class MyGeneric<T> where T : IInterface1, IInterface2 {}

Die oben zwingt T zu inherti von sowohl IInterface1 und IInterface2, aber kann ich zwingen T zu inhert von IInterface1 ODER IInterface2 (oder beide)?

5voto

tvanfosson Punkte 506878

Definieren Sie eine Basisschnittstelle, die nicht einmal Mitglieder haben muss, und lassen Sie Interface1 und Interface2 diese erweitern. Dann wird der Bereich T auf den Typ der Basisschnittstelle festgelegt. Das funktioniert nur, wenn Sie die generische Schnittstelle von Ihren Schnittstellen ableiten wollen und nicht von einer der vorhandenen Schnittstellen im Framework.

public interface BaseInterface
{
}

public interface Interface1 : BaseInterface
{
    void SomeMethod();
}

public interface Interface2 : BaseInterface
{
    void SomeOtherMethod();
}

public class MyGenericClass<T> where T : BaseInterface
{
    ...
}

var myClass1 = new MyGenericClass<Interface1>();

var myClass2 = new MyGenericClass<Interface2>();

0voto

Orion Edwards Punkte 117361

Nein, das können Sie nicht tun. Es macht einfach keinen Sinn.

Das Beste, was Sie tun können, wäre, 2 leere Unterklassen Ihrer generischen Klasse zu erstellen und die generische Klasse abstrakt zu machen. Zum Beispiel so:

abstract class MyGenericClass<T>
{
  ...
}

public class MyClass1<T> : MyGenericClass<T>, IInterface1
{ }

public class MyClass2<T> : MyGenericClass<T>, IInterface2
{ }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X