首页 > 代码库 > C#结构

C#结构

结构的声明可以使用类似类的声明,譬如

A a=new A();

//{

  因为结构会隐式声明一个迷人的构造函数,而且与类不同的是无论是否有自定义构造函数,都存在默认构造函数;但是用户就会无法自定义无参数的构造函数(避免重复)

  不允许使用析构函数;

  可以使用实例构造函数和静态构造函数;

//}

 

还可以使用直接声明,譬如

A a;

此时要注意无法在赋值之前调用结构的成员,同时无法在所有数据成员被赋值之前调用函数;

 

结构的成员不能在结构内声明的时候进行初始化,即

1 struct Point2     {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 CS10     {11         public int x;12         public int y;13     }14     struct S15     {16         public int x;17         public int y;18     }19     class Program20     {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参数类型等

 

C#结构