C#-为什么要放置接口泛型约束而不是仅传递接口类型?

哈利文斯顿

我发现很多这样的代码:

public interface IFoo
{
   void DoSomething();
}

public void RegisterFoos<T>(T foo) where T : IFoo
{
    foo.DoSomething();
}

我没有这种代码,为什么不通过IFoo?

古法

我至少可以看到两个原因。

原因之一是允许发送特定类型的引用。作为接口,您可以发送相同的对象,但是您只能用于foo.GetType()获取类型,但这是对象的实际类型。通过使用泛型类型,可以将对象转换为其他类型,然后typeof(T)获取该类型。

另一个原因是能够返回与参数相同类型的引用。例:

public T DoSomething<T>(T foo) where T : IFoo {
  foo.DoSomething();
  return foo;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章