【四】使用枚举和结构来创建值类型

enum Season {Spring=0,Summer=22,Fall,Autumn=Fall,Winter=4}
Season colorful = Season.Fall;
string name = colorful.ToString();
Console.WriteLine(colorful);//输出Fall
Console.WriteLine(name);//输出Fall
Console.WriteLine((int)colorful);//输出23,这里注意23是因为summer的22加了1

枚举每个元素都关联(对应)着一个整数值。叫做基础整数值,或者基础值。
如果不为枚举文字常量指定一个常量整数值,编译器会自动为它指定比前一个枚举文字常量大1的值。
第一个枚举文字常量指定默认值是0
需要注意的是,多个枚举文字常量可以拥有相同的基础值。

为了节省内存的话可以选择
enum Season : short {Spring,Summer,Fall,Winter}

一个类型可以基于8种整数类型中的任何一种: byte,sbyte,short,ushort,int,uint,long,ulong 八种

可以对一个枚举可以执行数学运算,但假如运算结果超出枚举定义取值范围,“运行时”唯一可以做的就是将变量的值解释为对应的整数值。

//--------------------------------------------------
结构(struct):当类中只包含极少的数据,使用堆(heap)不合算,所以在栈(stack)上存储,即定义为结构(struct)
tips:
string s = "42";
int i = int.Parse(s);//int.Parse(字符串)是把字符串转化为int的方法

大多数的时候都不要将一个结构的字段声明为public字段!否则无法保证public字段总是包含有效值。

构造和类的区别:
①不能为结构声明默认构造器(一个无参构造器)。
因为编译器始终会帮我们生成一个默认的,并把字段设为0,false或者null;
我们要保证默认构造器创建的结构值具有符合逻辑的行为,所以,也可以自己声明一个非默认的构造器用来初始化(虽然编译器扔会生成默认构造器)
此时!注意!自己写的构造器中必须初始化所有的字段!否则无法通过编译。
②在类中可以在声明一个实例字段的时候同!时!初始化它,但在结构中不允许这样。
结构中必须先声明!然后让编译器默认初始化或者自己所有都初始化。

复制一个结构变量时,=操作符左侧的结构变量的每个字段都直接从右侧结构变量的相应字段中复制。
将一个结构变量赋值给另一个结构变量,前提是操作符=右边的struct变量已经被完全初始化(即所有字段已经被初始化了)

不自己写初始化的话,编译器就会默认初始化0、false、null。

//--以下内容很需要注意!!!!!!!!!!!!!!!!!!!!!!!!!
非常重要:复制值类型的变量时,将获得值的两个副本。相反,复制一个引用类型的变量时,将获得对同一个对象的两个引用。
Person Ming = new Person();
Person Gang = new Person();
Ming.Age = 23;
Gang = Ming;//这里其实是让Ming和Gang都引用了之前Ming对应的堆内存
Gang.Age = 25;
Console.WriteLine(Ming.Age);//输出值为25。
//--------------------------------------------------------
以上这点在结构这里同样有参考价值!

结构是值类型,复制值类型的变量会创造变量中所有数据的一个副本。
然而类是引用类型,复制引用类型变量复制的是对原始变量的引用!而类变量中数据发送改变的话,这个变量的所有引用都会变。

时间: 2024-08-24 08:27:19

【四】使用枚举和结构来创建值类型的相关文章

C#基本语法复习-使用枚举和结构来创建值类型

