详说C#中的结构struct
一、结构和类的区别
1、结构的级别和类一致,写在命名空间下面,可以定义字段、属性、方法、构造方法也可以通过关键字new创建对象。
2、结构中的字段不能赋初始值。
3、无参数的构造函数无论如何C#编译器都会自动生成,所以不能为结构定义一个无参构造函数。
4、在构造函数中,必须给结构体的所有字段赋值。
5、在构造函数中,为属性赋值,不认为是对字段赋值,因为属性不一定是去操作字段。
6、结构是值类型,在传递结构变量的时候,会将结构对象里的每一个字段复制一份拷贝到新的结构变量的字段中。
7、不能定义自动属性,因为字段属性会生成一个字段,而这个字段必须要求在构造函数中,但我们不知道这个字段叫什么名字。
8、声明结构体对象,可以不使用new关键字,但是这个时候,结构体对象的字段没有初始值,因为没有调用构造函数,构造函数中必须为字段赋值,所以,通过new关键字创建结构体对象,这个对象的字段就有默认值。
9、栈的访问速度快,但空间小,堆的访问速度慢,但空间大,当我们要表示一个轻量级的对象的时候,就定义为结构,以提高速度,根据传至的影响来选择,希望传引用,则定义为类,传拷贝,则定义为结构。
二、Demo
struct Point
{
public Program p;
private int x; public int X
{
get { return x; }
set { x = value; }
}
private int y; public int Y
{
get { return y; }
set { y = value; }
}
public void Show()
{
Console.Write("X={0},Y={1}", this.X, this.Y);
}
public Point(int x,int y)
{
this.x = x;
this.y = y;
this.p = null;
}
public Point(int x)
{
this.x = x;
this.y = ;
this.p = null;
}
public Point(int x, int y, Program p)
{
this.x = x;
this.y = y;
this.p = p;
}
}
class Program
{
public string Name { get; set; }
static void Main(string[] args)
{
//Point p = new Point();
//p.X = 120;
//p.Y = 100;
//Point p1 = p;
//p1.X = 190;
//Console.WriteLine(p.X); //Point p;
//p.X = 12;//不赋值就会报错
//Console.WriteLine(p.X);
//Point p1 = new Point();
//Console.WriteLine(p1.X);//此处不赋值不会报错,原因见区别8 Program p = new Program() { Name="小花"};
Point point1 = new Point(, , p);
Point point2 = point1;
point2.p.Name = "小明";
Console.WriteLine(point1.p.Name);//结果为小明,分析见下图
}
}

注:以上文章均属软谋原创文章,如需转载,请注明出处!
详说C#中的结构struct的更多相关文章
- C# 中的结构类型(struct)
原文 C# 中的结构类型(struct) 简介 有时候,类中只包含极少的数据,因为管理堆而造成的开销显得极不合算.这种情况下,更好的做法是使用结构(struct)类型.由于 struct 是值类型,是 ...
- C# 中的结构类型(struct type)
ylbtech- .NET-Basic:C# 中的结构类型(struct type) C# 中的结构类型(struct type) 1.A,相关概念返回顶部 像类一样,结构(struct)是能够包 ...
- go语言中结构struct
package main; import "fmt" //结构struct //定义Person结构 type Person struct { name string; age i ...
- Linux内核中的双向链表struct list_head
一.双向链表list_head Linux内核驱动开发会经常用到Linux内核中经典的双向链表list_head,以及它的拓展接口和宏定义:list_add.list_add_tail.list_de ...
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- C++中的结构体
http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7d ...
- 【转】详解C#中的反射
原帖链接点这里:详解C#中的反射 反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...
- C/C++中的结构体
结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 结构体作用 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成 ...
随机推荐
- SharePoint : 使用SPQuery对象时要注意的事项
转:http://www.cnblogs.com/chenxizhang/archive/2009/10/23/1588415.html 我们经常需要对一个列表进行查询,此时最灵活的方式就是直接使用S ...
- [Stephen]C#中调用C++动态链接库
1.主程序声明引用外部方法,并完成方法调用
- selenium2.0 处理各种窗口问题解决方法
selenium2.0处理muti-Windows . Frames .Popup Dialogs selenium2.0处理多窗口,弹窗等,只需要调用WebDriver 嵌套类:TargetLoca ...
- asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”
1. 页面载入后,必须要等到page_Load方法执行建立 page对象后才可以使用Session 2. 在.aspx和.cs文件中使用Session的区别 (1).aspx: Session[&qu ...
- ubuntu 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
在用sudo apt-get install kmymoney2安装软件kmymoney2时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示:"E: ...
- kafka在虚拟机环境的优化
首先是,多磁盘的并发的问题.不管怎么说,虚拟机环境至少剥夺了单个kafka同时使用多个磁盘的优势.也就意味着,在同一个虚拟机,同一个topic,最好只有一partition:当然,不同topic之间p ...
- vijosP1543 极值问题
vijosP1543 极值问题 链接:https://vijos.org/p/1543 [题解](网上) 从简单情况人手: 设定m=1,将m代人方程②有(n2-n-1)2=1,可求出n=1: ...
- ionic如何uglify和minify你的js,css,image,png....
Install: 1.ionic start myapp blank 2.cd myapp 3.npm install cordova-uglify or npm install ...
- Weka 自动优化参数
import weka.core.*; import weka.classifiers.*; import weka.classifiers.meta.*; import weka.classifie ...
- MySQL索引和优化查询
索引和优化查询 恰当的索引可以加快查询速度,可以分为四种类型:主键.唯一索引.全文索引.普通索引. 主键:唯一且没有null值. create table pk_test(f1 int not nul ...