一、結構和類的區別
1、結構的級別和類一致,寫在命名空間下面,可以定義字段、屬性、方法、構造方法也可以通過關鍵字new創建對象。
2、結構中的字段不能賦初始值。
3、無參數的構造函數無論如何C#編譯器都會自動生成,所以不能為結構定義一個無參構造函數。
4、在構造函數中,必須給結構體的所有字段賦值。
5、在構造函數中,為屬性賦值,不認為是對字段賦值,因為屬性不一定是去操作字段。
6、結構是值類型,在傳遞結構變量的時候,會將結構對象裡的每一個字段復制一份拷貝到新的結構變量的字段中。
7、不能定義自動屬性,因為字段屬性會生成一個字段,而這個字段必須要求在構造函數中,但我們不知道這個字段叫什麼名字。
8、聲明結構體對象,可以不使用new關鍵字,但是這個時候,結構體對象的字段沒有初始值,因為沒有調用構造函數,構造函數中必須為字段賦值,所以,通過new關鍵字創建結構體對象,這個對象的字段就有默認值。
9、棧的訪問速度快,但空間小,堆的訪問速度慢,但空間大,當我們要表示一個輕量級的對象的時候,就定義為結構,以提高速度,根據傳至的影響來選擇,希望傳引用,則定義為類,傳拷貝,則定義為結構。
二、Demo
{ { x = { { y = Console.Write(, .X, Point( x, .x = .y = .p = Point( .x = .y = .p = Point( x, .x = .y = .p = Name { ; Main( Program p = Program() { Name= Point point1 = Point(, Point point2 = point2.p.Name = Console.WriteLine(point1.p.Name); }
注:以上文章均屬軟謀原創文章,如需轉載,請注明出處!