深入探讨C#中的结构struct

(引用:http://www.jb51.net/article/41820.htm)

一、结构和类的区别

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 = 11;

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(10, 10, p);

Point point2 = point1;

point2.p.Name = "小明";

Console.WriteLine(point1.p.Name);//结果为小明,分析见下图

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,793评论 0 33
  • /*类和对象 1.类和实例化定义类声明类定义成员函数数据成员的赋值使用类的对象。 2.构造函数数据封装默认构造函数...
    aofeilin阅读 1,108评论 1 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 不知道大家有没有这种感觉?随着阅片量的增长,口味也越来越刁。我们不再追求简单的情节,转而渴求复杂的故事。平铺直叙的...
    可惜无声阅读 3,943评论 0 7