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来控制哪些方法是内联的。

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

时间: 2024-10-10 10:07:35

C# 类的属性的相关文章

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

python面向对象-2深入类的属性

在交互式环境中输入: 1 >>> class A: 2 a=0 3 def __init__(self): 4 self.a=10 5 self.b=100 6 7 8 >>> a=A() 9 >>> a.a 10 10 11 >>> a.b 12 100 13 >>> A.a 14 0 15 >>> A.b 16 Traceback (most recent call last): 17 File

oc学习之对象作为类的属性

对象做为类的属性 1. 一个Target中的类无法直接在另外1个Target中访问. 2. 类的属性代表什么? a. 类的属性代表这类事物具有的共同的特征 b. 类的属性代表这个类所拥有的东西. 灯: 属性: 形状 功率 价格  品牌 剩余寿命 方法: 照明. 音响: 方法: 发声音. 门: 属性: 尺寸 材料 颜色 价格 方法: 开 关 3. 类的方法代表什么? a. 代表这个类所具备的行为. 这个类所具备的功能. b. 一个类有什么方法 就去分析这个类有什么功能. 4. 属性的本质是变量.

runtime-给系统已有类添加属性

在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添加的方法可以被此类的子类所继承:延展(extension)为我们的自定义类添加属性和方法,但是添加的属性和方法都是私有的,在此类的子类中是无法访问的.那么问题来了,如果我们想给系统已有类添加一些方便我们使用的属性要怎么办呢?上述这两种方法中能给系统已有类添加的东西的就只有类目(category)了.

ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber

##oc在类别里给类加属性以及原理

oc在类别里给类加属性以及原理 如何在类别里给类加属性呢,有鸭子模样的我们就认为他是鸭子了. @interface NSObject (XY) @property (nonatomic, strong) id tempObject; @end @implementation NSObject (XY) @dynamic tempObject; - (id)tempObject - { id object = objc_getAssociatedObject(self, NSObject_key_

java类中属性的加载顺序,以及内存分配情况介绍

看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int dsd=2;//第3 //多个对象会有多次分配内存 public awds() { int sdsfsd=2;//第4 //多个对象会有多次分配内存 } //静态代码块 static{ System.out.println("静态代码块正在加载...");//第1 } public st

python3 类的属性、方法、封装、继承及小实例

Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. python类与c++类相似,提供了类的封装,继承.多继承,构造函数.析构函数. 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类. 类定义 类定义语法格式如下: class ClassName:    <statem

iOS开发&gt;学无止境 - 遍历Model类的属性并完善使用Runtime给Model类赋值

在前几天的一篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property Name相同,然后通过运行时来生成和执行Setter方法给Model类的属性赋值. 通 过Runtime来给Model类属性赋值的好处是多多的,它便于代码的后期维护,并且提高了开发效率.当你拿到解析后的字典时你不用一个一个的通过 key去把字典的值赋值给相应的Model类的属性,本篇博客中会给出如何

scala 第7讲 类的属性和对象的私有字段

温故而知新 之scala第7讲类的属性和对象私有字段百度云盘连接http://yun.baidu.com/share/home?uk=4013289088#category/type=0class Person { private var age = 0 def increment(){age += 1} def current = age } class Student{ private var privateAge = 0 val name = "Scala" def age =