首页 > 代码库 > 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#结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。