• C#入门详解(8)


    字段

    什么是字段

    字段(field)是一种表示与对象或类型/结构体关联的变量

    字段是类型的成员,旧称“成员变量”

    与对象关联的字段也叫做实例字段

    与类型关联的字段称为静态字段,由static修饰

    字段的声明

    参见C#语言定义文档

    尽管字段声明带有分号,但它不是语句

    字段的名字一定是名词

    字段的初始值

    无显示初始化时,字段获得其类型的默认值,所以字段永远都不会未被初始化

    实例字段初始化的时机-对象创建时

    静态字段初始化的时机-类型被加载的时候

    只读字段

    实例只读字段

    静态只读字段

    属性

    什么是属性

    属性是一种用于访问对象或类型的特征的成员,特征反映了状态

    属性是字段的自然拓展

    从命名上看,field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征

    对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的

    对内:保护字段不被非法值污染

    属性又Get/Set方法对进化而来

    又一个语法糖-属性背后的秘密

    属性的声明

    完整声明-后台成员变量与访问器

    简略声明-只有访问器

    动态计算值的属性

    注意实例属性和静态属性

    属性的名字一定是名词

    只读属性-只有getter没有setter

    尽管语法上正确,几乎没有人使用只写属性,因为属性的主要目的是通过向外暴露数据而表示对象/类型的代码

    属性与字段的关系

    一般情况下,它们都用于表示实体的状态

    属性大多数情况下是字段的包装器

    建议:永远使用属性来暴露数据,即字段永远都是private或protected的

    字段到属性进化史

     public class Student
        {
            public int Age;
        }

    此时实例化获得对象后,使用Age字段,可以设置任意值,容易被污染

        public class Student
        {
            private int age;
    
            public int GetAge()
            {
                return this.age;
            }
            public void SetAge(int value)
            {
                if (value>=0&&value<=100)
                {
                    this.age = value;
                }
                else
                {
                    throw new Exception("错误的输入");
                }
            }
        }
    }

    将字段的访问性设为private(一般会小写开头),然后添加方法来管理获取和设置字段值。

    上面的方法过于冗长,而且获取设置要通过方法,没有最开始直接调用字段来的直接。微软创造了属性这个概念,里面有set,get访问器。

        public class Student
        {
            private int age;
    
            public int Age
            {
                get
                {
                    return this.age;
                }
                set
                {
                    if (value>=0&&value<=100)
                    {
                        this.age = value;
                    }
                    else
                    {
                        throw new Exception("输入错误");
                    }
                }
            }
        }

    这样一来通过属性来暴露数据,在属性里做对字段的处理逻辑。

    索引器

    什么是索引器

    索引器是这样一种成员:它使对象能够用与数组相同的方式进行索引

    索引器的声明

    参见C#语言定义文档

    注意:没有静态索引器

    常量

    什么是常量

    常量是表示常量值的类成员

    常量隶属于类型而不是对象,即没有实例常量

    注意区分成员常量与局部常量

    常量的声明

    各种只读的应用场景

    为了提高程序的可读性和执行效率--常量

    为了防止对象的值被改变--只读字段

    向外暴露不允许修改的数据--只读属性,功能与常量有一些重叠

    当希望成为常量的值类型不能被常量声明接受时--静态只读字段

  • 相关阅读:
    iOS 如何选择delegate、notification、KVO?
    iOS iOS8新特性--UIAlertController
    iOS 快速创建对象的类方法里的self
    iOS instancetype和id的区别
    ios UnitTest 学习笔记
    ios 框架学习笔记
    ios UI自动化测试学习笔记
    ios 开发常用快捷键
    ios 图形学习笔记
    ios 多任务学习笔记
  • 原文地址:https://www.cnblogs.com/jingjingweixiao/p/10970594.html
Copyright © 2020-2023  润新知