Diciamo che ho un seguente interfaccia C#:Perché una classe generica che implementa un'interfaccia generica con vincoli di tipo deve ripetere questi vincoli?
public interface IInterface<T> where T : SomeClass
{
void InterfaceMethod();
}
E SomeClass è definito come segue:
public class SomeClass
{
public void SomeMethod();
}
Ora vorrei definire l'implementazione dell'interfaccia, che non verrà compilato :
public class InterfaceImpl<T> : IInterface<T>
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Gives Error
}
}
prima che cambi a:
public class InterfaceImpl<T> : IInterface<T> where T : SomeClass
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Compiles fine
}
}
Non avrebbe senso che i vincoli di tipo siano anche "ereditati" (non la parola giusta, lo so) dall'interfaccia?
Probabilmente avrebbero potuto essere realizzati "di default", se non è stato specificato nulla. Ma la sintassi attuale consente di ridefinire i vincoli (ereditarietà, nuova() parola chiave, ecc.) Che va bene. – AFract