關於C#中的結構

來源:互聯網
上載者:User
其實在介紹Struct之前,我們應對C#關於類(Class)的原理進行初步的研究。但是,從另一個方面,我們也可以先對這個與類有著血緣關係的結構進行探討以獲得對類的進一步的認識。
首先,C#的結構是一個關係重大的語言功能。和類一樣,結構也可以包含其他類型。由於結構在內部是實值型別的,所以結構有時也被稱為類的輕型版本。同時,結構不承擔引用對象所帶來的開銷,除非在對其裝箱時例外。
結構也有其重要的限制,所以導致他只能用於非常特殊的場合。 以下就討論他們的局限性和他的優點。
結構的定義和類的定義基本上是一致的:
[attributes][modifiers] struct <structName> [:interfaces]
{
[struct-body]
}[;]
為了便於理解,我舉個執行個體來展開論述。我們首先定義一個描述具體事物的結構體——"611311班"。
struct STUClass{
public string ClassName;
public object ClassMumber;
public int ClassNumber;
}
到目前為止,這個聲明很像一個類。但是,下面你將看到在使用結構方面的許多限制。
客戶不必對結構進行執行個體化(通過new關鍵字)。這是因為,作為一種實值型別,結構一旦被聲明,就被分配。
但是正是有了這種用法,所以我們如果不親自對結構的成員進行顯式的初始化(使用new關鍵字),那麼欄位就不會被初始化。如下面這段代碼,編譯將會出錯:
STUClass s611311;
Console.WriteLine(s611311.ClassName);
以下的代碼將會糾正這個錯誤。注意,因為s611311.ClassName 是一個實值型別,所以初始化模認為 0 ;
STUClass s611311 = new STUClass();
Console.WriteLine(s611311.ClassName);
我所知的結構成員包括構造器、常量、欄位、方法、特性、索引器、操作符等類型。但是,在構造器方面,結構有個非常重要的限制:不能位結構建立無參數的構造器。
所以,以下代碼不能編譯通過:
struct STUClass{
public STUClass();
public string ClassName;
public object ClassMember;
public int ClassNumber;
}
但是,我們可以利用帶有參數的構造器原型來定義:
struct STUClass{
public STUClass(string name,object menber,int number)
{
ClassName = name;
ClassMember = menber;
ClassNumber = number;
}
public string ClassName;
public object ClassMember;
public int ClassNumber;
}
如果仔細研究一下定義結構的文法,會注意到其中沒有基類的列表。這是由於結構不能基於其他結構或類,而且他們也不能作為其他結構或類的基。如果希望看到更加直觀的結論,你最好到.Net 開發環境中分別定義一個具有相同成員的類和結構,然後到編譯器產生的MSIL中去比較一下。
從中我們可以得出一下結論:1、結構的定義是封閉的(不能作為基類使用);2、結構隱式地派生自System.ValueType,
而System.ValueType是所有實值型別的超類型(終極基類)。3、結構沒有預設的構造器。
(欲知使用結構的原則和常式,且看下回分曉...)


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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