【发布时间】:2013-06-30 05:13:45
【问题描述】:
好的,我有许多从基类派生的不同类。 这个基类是一个包含常用方法的抽象。
其中一个方法是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
}
}
所以,这里的主要目的是
去掉基类中的类型参数,仍然让方法返回对应的派生类型。
一种解决方法。
到目前为止我能做的最好的事情是下面的 cmets 之一,但它仍然使用通用参数
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
}
}
【问题讨论】:
-
那么你的问题是什么?
-
可能会更好地将其实现为通用接口?
-
如何去掉基类中的类型参数,仍然让方法返回对应的派生类型。
-
@Daniel 您应该在基类中创建一个通用方法,而不是在所有派生类中定义它。我会用一个像这样工作的示例方法给出答案。
-
这很有趣...有没有办法将类型参数限制为仅是派生类型?
标签: c# inheritance type-parameter