2021-06-23-刘铁猛C#语言入门详解-学习笔记P23、24、25类

P23、24、25类

一、P23、24、25内容总结

  1. 什么是类P23
  2. 构造器与析构器P23
  3. 类声明的全貌P24
  4. 最简单的类声明P24
  5. 类的继承P25
  6. 成员的继承与访问P25
  7. 面向对象的实现风格P25

二、什么是类–老师用例子将解释了一下

  1. 数据结构
  2. 数据类型(引用数据类型)
  3. 代表现实世界中的“种类”

三、构造器与析构器

  1. 实例
    1)构造器
    2)析构器
    3)如何不用new操作符创建实例:使用反射、dynamic编程,老师举例说明,我没有记录了
	//Student stu = new Student();      ()调用默认构造器
	class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student(1, "Timothy");
            s1.Report();
        }

        class Student
        {
            //Student 类的默认构造器
            //很像一个方法,但是没有返回值类型
            public Student(int id, string name)
            {
                this.ID = id;
                this.Name = name;
            }
            //析构器:一般用于释放内存
            //当程序完成时系统会自动调用析构器
            //在Student类中声明一个析构器,模拟释放内存的操作
            ~Student()
            {
                Console.WriteLine("Bye!");
            }
            
            public int ID { get; set; }
            public string Name { get; set; }
            public void Report()
            {
                Console.WriteLine($"I'm {ID} student,my name is {Name}.");
            }
        }
    }
  1. 静态:静态成员对类有意义
    1)构造器
	class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student(1, "Timothy");
            Student s2 = new Student(2, "Jacky");
            Console.WriteLine(Student.Amount);
        }

        class Student
        {
            public static int Amount { get; set; }
            //静态构造器:只能构造静态成员
            static Student()
            {
                Amount = 100;
            }
            public Student(int id, string name)
            {
                this.ID = id;
                this.Name = name;
                Amount++;
            }
            ~Student()
            {
                Amount--;
            }
            public int ID { get; set; }
            public string Name { get; set; }
            public void Report()
            {
                Console.WriteLine($"I'm {ID} student,my name is{Name}.");
            }
        }

    }

四、类声明的全貌

  1. 一些术语:声明类;创建类实例/对象
  2. C#类声明的位置
    1)在名称空间内声明类–最常用
    2)在类体内声明类–成为了成员类
    例:在Program类内声明了一个Student类,Student类就成为了Program类的成员类
  3. 声明与定义
    1)C++中声明与定义是可合并也可分开的,定义:实现的功能
    2)C#中声明与定义无法分开,声明即定义

五、最简单的类声明

  1. class(关键字) identifier(类名,所有单词首字母大写) class-body(类体) 这三个部分在声明中不可省
  2. 类的访问控制:
    类的访问级别修饰符:public、internal
    1)public:不仅类所处项目中可以访问此类,在类所处项目外的项目也可以访问此类
    2)internal:只在类所处项目中可以访问此类,即internal这个类的访问级别为项目,默认为internal
//右键solution点击Add一个类库
//删除自动生成的class1
//右击MyLib项目Add一个Newfolder(新建文件夹)Mynamespace
//MynamespaceAdd一个Calculator类

//说明public修饰符例子
//Calculator.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyLib.Mynamespace
{
    public class Calculator
    {
        public double Add(double a,double b)
        {
            return a + b;
        }
    }
}

//Program.cs
using System;
using MyLib.Mynamespace;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            Calculator calculator = new Calculator();
            double res=calculator.Add(1.1, 2.2);
            Console.WriteLine(res);
        }
    }
}

六、类的继承

  1. 继承的概念:子类在完整接收父类成员的基础上进行的横向或纵向的扩展
    横向扩展:对类成员个数扩充
    纵向扩展:对类成员的重写
  2. 一些术语:基类-派生类;父类-子类
  3. 实例:了解类继承的语法
	//Vehicle 是基类
    class Vehicle
    {

    }
    //Car 是派生类
    //Car类是从Vehicle类派生而来的
    class Car :Vehicle
    {

    }
  1. ”是一个“ 概念, is a操作符
    1)子类的一个实例,从语义上来说也是父类的一个实例;
    2)派生类的一个实例,从语义上说也是基类的一个实例;
    3)可以用is a 操作符对上述进行判断 结果为true
  2. 注意:
    1)我们可以用一个父类类型的变量引用一个子类类型的实例
    Vehicle vehicle = new Car();
    Object o1 = new Vehicle();
    2)一个类最多只能有一个基类
    3)子类的访问级别不能超过父类,只能低于或持平
    4)sealed类不能被继承

七、成员的继承与访问

  1. 实例:详细说明类成员的访问级别–40分开始
  2. 成员访问原则
    1)原则1:类成员的访问级别是基于类成员所在类的访问级别
    若类的访问级别是internal,就算成员的访问级别为public在别的assemby内也不能调用
    2) 原则2:private 将访问级别限制在类的类体里,默认成员的访问级别为private
    3)原则3:protected 把类成员的访问级别限制在继承类上,可跨程序集,通常使用在方法上
    即在父类当中有一个类成员使用protected修饰之后,所有的子类是可以访问这个成员,但是不在继承链上其他的类型是不能够访问这个级别的。

八、面向对象的实现风格

  1. C++ C# 基于类的 class-based
  2. Java prototype-based

你可能感兴趣的:(刘铁猛C#语言入门详解,c#)