【问题标题】:What is the difference between a parameter and T generic one with constraint? C# [duplicate]参数和带约束的 T 通用参数有什么区别? C# [重复]
【发布时间】:2016-09-22 02:37:24
【问题描述】:

我真的不明白两者之间有什么区别:

private void Send<T>(T packet) where T : IPacket

private void Send(IPacket packet)

既然对泛型有限制,那不完全一样吗?如果不是,这里有什么区别?使用带有约束的泛型比使用简单的有什么优势?

谢谢!

【问题讨论】:

  • 如果实现接口的类型是结构体,则不同之处在于装箱。

标签: c# generics parameters


【解决方案1】:

这里的区别是什么?使用带有约束的泛型比简单的有什么优势?

使用泛型,可以指定多个约束:

private void Send<T>(T packet) where T : IPacket, IFoo {
}
...

private void Send<T>(T packet) where T : IPacket, new() {
  var t1 = new T();
  var t2 = default(T);
}

由于direct calls tend to be faster than those made via interfaces,使用泛型还会带来小的性能提升。

【讨论】:

  • 您是否声称您在同一个类中拥有这两种方法,或者您可以添加仅使用参数类型无法添加的其他约束?无论哪种情况,我都认为它改变了问题的前提。
  • 不,我不是。 ... 应该是孤立的 sn-ps 之间的分隔符。
  • 谢谢@AlexBooker :)
猜你喜欢
  • 2020-01-16
  • 2020-05-25
  • 1970-01-01
  • 2013-01-22
  • 2010-09-14
  • 1970-01-01
  • 2012-03-29
  • 2018-08-23
相关资源
最近更新 更多