声明枚举: enum Season{Spring,Summer,Fall,Winter} 如果不为枚举一个枚举文字常量显示指定一个常量整数型,编译器会自动为他指定比前面一个枚举文字常量大一的值 enum Season{Spring=1,Summer,Fall,Autumn=Fall,Winter} 选择枚举的基本类型: enum Season : Short{Spring,summer,fall,winter } 声明结构: struct Time { private int hours,min

结构体和值类型(转)

如果你曾经使用过 Objective-C 或者像 Ruby,Python,JavaScript 这样的语言,可能会觉得 Swift 里的结构体就像外星人一样奇异.类是面向对象编程语言中传统的结构单元.的确,和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体?正是因为它的使用范围受限,使得结构体在构建代码块 (blocks) 的时候非常灵活.在本文中,你将会学习到结构体和其他的值类型是如何大幅提高代码的清晰度.灵活性和可

C#中的struct(结构)为值类型,struct类型全接触

众所周知,struct类型和class类型非常相似,尤其是在C++中,class可以办到的事struct几乎都可以实现.在C#中struc类型依然存在,它的用处相对来说已经显得越来越不重要,这里主要讲述一下C#中struct和class的一个最大不同点,在C#中struct是值类型,而class是引用类型. 例: class Program { struct Test { public int a ; } static void Main(string[] args) { Test test1 

c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递

#include <stdio.h> int main() { struct person { int age; }; struct person p1 = {19}; //值传递,将p1中所有成员变量的值赋值个p2中对应的成员变量 struct person p2=p1; //改变p1的成员变量的值,不会影响p2中对应成员变量的值 p1.age = 20; printf("p1.age=%d\n",p1.age); printf("p2.age=%d\n&quo

C# 之 枚举与结构

枚举类型 如果一个变量只有几种可能的取值,可以使用枚举类型来定义.枚举类型属于用户自定义数据类型.所谓"枚举"是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量. 1.枚举值在运行时是常量,可以作为case的条件等待. 2.枚举值可以指定对应的整数数据类型. 3.所有的枚举都隐式继承自System.Enum抽象类 4.枚举值赋值的时候需要避免循环引用的情况. 5.枚举值可以转换成整数. 枚举类型的声明     enum 枚举类型名 {枚举常量1,枚举常量2,...枚举

枚举与结构体

枚举与结构体 枚举 enum 枚举的作用是用来增加代码的可读性,限制变量的使用范围.枚举有以下特点: 一个完整的枚举包括关键字enum.变量名.{}以及枚举值,例如: enum Fruits{    Apple,    Orange,} 枚举变量的声明要使用变量名,枚举值的调用也要使用变量名,使用如下: Fruits apple = Fruits.Apple; 枚举字面值属于整型,默认是int类型,可以通过在变量名后指定某一值类型,枚举可选的整型包括:byte.sbyte.short.ushor

C#引用类型和值类型的区别

1***.C#中有两种类型: 值类型和引用类型: 值类型的变量直接包含他们的数据,而引用类型的变量存储 引用类型存储对他们的数据的引用,后者称为对象: 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象. 2***. 值类型:简单类型.枚举.结构 引用类型: 类类型.接口类型.数组类型和委托类型 3***.值类型与引用类型的内存存储 单纯的说值类型存储在栈上,引用类型存储在托管堆上是不对的. 4***.区别: 1. 托管堆: 同步块和方法表, x,y,托管堆上的需要

C# 值类型与引用类型 (上)

1. 主要内容 类型的基本概念 值类型深入 引用类型深入 值类型与引用类型的比较及应用 2. 基本概念 C#中,变量是值还是引用仅取决于其数据类型. C#的基本数据类型都以平台无关的方式来定义,C#的预定义类型并没有内置于语言中,而是内置于.NET Framework中..NET使用通用类型系统(CTS)定义了可以在中间语言(IL)中使用的预定义数据类型,所有面向.NET的语言都最终被编译为 IL,即编译为基于CTS类型的代码, 通用类型的系统的功能: 建立一个支持跨语言集成.类型安全和高性能代

C# 值类型和引用类型(转)

1. 主要内容 类型的基本概念 值类型深入 引用类型深入 值类型与引用类型的比较及应用 2. 基本概念 C#中,变量是值还是引用仅取决于其数据类型. C#的基本数据类型都以平台无关的方式来定义,C#的预定义类型并没有内置于语言中,而是内置于.NET Framework中..NET使用通用类型系统(CTS)定义了可以在中间语言(IL)中使用的预定义数据类型,所有面向.NET的语言都最终被编译为 IL,即编译为基于CTS类型的代码, 通用类型的系统的功能: 建立一个支持跨语言集成.类型安全和高性能代