簡體   English   中英

對C#struct如何工作感到困惑

[英]Confused about how C# struct work

我有一個結構

public struct card
{
    PictureBox picture;
    double value;
}

我想制作一個數組,並在我繼續時添加/刪除圖片和值。 我無法做到這一點

card[] c = new card[13];
c[1].value = 4; 

如何分配,閱讀和機會值?

public value

public double value;

默認情況下 ,類/結構級別元素是private ,這使得它無法訪問。

建議大寫公共元素,並使用屬性而不是字段,因此使用以下內容會更好:

public double Value { get; set; }

你可能想考慮讓你的struct成為一個class ,因為這不是一個很好的選擇。 (請參閱何時使用struct ? ,大多數時候您將使用C#中的類)您還可以使用圖片及其值的字典:

public Dictionary<Picture, double> Cards;

C#中的結構不等同於C結構。 在C#中,struct具有by值復制語義。 這可能有點令人困惑。

考慮以下:

Card[] cards = new Card[13];
Card card = cards[1];
card.Value = 42;

你可能會期望cards[1].Value值為42,但是當你發現它不是時,你會感到驚訝。 這部分是可變結構是邪惡的原因。

改為使用class ,它更接近於C結構,就像傳遞類的引用副本一樣,而不是復制值本身:

public class Card
{
    public PictureBox Picture { get; set; }
    public double Value { get; set; }
}

結構是一堆用膠帶粘在一起的變量。 如果你想要一堆與管道膠帶粘在一起的獨立但相關的變量,通常最好使用一個結構來暴露與管道膠帶粘在一起的一堆變量,而不是設計一個試圖達到這個目的的類,或者假裝成為試圖服務於該目的的類的對象的結構。 但是,如果你想要一些表現為對象的東西,那么你應該使用一個類。

給定card如圖所示, card[] foo = new card[10]將使foo識別一個數組,其中包含10個類型為PictureBox引用和10個double值。 申報card bar; 將為另一個PictureBox引用和另一個獨立於Universe中的任何其他內容的double定義空間。 說吧bar = foo[3]; 將等同於bar.picture = foo[3].picture; bar.value = foo[3].value; bar.picture = foo[3].picture; bar.value = foo[3].value; ,並且不會在barfoo[3]的領域之間建立任何持久的關系foo[3]

管道錄制變量結構對於某些目的非常有用,例如保持點的坐標,但重要的是要識別它們是什么。 如果希望類型表示對象,請使用類。 只有當你想要它將一堆獨立但相關的變量用管道連接在一起時才應該使用struct

暫無
暫無

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

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