Я не знаю, как решить проблему с помощью общих интерфейсов.Наследование от общих интерфейсов
Общий интерфейс представляет собой фабрику для объектов:
interface IFactory<T>
{
// get created object
T Get();
}
Интерфейс представляет завод для компьютеров (компьютерный класс) specyfing общая заводскую:
interface IComputerFactory<T> : IFactory<T>
where T : Computer
{
// get created computer
new Computer Get();
}
Общий интерфейс представляет собой специальный завод для объектов, которые клонируемыми (реализует интерфейс System.ICloneable):
interface ISpecialFactory<T>
where T : ICloneable, IFactory<T>
{
// get created object
T Get();
}
класса представляет фабрику для компьютеров (компьютерный класс) и Cloneable объектов:
class MyFactory<T> : IComputerFactory<Computer>, ISpecialFactory<T>
{
}
Я получаю компилятор сообщений об ошибках В MyFactory класса:
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'.
Благодарим вас за ответ, но это не совсем то, чего я хочу достичь. Не могли бы вы изменить его таким образом, чтобы MyFactory создавал все клонируемые объекты, а не только объекты «Компьютер»? – Matt
@Matt - Извините, что это не имеет большого смысла. Если завод не зацикливается, как он знает, как * что-то конструировать? Даже в вашем исходном сообщении 'MyFactory' реализован' IComputerFactory'. Вы должны обновить свой вопрос с помощью немного большего контекста на *, чего вы пытаетесь достичь * – Jamiec
Если фабрика не зацикливается, как она знает, как ее построить? Я думал использовать дженерики. Im мои исходные сообщения MyFactory реализует интерфейс IComputerFactory и интерфейс ISpecialFactory. Это означает, что MyFactory может создавать не только экземпляры класса Computer, но и экземпляры всех классов, которые являются клонируемыми. Я думал, что это возможно с новым методом в классе myFactory, что-то вроде public T Get {return new T()}. Я не знаю, возможно ли это ... – Matt