您好,登錄后才能下訂單哦!
一、 結構與類的區別:
結構與類共享大多數相同的語法,但結構比類受到的限制更多:
1. 結構是值類型,而類是引用類型。
2. 在結構聲明中,除非字段被聲明為 const 或 static,否則無法初始化。
3. 結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。結構可以聲明帶參數的構造函數。
4. 一個結構不能從另一個結構或類繼承,而且不能作為一個類的基類。所有結構都直接繼承自 System.ValueType,后者繼承自 System.Object。
5. 結構可以實現接口。
6. 與類不同,結構的實例化可以不使用 new 運算符。
7. 結構在賦值時進行復制。 將結構賦值給新變量時,將復制所有數據,并且對新副本所做的任何修改不會更改原始副本的數據。在使用值類型的集合(如 Dictionary<string, myStruct>)時,請務必記住這一點。
8. 結構可以為 null 的類型,因而可向其賦 null 值。
二、 結構體示例:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace CSharp.Struct
7: {
8:
9: public struct CoOrds //不能從另一個結構或類繼承,但可實現接口
10: {
11: public int x, y;
12:
13: //結構中不能有實例字段初始值,除非被聲明為 const 或 static
14: //public int x = 0;
15: //public int y = 0;
16:
17: //結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數
18: //public CoOrds()
19: //{
20:
21: //}
22:
23: //結構可以聲明帶參數的構造函數。
24: public CoOrds(int p1, int p2)
25: {
26: x = p1;
27: y = p2;
28: }
29: }
30:
31: class Program
32: {
33: static void Main(string[] args)
34: {
35: //
36: //與類不同,結構的實例化可以不使用 new 運算符。
37: //
38:
39: // Declare an object:
40: CoOrds coords1;
41:
42: // Initialize:
43: coords1.x = 10;
44: coords1.y = 20;
45:
46: // Display results:
47: Console.Write("CoOrds 1: ");
48: Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);
49:
50: // Initialize:
51: CoOrds coords2 = new CoOrds();
52: CoOrds coords3 = new CoOrds(10, 10);
53:
54: // Display results:
55: Console.Write("CoOrds 2: ");
56: Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);
57:
58: Console.Write("CoOrds 3: ");
59: Console.WriteLine("x = {0}, y = {1}", coords3.x, coords3.y);
60:
61: //
62: //將結構賦值給新變量時,將復制所有數據,并且對新副本所做的任何修改不會更改原始副本的數據。
63: //
64:
65: //Copy
66: Console.Write("After Copy:\n");
67: coords2 = coords3;
68: coords2.x = 20;
69: // Display results:
70: Console.Write("CoOrds 2: ");
71: Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);
72:
73: Console.Write("CoOrds 3: ");
74: Console.WriteLine("x = {0}, y = {1}", coords3.x, coords3.y);
75:
76: // Keep the console window open in debug mode.
77: Console.WriteLine("Press any key to exit.");
78: Console.ReadKey();
79:
80: }
81: }
82: }
三、 參考鏈接:
C#封裝c++結構體與互調用:
http://developer.51cto.com/art/200908/143782.htm
解決C#結構體數組間的轉化
http://developer.51cto.com/art/200908/143779.htm
C#結構體的序列化與反序列化
http://developer.51cto.com/art/200908/144015.htm
StructLayoutAttribute Class
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx
How to: Create a C/C++ Union Using Attributes (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/acxa5b99%28v=vs.80%29.aspx
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。