2011-02-17 127 views
2

如果我有一个通用的限制,其中C必须是一个结构:C#泛型和约束

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

struct myStruct 
{ 
    public int a; 
} 

我明白,这编译:

myStruct n = new myStruct(); 
    n.a = 5; 
    MyNum<myStruct> str = new MyNum<myStruct>(n); 

但是,为什么这个编译。 ¿5号结构?

我想通过这样做:

int b = 5; 

B.将int类型的,而不是结构类型。我想我在这里错过了一些东西。

也只有使用正确的术语:

int b = 5; 

上午我实例B'创建一个int实例?出于某种原因,当我想到“实例”时,我想到了引用类型。

这里:

Car c1 = new Car(); 

在这里,我明白,I'm创建汽车实例或实例C1。

+0

你就不能使用的myNum 呢? – Nekresh 2011-02-17 11:24:13

回答

12

intstruct

在上MSDN


编辑Int32定义看:

这样做:

int i = 5; 

还有:

MyStruct m = new MyStruct(); 

您正在创建一个与包含结构所需空间一样大的内存位置。
与参考类型的区别在于,变量mi不是引用那些存储值的存储位置,但它们基本上是“值本身”

逸岸当你这样做:

MyStruct m1 = new MyStruct(); 
MyStruct m2 = m1; 

m2并不代表m1相同的内存位置,但m1内容由可变m2

+0

@rauland:编辑添加一些关于struct :)的信息 – digEmAll 2011-02-17 11:46:46

7

代表的新的存储位置复制根据具有struct Type约束的MSDN,类型参数必须是值类型。可以指定除Nullable以外的任何值类型。

正如diggEmAll已经提到的诠释是结构

+1

+1。基本上,所有你需要知道的一般约束。 – HuBeZa 2011-02-17 11:28:54

2

是5是一个int和int是一个结构