zoukankan      html  css  js  c++  java
  • 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
    • 属性可以设置成只读、只写、提高数据安全性
    • 属性内部可以添加业务逻辑,从而避免非法数据
  • 相关阅读:
    算法面试题解答(三)
    计算机基础知识问答
    算法面试题解答(五)
    关于POD
    算法面试题解答(四)
    算法面试题解答(一)
    Perfect Interview (序)
    如何调整Dreamhost主机PHP上传尺寸的限制/How to change the maximal size of uploading in your Dreamhost
    Final Fantasy XIII Finished
    Ortholab has been moved to Google Code
  • 原文地址:https://www.cnblogs.com/stupiderman/p/9572709.html
Copyright © 2011-2022 走看看