问问题的措辞很难,希望下面的代码片段能让事情变得清晰明了:
public class DemoClass<TBase> where TBase : class
{
public void DemoMethod<T>(T target) where T : TBase
{
//The following line causes a design-time error: Type argument 'T' does not satisfy the 'Class' constraint for type parameter 'T'.
WeakReference<T> demoRef = new WeakReference<T>(target);
}
}
WeakReference
需要满足class
约束的类型T
。到目前为止,一切都很好,但是......
为什么编译器无法检测到实际上T
确实满足 T : TBase : class
,因为(实际上)?
T
被限制为类型TBase
,而TBase
本身被限制为类类型。因此,T
本身应该被传递性地限制为类类型。 - pokeValueType
都继承自object
,但它绝对不符合class
。 - InBetween