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
    • 属性可以设置成只读、只写、提高数据安全性
    • 属性内部可以添加业务逻辑,从而避免非法数据
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/stupiderman/p/9572709.html
Copyright © 2011-2022 走看看