总结:
- const 天然是static修饰,readonly修饰的值类型和引用类型都不可以再重新赋值,但是对于引用类型指向的实例对象可以再次赋值。
- 不要显示赋值给枚举对象,枚举对象默认0为初始值,保持默认就可以,因为如果需要增加枚举值时如果已经显示的复制会发生错误
- 枚举的使用:通过值获取枚举类型(枚举)int 强转 ,反之要等到枚举类型值(int)枚举对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PromoteDay03
{
enum Week
{
Monday = 1,
TuesDay = 2,
Value,
Wednesday = 3,
ThursDay = 4,
Friday = 5,
Saturday = 6,
Sunday = 7
}
class Program
{
static void Main(string[] args)
{
/*-----------------------------------*/
//建议6.ReadOnly 和Const的使用方法
/*
1、const只能修饰基元类型(编译器可以直接支持的类型,sbyte / byte / short / ushort /int / uint / long / ulong
char / float / double / bool),枚举类型或者字符串类型,const是编译常量,天然是Static修饰
2、对于readonly修饰的类型如果提前赋了初始值也可以重新赋值
*/
Sample sample = new Sample(200);
// sample.ReadOnlyValue = 100; 无法对只读对象再次赋值,值类型和引用类型都一样,但是引用类型指向的对象可以再次赋值
Sample2 s2 = new Sample2(new Student(10));
// s2.Student = new Student(20); 无法对只读字段赋值 不能再指向其他实例对象
s2.Student.Age = 10;//引用本身不可以改变,但是引用所指向的实例的值是可以改变的
/*---------------------------------------------------------*/
/*
建议7.将0值作为枚举的默认值
通过值获取枚举类型(枚举)int 强转 反之要等到枚举类型值,(int)枚举对象
*/
//week = Week.Friday;
//week = (Week)5;
//Console.WriteLine(week);
//Console.WriteLine((int)week);//没有给出类型,默认为第一个,所以就是0
//Console.ReadKey();
/*-----------------------------------------------------------------*/
/*
* 建议8:避免给枚举类型的元素提供显示的值
*/
week = Week.Value;//枚举值默认叠加 weel.value的值为3
Console.WriteLine(week);//所以输出的是Wednesday
Console.ReadKey();
}
static Week week;
}
class Sample
{
public readonly int ReadOnlyValue;
public Sample(int value)
{
this.ReadOnlyValue = value;
}
}
class Student
{
public int Age { get; set; }
public Student(int age)
{
this.Age = age;
}
public Student()
{
}
}
class Sample2
{
public readonly Student Student;
public Sample2(Student student)
{
this.Student = student;
}
}
}