zoukankan      html  css  js  c++  java
  • C# 类的属性

    属性是一个方法或者一对方法。客户端看来是一个字段。

    定义属性

    public int StudyHours{

    //啥不写,默认有get;set; 和后备字段studyHours是private的

    get{

    return studyHours;

    }

    set{

     studyHours=value;

    }

    }

    命名约定,共有属性采用Pascal大小写形式命名。并且如果存在一个等价的私有字段则它采用camel大小写形式命名。以前看的书上用_foreName来命名字段。

    新手容易被大小写搞混,我一直就是,领导经常在面试中问别人写个属性,我每次都蒙圈。

    一个属性里没有set,就不能给这个属性设置值,那么这个属性就是只读的。没有get,就是只写属性。但这样对客户端代码的作者容易迷惑。一般情况下,最好用个方法代替。

    属性的访问控制符有助于控制属性的设置方式或者时间。

        public string Reason{

          get{return _reason;}//没有修饰符,那么get访问器具有属性的访问级别

          private set{_reason=value;} //外部类不能通过属性Reason给_reason赋值,只能读取其值。

        }

    上面代码也可以自动实现,简写为

      public string Reason{

        get;

        private set;

      }

    接下来书上提到了一个问题,我也怀疑过,叫内联,难道是inline?

    我们通过属性访问字段,而不是直接访问字段。这些额外的函数调用是否会增加系统开销,导致性能下降?

    答案不会的。C#代码会编译为IL,然后在运行时JIT编译为本地可执行代码。JIT Compiler可生成高度优化的代码,并在适当的时候随意地内联代码。(用内联代码代替函数调用)。如果实现某个方法或者属性仅仅是调用另一个方法,或者返回一个字段,则该方法或者属性肯定是内联的。

    但注意,内联 or not 是CLR决定的。不像C++的inline来控制哪些方法是内联的。

    属性就学到这里啦~下一节是构造函数,静态构造需要好好理解一下。

  • 相关阅读:
    C++ 虚基类表指针字节对齐
    C++ 虚函数的内存分配
    虚函数&&虚继承
    内存管理简便复习总结
    stack,heap的区别
    内存泄漏(memory leak)和内存溢出
    php+mysqli预处理技术实现添加、修改及删除多条数据的方法
    JavaScript 常用方法总结
    6个超实用的PHP代码片段
    php 备份数据库代码(生成word,excel,json,xml,sql)
  • 原文地址:https://www.cnblogs.com/jin-wen-xin/p/4728019.html
Copyright © 2011-2022 走看看