(12)C#枚举,结构
枚举
枚举类型是类似自定义的一个类,类里放着你自己定义的常量,关键字enum。
enum Season{spring,summer,fall,winter}
想用这里的常量的话,首先把变量定义成 Season类型,然后再给它赋值
Season a=Season.fall;
Console.WriteLine(a);//输出结果 fall
枚举类型的每一个常量都对应着一个整数值。默认第一个是0,往后依次加1.
上面的spring相当于0,summer相当于1,fall相当于2,winter相当于3.
Console.WriteLine(int(a));//结果输出 2
默认常量是一个int的值,如果想声明成其他类型加 :数据类型
enum Season:short{spring,summer,fall,winter}
这样做的目的是为了节省内存。short比int占的字节要少。
枚举类型可以定义成8种整数类型的任何一种:byte,sbyte,short,ushort,int,uint,long,ulong.
结构
结构是值类型,数据直接存储在栈上。关键字是struct。不能手动写一个默认的无参构造函数,不然执行程序时会报错。
struct A
{
A()
{
//运行程序时会报错,显示“结构部能包含显式的无参数构造函数”(写完看不出错误,运行时才会报错)
}
}
出错原因:声明的结构始终会帮我们生成一个默认的无参构造函数。(类是只有在没写无参构造函数时才会默认生成)
结构的赋值
结构不能直接给变量赋值,除非加了静态关键字。
struct A
{
public static int x = ;//可以
public int y=; //报错 “结构中不能有实例字段初始值”
}
结构变量的使用
使用srtuct有两种方法:
1、实例化结构
A a=new A();
2、直接创建
A a;
虽然这两种方式创建后使用的字段都在栈上,但他们的区别在于
.用new实例化的会调用构造函数给他里面的字段初始化。
.但直接创建的它里面的字段需要初始化后才能使用
struct A
{
public static int x ;
public int y;
}
class B
{
public static void Main(string[] args)
{
A a=new A();
Console.WriteLine(A.x);// 结果为0
Console.WriteLine(a.y);// 结果为0
}
这里构造函数会为x,y进行初始化。一般默认初始成0、false、null
struct A
{
public static int x = ;
public int y;
}
class B
{
public static void Main(string[] args)
{
A a; //声明A 值类型不需要new
a.y = ;//给y赋值
Console.WriteLine(A.x);//静态直接用 A 结果输出 5
Console.WriteLine(a.y);//输出6
}
因为A是值类型所以可以直接用 A a;但是由于没有调用构造器所以需要自己手动的行进初始化。不然会报错。
几点注意
.虽然结构不能用无参构造函数但是可以有含参的构造函数
.结构不能被继承,也不能当做父类
.结构可实现一个或多个接口
.结构成员不能指定为 abstract、virtual 或 protected
.结构不能定义析构函数
(12)C#枚举,结构的更多相关文章
- C#中常量\枚举\结构及数组的运用
		又一天结束了,今天在云和学院学习的知识下面继续来做总结. 一.常量\枚举\结构的运用 理论: 常量:const 类型 常量名 = 常量值 确定数量.确定值的几个取值:东西南北.男女.上中下. 枚举: ... 
- C#学习笔记_12_枚举&结构体
		12_枚举&结构体 枚举 是一种数据类型 适用于某些取值范围有限的数据 语法: [访问权限修饰符] enum 枚举名 { 枚举值 } 枚举名遵循大驼峰命名法 枚举一般情况下是和switch c ... 
- C#学习笔记12:枚举、结构、数组基础学习
		枚举:public enum MyEnum { 值1, 值2, 值3 } Public enum Season { 春, 夏, 秋, 冬 } 枚举的作用:规范用户的输入,枚举可以转换为int类型,可以 ... 
- [C语言]进阶|结构类型: 枚举, 结构, 类型定义
		--------------------------------------------------------------------- 枚举: // main.c #include <std ... 
- 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承
		1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ... 
- Swift枚举|结构体|类|属性|方法|下标脚本|继承
		1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ... 
- C语言学习笔记--枚举&结构体
		枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ... 
- .Net基础篇_学习笔记_第八天_复杂数据类型(常量/枚举/结构)
		1.常量: 声明的常量的语法:const 变量类型 变量名=值;最大的特点就是,声明了常量后,就不能再被重新赋值. 2.枚举 语法:[public] enum 枚举名{ 值1, 值2, 值3, ... ... 
- 前端学习笔记2017.6.12 HTML的结构以及xhtml、html、xml的区别
		HTML的结构 一个HTML文档可分为几个部分,如下图所示: DOCTYPE部分.head部分和body部分 DOCTYPE部分,这个很重要,可以理解为不同的DOCTYPE意味着不同的html标准,因 ... 
随机推荐
- ScrollView中ViewPager无法正常滑动问题
			本文主要介绍如何解决ViewPager在ScrollView中滑动经常失效.无法正常滑动问题. 解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPage ... 
- 《Cracking the Coding Interview》——第14章:Java——题目5
			2014-04-26 19:06 题目:Java中的对象反射机制是什么?有鼠么用? 解法:完全不了解,因为java编程经验太少,完全没用过.查了一些资料后,感觉反射机制是个强大并需要边用边体会的强大工 ... 
- 《Cracking the Coding Interview》——第13章:C和C++——题目4
			2014-04-25 19:50 题目:深拷贝和浅拷贝有什么区别?如何应用? 解法:深拷贝传值,浅拷贝传引用.java里对此做了限制,而C++里面用起来更自由.大结构不宜传值,因为拷贝过程效率低. 代 ... 
- SSH集成cxf 发布restful webservice
			首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ... 
- flask利用session身份伪造
			想研究很久了,这次终于初步了解了flask session伪造(得知道密钥). python2和python3 session解密不一样,而且不都是base64,脚本https://github.co ... 
- 【转载】Unity3D研究院transform.parent = parent坐标就乱了
			昨天有朋友问我了一个问题,它将Hierarchy视图里的某个子节点下的GameObject拷贝到另外一个对象的子节点下面,他使用的方法就是 transform.parent = parent 但是拷贝 ... 
- 贪吃蛇StringBuilder 和 定时器
			ConsoleKeyInfo info = Console.ReadKey(); while (true) { if (info.Key == ConsoleKey.UpArrow)//只能输入一次但 ... 
- 【BZOJ 5000 OI树】
			Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 107 Solved: 64[Submit][Status][Discuss] Description ... 
- php5.3.3以上重启php-fpm的方法
			http://www.cnblogs.com/GaZeon/p/5421906.html 
- quartz 调度
			1.POI文件中导入包 <dependency> <groupId>org.quartz-scheduler</groupId> <artifact ... 
