标签:style blog color io 使用 ar 数据 div sp
结构的声明可以使用类似类的声明,譬如
A a=new A();
//{
因为结构会隐式声明一个迷人的构造函数,而且与类不同的是无论是否有自定义构造函数,都存在默认构造函数;但是用户就会无法自定义无参数的构造函数(避免重复)
不允许使用析构函数;
可以使用实例构造函数和静态构造函数;
//}
还可以使用直接声明,譬如
A a;
此时要注意无法在赋值之前调用结构的成员,同时无法在所有数据成员被赋值之前调用函数;
结构的成员不能在结构内声明的时候进行初始化,即
1 struct Point 2 { 3 public int X=1; 4 public int Y=1; 5 }
会报错;
结构不能初始化为null,因为他是值类型,不是类类型;
对结构体赋值的时候,两个结构体s1,s2会相同,但是注意只是进行了值拷贝,但是类是进行的引用拷贝,即结构体中更改s1不会影响s2,但是在类中会影响,例如:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Struct 8 { 9 class CS 10 { 11 public int x; 12 public int y; 13 } 14 struct S 15 { 16 public int x; 17 public int y; 18 } 19 class Program 20 { 21 static void Main(string[] args) 22 { 23 CS cs1 = new CS(); 24 CS cs2 = new CS(); 25 26 S s1 = new S(); 27 S s2 = new S(); 28 29 cs1.x = 1; 30 cs1.y = 1; 31 cs2.x = 2; 32 cs2.y = 2; 33 34 cs1 = cs2; 35 36 Console.WriteLine("{0},{1}",cs2.x,cs2.y); 37 38 cs2.x = 5; 39 40 Console.WriteLine("{0},{1}", cs2.x, cs1.y); 41 42 s1.x = 3; 43 s1.y = 3; 44 s2.x = 4; 45 s2.y = 4; 46 47 s1 = s2; 48 49 Console.WriteLine("{0},{1}",s1.x,s1.y); 50 51 s2.x = 6; 52 53 Console.WriteLine("{0},{1}", s1.x, s1.y); 54 55 56 Console.ReadKey(); 57 } 58 } 59 }
分别改变2号变量的值,会发现此时在类中,1号中的数据也会更改(实际上它们就是同一块内存中的数据);但是结构体不会,因为两个结构都是值类型,无法进行引用传递,只能进行数值拷贝;
结构是隐式密封的,所有成员默认为private;同时无法被继承,因此protected,virtual,abstruct,internal等修饰符不适用;
可以使用new创建实例,可以使用overried声明覆写;
其他类似与值类型的操作适用于结构,例如out,ref参数类型等
标签:style blog color io 使用 ar 数据 div sp
原文地址:http://www.cnblogs.com/lhyz/p/3978547.html