文档化的派生约束使用where T :
子句,我正在修改的示例代码是
public class TwoThingsIPC<T> where T : IPassClass
{ ...
}
其中ipassClass是一个接口。
我使用的第三方代码的格式是
public class TwoThingsIPC<IPassClass>
{ ...
}
两者在我的代码中都会导致相同的行为,但是它们是相同的吗?如果不是,有什么区别?
最佳答案
他们不一样。第二项声明具有误导性:
public class TwoThingsIPC<IPassClass>
{ ...
}
不将类型约束到
IPassClass
接口。它对泛型参数使用的名称选择不当。没有什么可以阻止您创建TwoThingsIPC<int>
的实例-类代码中的IPassClass
引用将被int
替换。另一方面,类型为
TwoThingsIPC<IPassClass>
的变量,例如:TwoThingsIPC<IPassClass> myVar = new TwoThingsIPC<IPassClass>();
将类型约束到
IPassClass
接口。1事实并非如此,但我还没有更好的解释。