详说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类型 只不过结构体可以做成 ...
随机推荐
- 使用 jQuery 进行前端验证 -- 1
如今很多的网站偶会有不同层次的验证去验证用户输入的信息是否符合我们所需要的数据类型.并且可以说任何有输入的地方都需要的去验证,验证一方面是要求用户输入正确格式的数据,同时也是避免恶意的用户进行非法的输 ...
- zookeeper服务器端管理工具
zookeeper基本是基于API和console进行znode的操作,并没有一个比较方便的操作界面,这里也发现了taobao 伯岩写的一个工具,可以比较方便的查询zookeeper信息. 工具的开发 ...
- jQuery掷骰子
网上找的jQuery掷骰子效果,测试兼容IE7及以上浏览器,IE6没有测试 js代码如下: $(function(){ var dice = $("#dice"); dice.cl ...
- Esper系列(八)Method Definition、Schema
Method Definition 作用:以公共静态方法的方式去访问外部数据. 应用说明: 1.返回数据的方法必须是公共静态方法(方法参数可以有多个也可以没有): 2.如果返回一条数据或无返回数据 ...
- Esper系列(三)Context和Group by
Context 把不同的事件按照框的规则框起来(规则框在partition by中定义),并且有可能有多个框,而框与框之间不会互相影响. 功能: 组合事件查询并进行分组,类型:Hash Context ...
- windows下利用dll生成lib
原来工程编译的一些dll库,这次项目需要静态库,偷懒想直接转化.看到网上一些教程,使用VC工具和建立lib项目来实现.有点麻烦.还有一种方法,仅仅利用工具和几条命令转化.来试试看.文章参考harrie ...
- mongodb的固定集合(优化效率)
mongodb固定集合(Capped Collection)和大文件管理(GridFS) Capped Collection 固定集合(Capped Collection)是性能出色的有着固定 ...
- css3水平翻转
@keyframes cardFront { 0%, 40%, 100% { 02 opacity:1; 03 -webkit-transform:rotateY(0deg); 04 ...
- mmsql 查询每个分类的前3条数据
select * from (select *,row_number() over(partition by PropertyRoofBeamID order by PropertyRoomID de ...
- WinForm简单多国语言实现
参考:http://minmin86121.blog.163.com/blog/static/4968115720119259151898/ http://www.cnblogs.com/hakuci ...