Nie wiem, jak rozwiązać problem z interfejsem generycznym.Dziedziczenie z interfejsów ogólnych
Generic interfejs reprezentuje fabrykę Dla obiektów:
interface IFactory<T>
{
// get created object
T Get();
}
Interfejs reprezentuje fabrykę komputerów (klasa Computer) specyfing generalny fabryki:
interface IComputerFactory<T> : IFactory<T>
where T : Computer
{
// get created computer
new Computer Get();
}
Generic interfejs reprezentuje specjalny fabryki dla obiektów, które są Cloneable (implementuje interfejs System.ICloneable):
interface ISpecialFactory<T>
where T : ICloneable, IFactory<T>
{
// get created object
T Get();
}
Klasa reprezentuje fabrykę komputerów (klasa Computer) i Cloneable obiektów:
class MyFactory<T> : IComputerFactory<Computer>, ISpecialFactory<T>
{
}
otrzymuję komunikaty o błędach kompilator MyFactory Klasa:
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'.
Dziękuję za odpowiedź, ale nie jest to dokładnie to, co chcę osiągnąć. Czy mógłbyś to zmienić w taki sposób, że MyFactory produkuje wszystkie obiekty klonowane, nie tylko "komputerowe"? – Matt
@Matt - Przepraszam, że to nie ma większego sensu. Jeśli fabryka nie zostanie zabetonowana, skąd wie, * jak * zbudować coś? Nawet w twoim oryginalnym wpisie 'MyFactory' zaimplementował' IComputerFactory'. Powinieneś zaktualizować swoje pytanie z nieco większym kontekstem * tego, co próbujesz osiągnąć * – Jamiec
Jeśli fabryka nie zostanie zabetonowana, w jaki sposób wie, jak coś zbudować? Myślałem, że używam generycznych. Im moje oryginalne posty MyFactory implementuje interfejs IComputerFactory i interfejs ISpecialFactory. Oznacza to, że MyFactory może produkować nie tylko instancje klasy Computer, ale także instancje wszystkich klas, które są klonowalne. Myślałem, że jest to możliwe dzięki nowej metodzie w klasie myFactory, coś w rodzaju publicznego T Uzyskaj {return new T()}. Nie wiem, czy to możliwe ... – Matt