这是一个理论问题,如果你不想了解理论可以跳过。
假设你有两个类,其中一个类继承自另一个类。基类是通用的,并且具有在封闭类型中必须返回该封闭类型某个实例的方法。
就像这样(注意文本中的???):
public class Adapter<T>
{
public virtual ??? DoSomething()
{
...
}
}
public class AdaptedString : Adapter<String>
{
public override AdaptedString DoSomething()
{
...
}
}
我无法做到这一点,因为没有办法引用将从泛型类型派生的闭合类型。 (对不起,语言有些生硬,不知道该如何表达。)没有关键字可以替换 ???
来指定此方法将返回从此泛型类型派生的类型的实例。
相反,我可以使用一个解决方法,即显式传递类型名称到泛型基类中。但这看起来有些冗余。
public class Adapter<TThis,T>
{
public virtual TThis DoSomething()
{
...
}
}
public class AdaptedString : Adapter<AdaptedString,String>
{
public override AdaptedString DoSomething()
{
...
}
}
如果在基类中需要访问TThis
实例的成员,我必须添加一个约束。这次看起来有点丑 - 请注意约束:
public class Adapter<TThis,T>
where TThis : Adapter<TThis, T>
{
protected int _field;
...
public bool Compare( TThis obj )
{
return _field == obj._field;
}
}
public class AdaptedString : Adapter<AdaptedString,String>
{
...
}
是的,所有内容都在运作,但如果我可以在第一个代码片段中使用一些关键字而不是 ???
,那么它会看起来更好。例如 "thistype"。
你认为这样做是否可行?它有用吗?还是只是很愚蠢?