【问题标题】:C# syntax: where TResponse, new()C# 语法:where TResponse, new()
【发布时间】:2012-03-15 03:27:26
【问题描述】:
public TResponse ExecuteCustomMessage<TResponse>(IModbusMessage request)
    where TResponse : IModbusMessage, new()

以上是什么意思?我以前从未见过这样的东西,虽然我已经用 C# 编码了几年了......它应该是一个函数,但我不确定 this 和关键字 where 和 new() 是什么最后...

【问题讨论】:

  • 你可以在外面看到奇怪的野兽......
  • 我不认为这与泛型有关。我认为这是关于类型约束的。好吧,您只说TResponse 类型必须是IModbusMessage 的子类或其他类型,并且必须有一个不带参数的构造函数。在许多情况下,这意味着您想在您的类中构造 TResponse 的新对象。

标签: c# .net function syntax


【解决方案1】:

它是 TResponse 泛型类型上的 constraint,它实现接口 IModbusMessage 并具有无参数构造函数。

其中 T :(接口名称) 类型参数必须是或实现 指定接口。可以指定多个接口约束。 约束接口也可以是通用的。

where T : new() 类型参数必须有一个公共的无参数 构造函数。当与其他约束结合使用时, new() 约束必须最后指定。

另外,正如其他人所指出的,我建议您阅读泛型文档(由 cmets 中的 SLaks 指出)。

【讨论】:

  • 我怀疑 OP 是否具备理解您的答案的必备知识。
【解决方案2】:

这意味着TResponse应该是实现接口IModbusMessage的类型

new() 意味着提供一个默认的无参数构造函数。

我认为你最好开始阅读 Generics

【讨论】:

    【解决方案3】:

    其中:new() 是泛型构造函数约束

    泛型类型参数 TResponse 必须支持公共默认构造函数。

    查看详情http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

    【讨论】:

      【解决方案4】:

      这是一个通用方法。指定该方法可以使用的对象的类型或系列。 where 子句是一个约束,它表示 TReponse 必须实现 IModbusMessage 接口,并且它必须能够使用 new 关键字进行实例化。

      【讨论】:

        猜你喜欢
        • 2020-01-04
        • 2014-10-28
        • 1970-01-01
        • 2016-08-28
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        相关资源
        最近更新 更多