2021-06-15-刘铁猛C#语言入门详解-学习笔记P17字段、属性、索引器、常量

P17字段、属性、索引器、常量--这四种成员都用于表达数据

一、字段:field[在内存中拥有属于自己的一块空间]

1、什么是字段--举例说明了实例字段和静态字段
1)实例字段:表示实例或对象当前的状态;
2)静态字段:表示某个数据类型当前的状态,由static修饰。

2、字段的声明
注意:字段的声明不是语句,语句声明在函数体中,字段声明在类体中
1)字段的名字一定是名词;
2)字段要声明在类体中,在函数体中的是局部变量;
3)attributes   field-modifiers   type   variable-declarators; 字段特性+字段修饰符+数据类型+变量声明器;

3、字段的初始值
1)初始化器什么时候对值进行初始化
--实例字段:在这个实例创建时,每次创建实例时初始化都能执行;
--静态字段:在运行环境加载这个数据类型时,只执行一次,第一次加载这个数据类型时。

4、只读字段--被readonly修饰符修饰的字段,保存一旦初始化后就不希望被改变的值
1)只读实例字段

//学生的ID在初始后就固定无法再改变,使用只读字段防止出错
static void Main()
        {
            Student stu = new Student(2);
            Console.WriteLine(stu.ID);
        }

        class Student
        {
	//方法一:声明该字段时后跟上初始化器-没有写出来
	//方法二:用实例构造函数对只读字段进行初始化
            public readonly int ID;
            public Student(int id)
            {
                this.ID = id;
            }
        }

2)只读静态字段

//对笔刷设置初始颜色
static void Main(string[] args)
        {
            Console.WriteLine(Brush.DefaultColor.Red);
            Console.WriteLine(Brush.DefaultColor.Green);
            Console.WriteLine(Brush.DefaultColor.Blue);
        }
        struct Color
        {
            public int Red;
            public int Green;
            public int Blue;
        }
        class Brush 
        {
	//方法一:声明该字段时后跟上初始化器
            public static readonly Color DefaultColor = new Color() { Red = 0, Green = 0, Blue = 0 };
	//方法二:用静态构造函数对只读字段进行初始化
            public static readonly Color DefaultColor;
            static Brush()
            {
                Brush.DefaultColor = new Color() { Red = 0, Green = 0, Blue = 0 };
            }
        }

二、属性property

 1、什么是属性
1)用于访问对象或类型的特征的成员,特征反映了状态

例:豆腐(对象)-- 温度是他的一个属性/特征 -- 现在温度为80℃, “烫”就是他当前的状态 -- 判断出豆腐当前不能吃
              人(类型)-- 人口数是他的一个属性/特征 -- 现在人口为100亿,人口多就是当前的状态
2)属性是字段的自然扩展
    field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征
3)属性由Get/Set方法对进化而来:举例对比说明

2、属性的声明
1)属性特性+属性修饰符+数据类型+成员名称{get读取数据、set写入数据};
2)属性完整声明

//求年龄的平均值,并判断输入的年龄是否正确
static void Main(string[] args)
        {
            try
            {
                Student stu1 = new Student();
                stu1.Age = 20;

                Student stu2 = new Student();
                stu2.Age = 20;

                Student stu3 = new Student();
                stu3.Age = 20;

                int aveAge = (stu1.Age + stu2.Age + stu3.Age) / 3;
                Console.WriteLine(aveAge);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            } 
        }

        class Student
        {
            //完整属性声明,propfull双击Tab键
            private int age;

            public int Age
            {
                get { return age; }
                set {
                    if (value>=0&&value<=120)
                    {
                        age = value;
                    }
                    else
                    {
                        throw new Exception("Age value has error.");
                    }
                
                }
            }
        }
    }

3)属性简略声明

//简略属性声明,prop双击Tab键
public int Age { get; set; }

4)属性的名字一定是名词

3、属性与字段的关系
1)一般情况下,都用于表示实体(对象或类型)的状态
2)属性大多数情况下是字段的包装器
3)永远使用属性来暴露数据,字段永远都是private或protected的

三、索引器indexer
1)初学者很少使用索引器

四 、常量constant
1、什么是常量
常量隶属于类型而不是对象,类型.常量的名字 例如:Math.PI

2、各种只读的应用场景
1)为提高程序可读性和执行效率---常量
2)为防止对象的值被修改--只读字段
3)向外暴露不允许修改的数据--只读属性

你可能感兴趣的:(刘铁猛C#语言入门详解,c#)