簡體   English   中英

C#泛型和約束

[英]C# Generics and Constraints

如果我有一個通用約束,其中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,但不是struct struct。 我想我在這里遺漏了一些東西。

也只是使用正確的術語:

int b = 5; 

我實例化b? 創建一個int實例? 出於某些原因,當我想到“實例”時,我會想到引用類型。

這里:

Car c1 = new Car(); 

在這里,我理解我正在創建一個Car實例或實例化c1。

int是一個struct

查看MSDN上的Int32定義


編輯:

這樣做:

 int i = 5;

以及:

MyStruct m = new MyStruct();

您正在創建一個與包含結構所需空間一樣大的內存位置。
與引用類型的不同之處在於變量mi不是對存儲值的那些存儲器位置的引用,但它們基本上是“值本身”

事實上你這樣做:

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

m2並不代表的同一存儲器位置m1 ,但內容m1在由變量表示的存儲器中的新位置復制m2

根據具有struct Type約束的MSDN ,type參數必須是值類型。 可以指定除Nullable之外的任何值類型。

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

是5是int,int是結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM