繁体   English   中英

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

[英]Are all reference types class types in C#?

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

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

你在问两个不同的问题

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

以下泛型 [ where T : class ] 中的约束是否包括所有引用类型?

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


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

引用类型(C# 参考)

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

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

  • 班级

  • 界面

  • 代表

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

  • 动态的

  • 目的

  • 细绳

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

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

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

where T : class

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

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


作为一个额外的事实,从C# 7.3 开始,您还可以通过委托显式约束

委托约束

同样从C# 7.3开始,您可以使用System.DelegateSystem.MulticastDelegate作为基类约束。 CLR 始终允许此约束,但 C# 语言不允许它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM