C#面向对象编程「字段与属性」

C#面向对象编程「字段与属性」

面向对象编程原则

  • 单一职责原则(对象职责明确原则)

    一个对象只做好一件事情,必须专注,职责过多容易引起变化的原因就多,程序就不稳定,(高内聚,低耦合的延伸)

  • 开放封闭原则(核心原则)

    需求变化时尽量少的修改类的设计,而是通过扩展类来完成,即封闭修改,开放扩展

  • 依赖倒置原则(OOP精髓)

    基于接口编程,高层模块调用接口,底层模块实现接口,防止底层变化直接影响高层

  • 接口隔离原则

    尽可能多的使用专用的小接口,而不是总接口,避免接口过于复杂

  • 里氏替换原则

    在继承关系中字类可以替换父类,虚拟机可以根据父类变量动态的找到具体的子类对象,从而实现多态

面向对象编程目的

--------万事万物皆对象

希望用对象的概念和方法解决复杂的程序问题。用面向对象的各种方法、原则、技巧、经验等指导程序编写

类的概念

--------类是对象的映射

从以下方面把类的理解简单化

  • 同类型对象的共同特征的组合,类是抽象的
  • 类规定能够存储的数据类型有哪些,能够执行的方法或者说能完成的任务是什么
  • 类的数据类型(属性)和动作(方法),是根据软件的需求分析得到的
  • 类定义仅仅是一个说明,保存在类文件中
  • 类是一种结构化的数据类型。(引用数据类型)

从以下方面把对象的理解简单化

  • 对象以类为模版,通过对象使用类里面规定的数据类型和方法。
  • 对象在内存中
  • 对象属性使用:对象名.属性名(通过set和get方法实现)
  • 对象方法使用:对象名.方法名
  • 对象通过调用属性获取对应字段的值或给字段赋值。因此,属性是外界访问私有字段的一个入口

访问修饰符

  • 现实中:每个人都有自己的隐私和公开内容
  • 开发中:有时候开发者在设计类的时候,一些成员(字段、属性、方法)无需提供给调用者
  • 好处:充分体现面向对象里面的“封装”特性(OOP三大特性:封装、继承、多态)
  • 作用:保证数据安全,方便调用者使用(如果成员很多,调用者使用比较困难)

字段的使用

  • 字段又称为“成员变量”,一般用来在一个类的内部做数据交互使用,通常是private修饰。
  • 字段命名规范:camel命名法(单驼峰命名法)
  • 字段在对象创建过程中会首先被初始化(在调用构造函数之前)

属性的使用

  • 在OOP中,主要使用属性来描述对象的静态特征。

  • 属性一般采用Pascal命名法,数据类型和对应字段一致。

  • 属性是外界访问私有字段的一个入口,属性本身不保存任何数据。

  • 使用属性能避免非法数据。用法:通常在 getset 方法中添加需要的业务逻辑。

    private int age;
    public int Age
    {
        get{return age;}
        set
        {
        	if(age<18)
        		age = 18;
        	else
        		age = value;
        }
    }
    
  • 可以设置只读属性

    • 有些属性为了保护数据,我们可以设置成只读,而不能赋值。
    • 方法:将set 方法去掉即可。
    • 经验:可以替代readonly。
  • 属性可以单独存在

    有时候某一属性值可能不是直接返回一个对应私有字段的值,而是调用一些方法,或其他业务逻辑。

    private DateTime birthday;
    public DateTime Birthday
    {
    	get { return birthday; }
        set { birthday = value; }
    }
    
    public int Age
    {
        get { return DateTime.Now.Year - birthday.Year; }
    }
    

自动属性

  • 简化代码,私有字段编译器自动生成。
  • 值适合于标准属性
  • 不能添加任何业务逻辑
  • 不能直接操作私有字段
  • 不能使用只读,只写属性

字段与属性的总结与比较

  • 字段主要是为类的内部做数据交互使用,字段一般是private
  • 我们可以给字段赋值,也可以取值
  • 当字段需要为外部提供数据时,将字段封装为属性,而不是公有化字段
  • 属性一般是向外提供数据访问,主要用来描述对象的静态特征,所以,一般是public
  • 属性可以设置成只读、只写、提高数据安全性
  • 属性内部可以添加业务逻辑,从而避免非法数据
posted @ 2018-09-02 08:44  stupiderman  阅读(846)  评论(0编辑  收藏  举报