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# 类的属性的更多相关文章
- IL接口和类的属性
上一篇文章学习了IL的入门,接下来我们再通过两个例子来了解下类的属性.构造函数以及接口的使用 一.类的属性.构造函数 1.先看下我们要构建的类的C#代码,然后再进行IL的实现,示例代码如下: [Ser ...
- runtime-给系统已有类添加属性
在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ...
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...
- Python笔记(4)类__属性与描述符
部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...
- 007-Scala类的属性和对象私有字段实战详解
007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...
- 遍历一个类的属性--并转换为Dictionary类型
参考地址...http://www.cnblogs.com/xwgli/p/3306297.html 记录点滴...以前很少用泛型...HaHa... /// <summary> /// ...
- Python基础:新式类的属性访问
一.概述 二.准备工作 1.讨论对象 2.名词解释 三.实例绑定的属性访问 1.获取属性 一般规则 参考源码 示例验证 2.设置属性 一般规则 参考源码 示例验证 3.删除属性 一般规则 参考源码 示 ...
- javascript继承(一)—类的属性研究
本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...
- Python的类实例属性访问规则
一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里,我们需要明白以下几个地方: 1.Pytho ...
- block作为类的属性时用copy
1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的 <栈 :由系统维护的局 ...
随机推荐
- 20145330第十周《Java学习笔记》
20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...
- 李洪强经典面试题136-KVO-KVC
李洪强经典面试题136-KVO-KVC KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用se ...
- Hibernate中主键生成策略
主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增, 原理:select ma ...
- [LintCode] Add and Search Word 添加和查找单词
Design a data structure that supports the following two operations: addWord(word) and search(word) s ...
- sbt commands
速查手册 常用命令 actions – 显示对当前工程可用的命令 update – 下载依赖 compile – 编译代码 test – 运行测试代码 package – 创建一个可发布的jar包 p ...
- rename 快速移动文件或者文件夹
有几种情况: 1.对于文件,rename可以在不同盘符之间移动. 2.对于空文件夹,rename也可以在不同盘符之间移动.但是目标文件夹的父目录必须存在. 3.对于非空文件夹,只能在同一盘符下移动. ...
- 文件代码对比软件 Beyond Compare
Beyond Compare https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=Beyond%20Co ...
- Sqlite 数据库出现database disk image is malformed报错的解决方法
软件用的是Sqlite数据库,昨天还好好的,今天开机登录软件报错:database disk image is malformed 用Sqlite Expert Personal 重建索引,发现其中一 ...
- HTTP Error 403没有了,但是中文全都是乱码。又是怎么回事?
首先是简单的网页抓取程序: [python] import sys, urllib2req = urllib2.Request("http://blog.csdn.net/nevasun&q ...
- 杭电ACM 1013 Digital Root
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){char s[100000];int ...