【问题标题】:Are all reference types class types in C#?C# 中的所有引用类型都是类类型吗?
【发布时间】:2020-05-24 03:42:49
【问题描述】:

C# 中是否有任何不是类的引用类型?以下泛型中的约束是否包括所有引用类型?

static void f<T>() where T : class
{
    T t = default;
    Console.WriteLine(t);
}

【问题讨论】:

    标签: c# class types reference


    【解决方案1】:

    你问了两个不同的问题

    C#中的所有引用类型都是类类型吗?

    没有

    是否在以下泛型 [where T : class] 中进行约束,包括所有参考 类型?

    是的,它将限制所有引用类型


    首先,让我们确定引用类型实际上是什么。

    Reference types (C# Reference)

    C#中有两种类型:引用类型和值类型。 引用类型的变量存储对其数据(对象)的引用, 而值类型的变量则直接包含它们的数据。

    以下关键字用于声明引用类型:

    • 类

    • 界面

    • 委托

    C# 还提供以下内置引用类型:

    • 动态

    • 对象

    • 字符串

    注意:上面没有提到,Array类型也是从abstract基类型Array派生的引用类型

    其次,让我们弄清楚类约束限制了什么

    Constraints on type parameters (C# Programming Guide)

    where T : class

    类型参数必须是引用类型。此约束适用 也适用于任何类、接口、委托或数组类型。

    注意:上面没有提到,class 约束还包括dynamic


    另外,从 C# 7.3 开始,您还可以通过 delegate 显式约束

    委托约束

    同样以 C# 7.3 开头,您可以使用 System.Delegate 或 System.MulticastDelegate 作为基类约束。 CLR 总是 允许这个约束,但 C# 语言不允许它

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2012-07-17
      • 1970-01-01
      • 2019-12-10
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多