C#结构

结构的声明可以使用类似类的声明,譬如

A a=new A();

//{

  因为结构会隐式声明一个迷人的构造函数,而且与类不同的是无论是否有自定义构造函数,都存在默认构造函数;但是用户就会无法自定义无参数的构造函数(避免重复)

  不允许使用析构函数;

  可以使用实例构造函数和静态构造函数;

//}

还可以使用直接声明,譬如

A a;

此时要注意无法在赋值之前调用结构的成员,同时无法在所有数据成员被赋值之前调用函数;

结构的成员不能在结构内声明的时候进行初始化,即

1 struct Point
2     {
3         public int X=1;
4         public int Y=1;
5     }

会报错;

结构不能初始化为null,因为他是值类型,不是类类型;

对结构体赋值的时候,两个结构体s1,s2会相同,但是注意只是进行了值拷贝,但是类是进行的引用拷贝,即结构体中更改s1不会影响s2,但是在类中会影响,例如:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Struct
 8 {
 9     class CS
10     {
11         public int x;
12         public int y;
13     }
14     struct S
15     {
16         public int x;
17         public int y;
18     }
19     class Program
20     {
21         static void Main(string[] args)
22         {
23             CS cs1 = new CS();
24             CS cs2 = new CS();
25
26             S s1 = new S();
27             S s2 = new S();
28
29             cs1.x = 1;
30             cs1.y = 1;
31             cs2.x = 2;
32             cs2.y = 2;
33
34             cs1 = cs2;
35
36             Console.WriteLine("{0},{1}",cs2.x,cs2.y);
37
38             cs2.x = 5;
39
40             Console.WriteLine("{0},{1}", cs2.x, cs1.y);
41
42             s1.x = 3;
43             s1.y = 3;
44             s2.x = 4;
45             s2.y = 4;
46
47             s1 = s2;
48
49             Console.WriteLine("{0},{1}",s1.x,s1.y);
50
51             s2.x = 6;
52
53             Console.WriteLine("{0},{1}", s1.x, s1.y);
54
55
56             Console.ReadKey();
57         }
58     }
59 }

分别改变2号变量的值,会发现此时在类中,1号中的数据也会更改(实际上它们就是同一块内存中的数据);但是结构体不会,因为两个结构都是值类型,无法进行引用传递,只能进行数值拷贝;

结构是隐式密封的,所有成员默认为private;同时无法被继承,因此protected,virtual,abstruct,internal等修饰符不适用;

可以使用new创建实例,可以使用overried声明覆写;

其他类似与值类型的操作适用于结构,例如out,ref参数类型等

时间: 2025-01-15 18:04:55

C#结构的相关文章

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

linux命令格式,获取帮助及其目录结构简要理解

我们都知道,一台计算机要是没通电,和一堆废铁没什么区别.那么,通电开机进入系统后,会进入交互界面,等待用户操作,人与计算机交互界面有两种: GUI:图形用户接口.如我们平时使用的Windows  ,linux的X window,有KDE和GOME. CLI:命令行接口,使用的SHELL类型有bash ,csh,tcshell,zshell等. 例如:[[email protected] ~]# commandbin root:当前登录的用户名. dxlcentOS:当前主机的主机名.@是一个分隔

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

passwd、shadow、group结构及各字段含义

/etc/password结构 sample:root:x:0:0:root:/root:/bin/bash 账号名称 密码 UID GID 用户信息说明 家目录 Shell root x 0 0 root /root /bin/bash /etc/shadow结构: sample:root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: 账号名称 密码 最近更动密码的日期 密码不可被更动的天(0代表随时可以变动) 密码需要重新变更的天

JS中的运算符&JS中的分支结构

一.JS中的运算符 1.算术运算(单目运算符) + 加.- 减.* 乘./ 除.% 取余.++ 自增.-- 自减 >>> +:有两种作用,连接字符串/加法运算.当+两边全为数字时,进行加法运算: 当+两边有任意一边为字符串时,起连接字符串的作用,连接之后的结果为字符串 除+外,其余符号运算时,会先尝试将左右变量用Number函数转为数字 >>> /: 结果会保留小数点 >>> ++: 自增运算符,将变量在原有基础上+1: --: 自减运算符,将变量在原

线性结构的常见应用之一 队列

定义:一种可以实现"先进先出"的存储结构 分类 链式队列 --  用链表实现 静态队列 --  用数组实现 静态队列通常都必须是循环队列 循环队列的讲解: 1.静态队列为什么必须是循环队列 2.循环队列需要几个参数来确定   需要两个参数来进行确定:front   rear 3.循环队列各个参数的含义 2个参数在不同的场合有不同的含义 建议初学者先记住,后面再想 1).队列初始化 front 和 rear 的值都是零 2).队列非空 front 代表的是队列的第一个元素 rear 代表

java-分支结构(四种基本分支结构的认识)

分支结构:有条件的执行某语句,并非每句必走 1)if结构:1条路 2)if...else结构:2条路 3)if...else if结构:多条路 4)switch...case结构:多条路 优点:效率高.结构清晰 缺点:整数.相等 break:跳出switch 一.if结构的认识 /* * 1.if结构:1条路 * 1)语法: * if(boolean){ * 语句块 * } * 2)执行过程: * 判断boolean的值: * 若为true,则执行语句块 * 若为false,则不执行语句块 */

选择结构if语句和switch语句的区别

1.选择结构if语句格式及其使用 A:if语句的格式: if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } ... else { 语句体n+1; } B:执行流程: 首先计算比较表达式1看其返回值是true还是false, 如果是true,就执行语句体1,if语句结束. 如果是false,接着计算比较表达式2看其返回值是true还是false, 如果是true,就执行语句体2,if语句结束. 如果是fals

SQL SERVER大话存储结构(5)

阅读目录(Content) 1 基本介绍 2 对数据库启动的影响 3 日志文件添加方式 4 物理结构 5 延迟日志截断原因 6 管理事务日志 本系列上一篇博文链接:SQL SERVER大话存储结构(4)_复合索引与包含索引 回到顶部(go to top) 1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行日志备份. 大容量日志模式,适用于批量操作的

顺序结构显示日期与时间

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace 顺序结构时间日期{ public partial class Form1 : Form { public Form1() {