一、 结构与类的区别:
结构与类共享大多数相同的语法,但结构比类受到的限制更多:
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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。