• C#属性


    属性它是一个方法或一对方法,在客户端代码看来,它是一个字段。

    属性可以拥有get、set访问器,get访问器不带任何参数,必须返回属性声明的类型。也不应该为set访问器指定任何显式参数,

    但编译器假定它带一个属性所声明的类型的参数,表示为value。例如:

    private string name;
    public string Name
    {
        set
        {
            name = value;
        }
        get
        {
            return name;
        }
    }

    1、只读、只写属性

    在属性定义中省略set访问器,就可以创建只读属性。

    public string Name
    {
        get
        {
            return name;
        }
    }

    同样,在属性定义中省略get访问器,就可以创建只写属性。但是,这是不好的编程方式,因为这可能使客户端感到迷惑。一般情况下,如果要这么做,最好使用一个方法替代。

    2、属性的访问修饰符

    C#允许给属性的get和set访问器设置不同的访问修饰符,所以属性可以有公有的get访问器和私有或受保护的set访问器。这有助于控制属性的设置方式或时间。

    • 没有任何访问修饰符的访问器,表示其具有属性的访问级别。如示例中的get访问器
    • 在get和set访问器中,必须有一个具备属性的访问级别。如示例中get访问器的访问级别是protected,就会产生一个编译错误,因为这会使两个访问器的访问级别都不是属性。
    private string name;
    public string Name
    {
        protected set
        {
            name = value;
        }
        get
        {
            return name;
        }
    }

    3、自动实现的属性

    如果属性的set和get访问器中没有任何逻辑,就可以使用自动实现的属性。这种属性会自动实现后备成员变量。不需要声明set和get。编译器会自动创建它。使用自动实现的属性,就不能在属性设置中验证属性的有效性。所以在上面的例子中,不能检查是否设置了非法字符。

    • 自动实现属性必须同时定义get、set访问器。尝试把该属性设置为只读属性,就会出错。
    • 每个访问器的访问级别可以不同,如Name2。
    public string Name1{ get; set; }
    public string Name2{get; protected set;}

    4、内联

    我们不用担心通过属性访问字段,而不是直接访问字段 。这些额外的函数调用是否会增加系统开销,导致性能下降。C#代码会编译为IL,然后在运行时JIT编译为本地可执行代码。JIT编译器可生成高度优化的代码,并在适当的时候地内联代码 。如果实现某个方法或属性仅是调用另一个方法,或返回一个字段,则该方法或属性肯定是内联的。 但要注意、在何处内联代码完全由CLR决定。我们无法使用像C++中inline这样的关键字来控制哪些方法是内联的。

  • 相关阅读:
    配置webpack.config.js中的文件
    webpack-dev-server运行时报错
    vue 中的通过搜索框进行数据过滤的过程
    vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听
    关于vue-router 中参数传递的那些坑(params,query)
    treeSet比较功能
    练习:往HashSet中存储学生对象(姓名,年龄) 同姓名,同年龄视为一个人,不存
    LinkedList实现堆栈或者队列
    LInkedList特有方法演示
    ★★★ArrayList去除指定对象的重复元素
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/5664976.html
Copyright © 2020-2023  润新知