c#结构体总结
时间:2022-07-28
本文章向大家介绍c#结构体总结,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
https://www.cnblogs.com/jhlxyp/articles/4322964.html
一、结构和类的区别
1、结构的级别和类一致,写在命名空间下面,可以定义字段、属性、方法、构造方法也可以通过关键字new创建对象。
2、结构中的字段不能赋初始值。
3、无参数的构造函数无论如何C#编译器都会自动生成,所以不能为结构定义一个无参构造函数。
4、在构造函数中,必须给结构体的所有字段赋值。
5、在构造函数中,为属性赋值,不认为是对字段赋值,因为属性不一定是去操作字段。
6、结构是值类型,在传递结构变量的时候,会将结构对象里的每一个字段复制一份拷贝到新的结构变量的字段中。
7、不能定义自动属性,因为字段属性会生成一个字段,而这个字段必须要求在构造函数中,但我们不知道这个字段叫什么名字。
8、声明结构体对象,可以不使用new关键字,但是这个时候,结构体对象的字段没有初始值,因为没有调用构造函数,构造函数中必须为字段赋值,所以,通过new关键字创建结构体对象,这个对象的字段就有默认值。
9、栈的访问速度快,但空间小,堆的访问速度慢,但空间大,当我们要表示一个轻量级的对象的时候,就定义为结构,以提高速度,根据传至的影响来选择,希望传引用,则定义为类,传拷贝,则定义为结构。
二、Demo
1 struct Point
2 {
3 public Program p;
4 private int x;
5
6 public int X
7 {
8 get { return x; }
9 set { x = value; }
10 }
11 private int y;
12
13 public int Y
14 {
15 get { return y; }
16 set { y = value; }
17 }
18 public void Show()
19 {
20 Console.Write("X={0},Y={1}", this.X, this.Y);
21 }
22 public Point(int x,int y)
23 {
24 this.x = x;
25 this.y = y;
26 this.p = null;
27 }
28 public Point(int x)
29 {
30 this.x = x;
31 this.y = 11;
32 this.p = null;
33 }
34 public Point(int x, int y, Program p)
35 {
36 this.x = x;
37 this.y = y;
38 this.p = p;
39 }
40 }
41 class Program
42 {
43 public string Name { get; set; }
44 static void Main(string[] args)
45 {
46 //Point p = new Point();
47 //p.X = 120;
48 //p.Y = 100;
49 //Point p1 = p;
50 //p1.X = 190;
51 //Console.WriteLine(p.X);
52
53 //Point p;
54 //p.X = 12;//不赋值就会报错
55 //Console.WriteLine(p.X);
56 //Point p1 = new Point();
57 //Console.WriteLine(p1.X);//此处不赋值不会报错,原因见区别8
58
59 Program p = new Program() { Name="小花"};
60 Point point1 = new Point(10, 10, p);
61 Point point2 = point1;
62 point2.p.Name = "小明";
63 Console.WriteLine(point1.p.Name);//结果为小明,分析见下图
64 }
65 }
- 关于分区表的move操作(r2笔记90天)
- 简单分析oracle的数据存储(r2笔记89天)
- 机器学习线性分类算法:感知器原理
- 通过shell脚本来查看Undo中资源消耗高的sql(r2笔记88天)
- 关于分页查询的优化思路(r3笔记第7天)
- 用机器学习方法对影评与观影者情感判定
- 关于查看文件的几个小命令(r3笔记第6天)
- 关于纠结的recycle pool的设置(r3笔记第5天)
- 融会贯通学习trigger(r2笔记第4天)
- 完整的R语言预测建模实例-从数据清理到建模预测
- 利用回归模型预测数值型数据(代码)
- 关于ORA-00020问题的反思(r2笔记第3天)
- 查看空间使用情况的脚本(r2笔记第2天)
- 使用dbms_parallel_execute来完成DML的并行(r3笔记第1天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法