Vererbung von generischen Schnittstellen
Ich weiß nicht, wie ein problem zu lösen, mit generischen Schnittstellen.
Generische Schnittstelle dar, die Fabrik für Objekte:
interface IFactory<T>
{
//get created object
T Get();
}
Schnittstelle repräsentiert Fabrik für Computer (Computer-Klasse) specyfing der Regel ab Werk:
interface IComputerFactory<T> : IFactory<T> where T : Computer
{
//get created computer
new Computer Get();
}
Generic interface stellt spezielle Fabrik für Objekte, die cloneable (implementiert das interface System.ICloneable):
interface ISpecialFactory<T> where T : ICloneable, IFactory<T>
{
//get created object
T Get();
}
Klasse repräsentiert Fabrik für Computer (Computer-Klasse) und cloneable Objekte:
class MyFactory<T> : IComputerFactory<Computer>, ISpecialFactory<T>
{
}
Bekomme ich compiler-Fehlermeldungen In MyFactory Klasse:
The type 'T' cannot be used as type parameter 'T' in the generic type or method 'exer.ISpecialFactory<T>'. There is no boxing conversion or type parameter conversion from 'T' to 'exer.IFactory<T>'.
The type 'T' cannot be used as type parameter 'T' in the generic type or method 'exer.ISpecialFactory<T>'. There is no boxing conversion or type parameter conversion from 'T' to 'System.ICloneable'.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob dies ein Tippfehler ist, aber sollte dies:
wirklich
Wirklich, ich denke, das ist wahrscheinlich das, was Sie zu tun versuchen:
Live-Beispiel: http://rextester.com/ENLPO67010
MyFactory
umgesetztIComputerFactory
. Aktualisieren Sie Ihre Frage mit etwas mehr Kontext auf was Sie versuchen zu erreichenMyFactory
sowohl KonstruierenComputer
sowie Konstrukt beliebigerICloneable
? Scheint ein wenig seltsam, aber ok, lass es mich überdenken meiner AntwortIComputerFactory.Get
undISpecialFactory.Get
wenn Sie nur bekommen habe 1 Typ argument. Ich glaube, Sie brauchen, um zu beschreiben, was Sie zu erreichen versuchen, gibt es fast sicher einen vernünftigeren Weg, es zu tun.Versuchen diesen code-block:
Ich denke, Ihre definition von
ISpecialFactory<T>
ist falsch. Ändern Sie es zu:Sie möglicherweise nicht wollen, dass die
T
Art zu implementierenIFactory<T>
!