C#笔记——【面向对象基础】(一)类与对象的概念及属性

类是程序的基本单元;
类包括属性和方法;
类是模板,程序运行的时候都是对象;

常见问题:

认知常见问题

(1)面向对象的三大特性

1)封装(开发中用的最多)
  1. 隐藏内部实现细节,模块开发者只关心内部实现和借口要求,模块调用者只关心接口调用;
  2. 好处:安全保证(避免代码外漏),快速应用(直接应用),团队协作(多人同时工作);
  3. 应用:类是程序的基本单元,也是封装的基本单元,但是类可以同样被模块封装;
2)继承
  1. 复用现有代码;
  2. 好处:一处更新,处处更新; 弊端:关联容易复杂;
  3. 应用:object, Form
3)多态
  1. 让一个对象的接口可以根据不同的请求,做成不同的响应;
  2. 好处:程序扩展容易、方便维护;
  3. 应用:继承多态、接口多态(简单工厂、抽象工厂);
注意:后面详细介绍多态

(2)开发的OPP原则

1)单一职责原则(对象职责明确原则)
  • 要求:一个对象只做好一件事,必须专注,职责过多容易引起变化的原因就多,程序就不稳定(高内聚,低耦合的延伸);
2)开放封闭原则(核心原则)
  • 要求:需求变化的时候尽量少的修改类的设计 ,而是通过扩展类来完成;即封闭修改,开放扩展;
3)依赖倒置原则(OPP精髓)
  • 要求:基于接口编程,高层模块调用接口,底层模块实现接口 ,防止底层变化直接影响高层;
4)接口隔离原则
  • 要求:尽可能多的使用专用的小接口,而不是使用总接口,避免接口过于复杂;
5)里氏替换原则
  • 要求:在继承关系中,子类可以替换父类,虚拟机可以根据父类变量,动态地找到具体的子类对象,从而实现多态;

(3)对象和类

对象:

任何存在的实体都是对象,是真是存在的,包括静态特征和动态特征两个方面;
静态特征:表示对象的属性,用来储存对象本身的数据;
动态特征:表示对象的方法,用来说明对象能做什么;

对象的作用:
1.数据存储在对象的属性里;
2.软件的功能都是通过方法实现;

类:

将同一类对象共有的属性、方法抽象出来,组织在一个单元中,称之为类;
对象实际上是同一类事物的个体;

类与对象的区别
  • 类定义的实际上是一个抽象模型,比如“汽车”,在这个模型中,定义“属性”和“方法”;
  • 对象实际上是按照这个类的模型,具体创造出的实体,每个属性都有具体的“值”;

(4)类的定义与对象的使用

1)类的定义规范:

在这里插入图片描述

看例子:
namespace Demo
{
    /// <summary>
    /// 学生类
    /// </summary>
    class Student
    {
        // 私有字段:学员
        private int studentId;
        // 私有字段:学员姓名
        private string studentName = "";
        //属性:学号
        public int StudentId
        {
            get { return studentId; }
            set { studentId = value; }
        }

        //属性:学生姓名
        public string StudentName
        {
            get { return studentName; }
            set { studentName = value; }
        }

        //获取学员信息
        public string GetStudent()
        {
            //这里直接使用的是字段
            string info = string.Format("姓名:{0} 学号{1}", studentName, studentId);
            return info;
        }
    }
}
namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建对象
            Student objStudent = new Student();

            //给对象属性赋值
            objStudent.StudentId = 10001;
            objStudent.StudentName = "guobaoyan";

            //调用对象方法
            string info = objStudent.GetStudent();
            Console.WriteLine(info);
            //类的外面对字段的访问都是通过get和set方法
            Console.WriteLine(objStudent.StudentName);

            Console.ReadKey(true);
        }
    }
}
2)类中属性和方法的使用

在这里插入图片描述

  • 以类为模板,创建一个或者多个对象,通过对象调用类中的属性或者方法;
  • 给对象赋值,取值:对象名.属性名;
  • 调用方法:对象名.方法名;

(5)字段与属性

1)访问修饰符

访问修饰符:
作用:限制对象的属性或方法的可访问范围(类的内部,类的外部)
类型:private(私有的:外部不可见 ) public(公有的:外部可见)

注意:默认private(只能在类的内部使用);希望以对象的形式访问,需要定义为public
2)字段

字段称为“成员变量 ”;通常只供类内部的不同方法使用;所以使用private修饰;
字段命名一般使用camel命名法
在这里插入图片描述

字段的通俗理解:
  • 私有化:字段类似私有财产,只供个人使用;使用private修饰;
  • 添加标准:一个类中需要添加几个字段,根据程序编写的需要决定;
属性

属性是操纵的对应的私有字段(get, set);

属性的作用 :

在这里插入图片描述

  • 作用:在面向对象 设计中主要使用属性 描述对象静态特征;
  • 要求:一般使用Pascal命名方法,数据类型和字段一致,使用 public修饰;
属性的理解:
  • 属性其实是外界访问私有字段的入口,属性本身不保存任何数据;
  • 给属性赋值 ,实际上是给属性指向的私有字段赋值 ;
  • 读取属性的值,实际上是获取属性指向的私有字段的值;
使用属性避免非法数据

在get和set中都可以 添加我们需要的任意逻辑,从而有效避免非法数据 ;
在这里插入图片描述

使用属性设置只读、只写

没有set方法
在这里插入图片描述

没有对应私有字段的属性:

没有对应的私有字段,而是一个逻辑,一个计算过程
在这里插入图片描述

字段与属性的对比:

字段(成员变量):
  1. 主要是为类的内部作数据交互使用,字段一般是private;
  2. 字段可以赋值,可以取值;(类的内部)
  3. 字段为外部提供数据的时候,请将字段封装为属性,而不是使用共有字段,这是面向对象提倡的;
属性:
  1. 属性一般是想外提供数据,主要用来描述对象的静态特征,常为public;
  2. 可以按照自己的逻辑,设置为只读、只写,提高安全性 ;
  3. 属性内部可以添加需要的业务逻辑,避免非法数据;
自动属性:

不能直接操纵私有字段;不能添加业务逻辑;不能设置只读、只写;只适用于 标准形式 ;
在这里插入图片描述

发布了34 篇原创文章 · 获赞 0 · 访问量 998

猜你喜欢

转载自blog.csdn.net/forever_008/article/details/104069905