深入探讨C#中的结构struct
一、结构和类的区别
1、结构的级别和类一致,写在命名空间下面,可以定义字段、属性、方法、构造方法也可以通过关键字new创建对象。
2、结构中的字段不能赋初始值。
3、无参数的构造函数无论如何C#编译器都会自动生成,所以不能为结构定义一个无参构造函数。
4、在构造函数中,必须给结构体的所有字段赋值。
5、在构造函数中,为属性赋值,不认为是对字段赋值,因为属性不一定是去操作字段。
6、结构是值类型,在传递结构变量的时候,会将结构对象里的每一个字段复制一份拷贝到新的结构变量的字段中。
7、不能定义自动属性,因为字段属性会生成一个字段,而这个字段必须要求在构造函数中,但我们不知道这个字段叫什么名字。
8、声明结构体对象,可以不使用new关键字,但是这个时候,结构体对象的字段没有初始值,因为没有调用构造函数,构造函数中必须为字段赋值,所以,通过new关键字创建结构体对象,这个对象的字段就有默认值。
9、栈的访问速度快,但空间小,堆的访问速度慢,但空间大,当我们要表示一个轻量级的对象的时候,就定义为结构,以提高速度,根据传至的影响来选择,希望传引用,则定义为类,传拷贝,则定义为结构。
二、Demo
structPoint
{
publicProgramp;
privateintx;
publicintX
{
get{returnx;}
set{x=value;}
}
privateinty;
publicintY
{
get{returny;}
set{y=value;}
}
publicvoidShow()
{
Console.Write("X={0},Y={1}",this.X,this.Y);
}
publicPoint(intx,inty)
{
this.x=x;
this.y=y;
this.p=null;
}
publicPoint(intx)
{
this.x=x;
this.y=11;
this.p=null;
}
publicPoint(intx,inty,Programp)
{
this.x=x;
this.y=y;
this.p=p;
}
}
classProgram
{
publicstringName{get;set;}
staticvoidMain(string[]args)
{
//Pointp=newPoint();
//p.X=120;
//p.Y=100;
//Pointp1=p;
//p1.X=190;
//Console.WriteLine(p.X);
//Pointp;
//p.X=12;//不赋值就会报错
//Console.WriteLine(p.X);
//Pointp1=newPoint();
//Console.WriteLine(p1.X);//此处不赋值不会报错,原因见区别8
Programp=newProgram(){Name="小花"};
Pointpoint1=newPoint(10,10,p);
Pointpoint2=point1;
point2.p.Name="小明";
Console.WriteLine(point1.p.Name);//结果为小明,分析见下图
}
}
相关文章
- C#设计模式——(创建型-工厂方法设计模式)
- C#实现Oracle批量写入数据的方法分享
- C#中关于Struct(结构体)介绍以及附带案例解释,一看就会,一学就懂系列[通俗易懂]
- c#LINQ、Lambda总结
- C#自定义异常
- dotnet C# 使用 Vortice 创建 Direct2D1 的 ID2D1SolidColorBrush 纯色画刷
- C#IFF图形结构解析代码
- 解决C#程序只允许运行一个实例的几种方法详解
- ASP.NET(C#)验证数字的两种方法
- C#中使用反射获取结构体实例及思路
- c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
- C#中String类常用方法汇总
- C#中var关键字用法分析
- C#使用listView增删操作实例
- C#枚举类型与结构类型实例解析
- C#生成随机数实例
- C#网络编程基础之进程和线程详解
- C#中类与结构的区别实例分析