C# struct

來源:互聯網
上載者:User

標籤:

很困惑,為什麼C#會有struct 這樣一個關鍵字。雖然我用C#幾年了,但絕少用到此關鍵字。我在相關書籍上學習C#的時候,看到過struct內容——但C#並不是我的第一入門語言,所以沒有那麼細緻的學習。這其中也有一部分原因是有些書籍會淡化struct,更在的原因則在於我的先驗經驗上。忽略struct關鍵字的理由如下:

  1. 已經有class了,還有struct幹啥?節約記憶體?這不是C#的主要賣點吧。
  2. 各種神奇的限制。既然如此,就更不想用了。
  3. 難道只是為了與C++、win32的互操作?現在應用越來越遠離OS,情境也難得碰到,還是不用吧。

 

大概如此想法吧。最近當做面試官,面試了一些應聘者,另一C++出生的哥們,問到了struct與class的區別——甚至記憶體布局,一想到自己也不甚清楚,還是瞭解一下吧。C++出身的人,總是不忘記憶體。

在MSDN上找到關於struct的相關資訊:strcut是實值型別,而class是參考型別。struct在賦值時,是拷貝操作。而參考型別,只是引用了同一內容。實值型別類似C語言中的函數形參,而參考型別類似實參。還擁有實值型別的一些其他特徵,比如可空(Nullable),等等。

 

使用上還有其他一些特徵與限制[1],但我更想知道為什麼要有struct。

  1. 可以自訂新的實值型別。一般實值型別只有原始基本類型,比如int, byte。
  2. 結構最適合一些小型資料結構,這些資料結構包含的資料以建立結構後不修改的資料為主。[2]
  3. 結構更加有效,也就是更加節省記憶體, 提升處理效率[3]。因為沒有class的很多特性,所以也沒有class的中繼資料塊。
  4. 結構是實值型別,而實值型別是可計算的,擁有可計算的語義。例如DataTime。[4]

從以上內容可以看出使用struct的一般情境:

  1. 自訂的類型語義上為實值型別。穩定不變的,可計算的。
  2. 需要更高效率的情境。

關於上述第二點,記得其失去了物件導向很多特性。

 

[1] 結構(C#編程指南), https://msdn.microsoft.com/zh-cn/library/saxz13w4(v=vs.90).aspx

[2] 類和結構(C#編程), https://msdn.microsoft.com/zh-cn/library/ms173109.aspx

[3] 使用結構(C#編程指南), https://msdn.microsoft.com/zh-cn/library/0taef578.aspx

[4] 深入理解C#,人民郵電出版社, p41-43

 

C# struct

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.