C#泛型和约束

rau*_*and 2 .net c# generics struct constraints

如果我有一个通用约束,其中C必须是一个结构:

class MyNum<C> where C : struct
{
    C a;
    public MyNum(C a)
    {
        this.a = a;
    }
}

struct myStruct
{
    public int a;
}
Run Code Online (Sandbox Code Playgroud)

我明白这个编译:

    myStruct n = new myStruct();
    n.a = 5;
    MyNum<myStruct> str = new MyNum<myStruct>(n);
Run Code Online (Sandbox Code Playgroud)

但为什么这会编译.¿5号是一个结构吗?

我想这样做:

int b = 5;
Run Code Online (Sandbox Code Playgroud)

b的类型为int,但不是struct struct.我想我在这里遗漏了一些东西.

也只是使用正确的术语:

int b = 5; 
Run Code Online (Sandbox Code Playgroud)

我实例化b?创建一个int实例?出于某些原因,当我想到"实例"时,我会想到引用类型.

这里:

Car c1 = new Car(); 
Run Code Online (Sandbox Code Playgroud)

在这里,我理解我正在创建一个Car实例或实例化c1.

dig*_*All 12

int是一个struct.

看看MSDN上的Int32定义


编辑:

这样做:

 int i = 5;
Run Code Online (Sandbox Code Playgroud)

以及:

MyStruct m = new MyStruct();
Run Code Online (Sandbox Code Playgroud)

您正在创建一个与包含结构所需空间一样大的内存位置.
引用类型的区别,是变量m,并i不能对存储值的那些存储位置的引用,但他们基本上"本身的价值".

事实上你这样做:

MyStruct m1 = new MyStruct();
MyStruct m2 = m1;
Run Code Online (Sandbox Code Playgroud)

m2不代表相同的内存位置m1,但内容m1被复制在由变量表示的内存的新位置m2


She*_*Pro 7

根据 具有struct Type约束的MSDN,type参数必须是值类型.可以指定除Nullable之外的任何值类型.

而正如diggEmAll提到的那样,int是struct