详说C#中的结构struct
时间:2022-07-28
本文章向大家介绍详说C#中的结构struct,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、结构和类的区别
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 }
注:以上文章均属软谋原创文章,如需转载,请注明出处!
- 【LeetCode】关关刷题日记24-Leetcode 121. Best Time to Buy and Sell Stock
- 线性表的链式存储结构的实现及其应用(C/C++实现)
- [接口测试 - 基础篇] 01 你应该了解的协议基础
- 使用TensorFlow实现神经网络的介绍
- HTTP协议报文结构及抓包报文分析示例
- 必备 .NET - C# 异常处理
- Java Socket获取本机的InetAddress实例
- 机器理解大数据秘密:聚类算法深度剖析
- BZOJ 3668: [Noi2014]起床困难综合症【贪心】
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 51 Nod 1007 正整数分组【类01背包】
- 从入门到精通之Boyer-Moore字符串搜索算法详解
- 线性表的顺序存储结构的实现及其应用(C/C++实现)
- IPython使用学习笔记
- 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 数组属性和方法
- 深度对比Python的3种“字符串格式化”方法,看看你喜欢哪一种?
- 用Python分析广州房地产市场
- 面试题-JAVA之HashMap-put方法源码分析
- 案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)
- Python 3.10 明年发布,看看都有哪些新特性?
- R可视化 | 混合多个图形
- 爱了!爱了!一款用 pandas 玩转 SQL 的神器
- 详细了解JS Map,它和传统对象有什么区别?
- Java HelloWorld 學習
- Bytecodes.java
- GenerateOopMap.java
- CellTypeState.java
- 终于开始了,微软的野心将通过全场景开发平台.NET 5体现得淋漓尽致!
- 微信小程序开发实战(27):录音
- 微信小程序开发实战(28):播放、暂停、停止声音