我读过有关notnullC# 中的约束的内容,其中写道“这允许值类型或不可为空的引用类型,但不允许可为空的引用类型。” (引用自《Programming C# - 10.0 By Ian Griffiths》)
我尝试在下面的代码中检查这个约束:
MyTestClass<int?> instance1 = new MyTestClass<int?>();
MyTestClass<string?> instance2 = new MyTestClass<string?>();
public class MyTestClass<T> where T : notnull
{
T Value { get; set; }
public MyTestClass()
{
Value = default(T);
if (Value == null)
Console.WriteLine($"Type of T is {typeof(T)} and its default value is 'Null'");
else
Console.WriteLine($"Type of T is {typeof(T)} and its default value is {Value}");
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用可为空类型int?(可为空值类型)和string?(可为空引用类型)实例化了我的泛型类,它仍然适用于我。
它还为我打印这样的输出:
Type of T …Run Code Online (Sandbox Code Playgroud) 我一直在研究unmanagedC#中的约束,它在我脑海中提出了一个问题:unmanaged约束是否与“非托管资源”和垃圾收集器的管理有关?
根据 Microsoft 关于 .NET 垃圾收集器的文档,它指出:
有人可以澄清“非托管”约束与垃圾收集器对非托管资源的管理之间是否有直接关系吗?