C#:是具有继承的泛型类型的运算符

标签 c# generics operators

我对比较泛型类型的 is 运算符有疑问。

 public interface ISomeInterface<T> where T : SomeBaseClass{
 }

 public class SomeClass : SomeBaseClass{
 }

现在我们要用 is 运算符检查类型。我们有一个实现接口(interface) ISomeInterface 的类的实例。

不幸的是,我们面临着以下问题:

 // someObject is an Instance of a class implementing interface ISomeInterface<SomeClass>
 bool isSomeBaseClass = someObject is ISomeInterface<SomeBaseClass>; // false
 bool isSomeClass = someObject is ISomeInterface<SomeClass>; // true

是否可以检查变量泛型类型?

提前致谢, 托比

最佳答案

这称为泛型协方差,在 C# 4.0 中受支持。您可以使用 out 关键字标记通用 T 参数:

public interface ISomeInterface<out T> where T : SomeBaseClass

但这有一个限制。 T参数只能作为接口(interface)中方法的返回类型出现。

Eric Lippert 有一个 series of blog posts关于这个主题,我邀请您阅读。

关于C#:是具有继承的泛型类型的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11186493/

相关文章:

prolog - 在 Prolog 中匹配元组

c# - 将字典中的值分配给动态对象 C#

c# - 在 DataGridView 中使用自定义控件

prolog - 为什么 Prolog 运算符定义有 xfx?

java - 我可以强制构造函数对其泛型类型进行更严格的限制吗?

javascript - typescript 如何将泛型分配给泛型变量字段

c++ - 将结构体 vector 插入集合时出现错误 2676 和 2784(...无法推断...的模板参数)

c# - 使用 System.Drawing.Region

c# - 从后面的代码添加的 CheckBox CheckedChanged 事件

Swift 从泛型实例化