Хорошо, у меня есть несколько разных классов, производных от базового класса. Этот базовый класс является абстрактным, содержащим методы commom.
Один из методов - это метод Copy
, который должен присутствовать во всех производных классах, поэтому я поместил его в базовый класс. НО, я хочу, чтобы он возвращал derived type
не базу или объект.
Решение, которое я получил для этого, использует параметр типа:
abstract class CopyableClass<T>
{
public abstract T Copy();
}
class DerivedClass : CopyableClass<DerivedClass>
{
public override DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
Итак, основная цель здесь -
Удалите параметр типа в базовом классе и по-прежнему заставьте метод возвращать соответствующий производный тип.
Одно решение.
Лучшее, что я мог сделать до сих пор, - это один из комментариев ниже, но он по-прежнему использует общий параметр
abstract class BaseClass
{
//base methods not related to deriving type
}
interface ICopyable<T>
{
T Copy();
}
class DerivedClass : BaseClass, ICopyable<DerivedClass>
{
public DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
abstract class CopyableClass<T>:where T:CopyableClass{}
- person Guru Stron   schedule 02.07.2013