【问题标题】:in C# Inheritace with 'where'在 C# 中使用“where”继承
【发布时间】:2012-09-02 08:33:38
【问题描述】:

任何人请详细解释以下代码:

internal class InternalClientProxy<TInterface> : 
    ClientBase<TInterface> where TInterface : class

【问题讨论】:

  • documentation 不解释了吗?
  • 请提及具体不清楚的地方。只是在哪里使用?如果没有明确说明,其他人将无法提供帮助

标签: c# generics


【解决方案1】:

这意味着您的 InternalClientProxy 中只能有引用类型

一些有助于更好理解的有用链接

MSDN1 MSDN2

【讨论】:

    【解决方案2】:

    为了跟进我的评论,documentation 解释了语法。

    类型参数的约束(C# 编程指南)

    当您定义一个泛型类时,您可以对客户端代码在实例化您的类时可用于类型参数的类型类型施加限制。如果客户端代码尝试使用约束不允许的类型来实例化您的类,则结果是编译时错误。这些限制称为约束。使用 where 上下文关键字指定约束。下表列出了六种类型的约束:

    ...

    where T : class 类型参数必须是引用类型;这也适用于任何类、接口、委托或数组类型。

    根据TInterface 是代表值还是引用类型,通用代码的行为可能会有所不同(除其他外)。

    【讨论】:

      【解决方案3】:

      这是一个泛型类型约束。在这种情况下

      where T : class
      

      表示 T 应该是一个引用类型。

      有关约束的详细信息,请参见此处:Constraints on Type Parameters (C# Programming Guide)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 2012-10-30
        • 2010-09-08
        相关资源
        最近更新 更多