use*_*077 3 c# types reference class
C# 中是否有任何不是类的引用类型?以下泛型中的约束是否包括所有引用类型?
static void f<T>() where T : class
{
T t = default;
Console.WriteLine(t);
}
Run Code Online (Sandbox Code Playgroud)
你在问两个不同的问题
C# 中的所有引用类型都是类类型吗?
不
以下泛型 [
where T : class]中的约束是否包括所有引用类型?
是的,它将限制所有引用类型
首先,让我们确定引用类型实际上是什么。
C#中有两种类型:引用类型和值类型。引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。
以下关键字用于声明引用类型:
班级
界面
代表
C# 还提供了以下内置引用类型:
动态的
目的
细绳
注意:上面没有提到,Array类型也是从abstract基类型派生的引用类型Array
其次,让我们弄清楚类约束约束了什么
where T : class类型参数必须是引用类型。此约束也适用于任何类、接口、委托或数组类型。
注意:上面没有提到,class约束还包括dynamic
作为一个额外的事实,从C# 7.3 开始,您还可以通过委托显式约束
委托约束
同样从C# 7.3开始,您可以使用
System.Delegate或System.MulticastDelegate作为基类约束。CLR 始终允许此约束,但 C# 语言不允许它