文档化的派生约束使用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事实并非如此,但我还没有更好的解释。

09-11 19:53