zoukankan      html  css  js  c++  java
  • 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这样的关键字来控制哪些方法是内联的。

  • 相关阅读:
    NodeJS NPM 镜像使用方法
    用for; while...do; do...while; 写出九九乘法表
    create-react-app创建的项目中registerServiceWorker.js文件的作用
    前端应该从哪些方面优化网站?
    JS基础整理面试题
    netcore实践:跨平台动态加载native组件
    iOS开发--Swift RAC响应式编程初探
    算法导论学习笔记 (页码:9 ~ 16)
    iOS开发-- 通过runtime kvc 移除导航栏下方的阴影效果线条
    iOS开发--面试
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/5664976.html
Copyright © 2011-2022 走看看