C# 基础教程—刘铁锰 02 委托 事件 继承 多态 重写.
类–什么是类? P25 23节
— 是一种数据结构
— 是一种数据类型
— 代表世界中的“种类”
namespace _20220525_Class_Liutiemeng
{
internal class Program
{
static void Main(string[] args)
{
Student stu = new Student() { ID = 1, Name = "Tomiy" };
Console.WriteLine(stu.ID);
Console.WriteLine(stu.Name);
stu.Report();
Console.ReadLine();
}
}
class Student
{
public int ID { get; set; }
public string Name { get; set; }
public void Report()
{
Console.WriteLine($"I'm #{ID}student,my name is {Name}.");
}
}
}
namespace _20220525_Class_Liutiemeng
{
internal class Program
{
static void Main(string[] args)
{
Student stu = new Student() { ID = 1, Name = "Tomiy" };//使用默认构造器
Console.WriteLine(stu.ID);
Console.WriteLine(stu.Name);
stu.Report();
Student2 stu2 = new Student2( 2 ,"zhangjiawei");//使用自定义的构造器
Console.WriteLine(stu2.ID2);
Console.WriteLine(stu2.Name2);
Console.ReadKey();
}
}
class Student // ----------ID 和 Name 使用默认构造器
{
public int ID { get; set; }
public string Name { get; set; }
public void Report()
{
Console.WriteLine($"I'm #{ID}student,my name is {Name}.");
}
}
class Student2 // ----------ID 和 Name 使用自定义构造器
{
public Student2(int id,string name) {
this.ID2 = id;
this.Name2 = name;
}
public int ID2 { get; set; }
public string Name2 { get; set; }
}
}
实例构造器,实例析构器。
内存泄漏和栈溢出 是不一样的。
下面就是一个析构器
~Student(){
Console.WriteLine("Bye bye!Release the system resources...");
}
Type t = typeof(Student);
object o = Activator.CreateInstance(1,"Timothy");//--------反射机制
Student stu = o as Student;
dynamic stu = Activator.CreateInstance(t,1,"Timothy");//---dynamic编程
Console.WriteLine(stu.Name);
/************************** Main体中 调用 静态成员*********************/
Console.WriteLine(Student2.Amount);//Main体重静态成员 无法实例化
/************************** 类体中 定义 静态成员*********************/
public static int Amount { get; set; } // 静态成员 无法实例
static Student2(){ Amount = 100; }// 静态成员赋值
------------------------------ P26 24讲 类的声明
类是面向对象编程的核心;
我们想使用一个类,就需要先创建一个类---- 创建类 我们再C#中叫做 类的声明。
//
声明一个类
创建一个类的实例
//
哪里可以声明一个类
第一个:可以放在名称空间里
第二个:可以放在看似是名称空间外(实际上还是声明在全局名称空间里面)
第三个:可以放在类体里面(成员类)
声明和定义
declaration 和 definition
C#和Java 类的声明和定义是在一起的;
快捷键 ctrl shift f — 全局搜索
什么是基类 中嵌套了 泛型类。
声明一个类 少不了的三大点 : class关键字、类名字、类体。
类修饰符,是可以分组的:
new
--------按照继承关系分组--------
abstract
sealed
--------按照访问级别分组(类访问级别)--------
public
internal
--------按成员类分组--------
public
internal
private
protected
--------变成静态类 加上 static
回头讲到类的派生和继承,再去着重的讲一下类的修饰符。
快捷键 查看程序函数后退 ctrl + - 【ctrl & 减号】
------------------------------ P27 25讲 今天讲的是继承
面向对象编程,最显著的三个特征 : 封装继承和多态(多态又是基于继承的)
baseclass – 基类
沟通的术语:
//
基类 和 派生类 是一对儿---------- Basedclass and Derived class
//
父类 和 子类 是一对儿 ------------ Parent class and child class
可以横向类比: 基类相当于父类; 派生类相当于子类;
三个相关的 知识点
知识点1 —sealed 修饰一下类 – 变成了封闭类
知识点2—C#中一个类只能有一个基类(但是 以后学基接口 就不太一样)。
知识点3---- 子类的访问级别,不能超过父类 ,可以和父类访问级别一致,也可以访问级别更低。
*
补充说明:internal 修饰符 把类的访问级别限制在同一个程序集里面。
private修饰符 把类的访问级别限制在同一个程序集里面的类体里面。
父类里面有时候不写private 这个修饰符,在没有写 public和 internal的时候,默认就是private,这是为了数据的安全性。
继承是什么呢?
继承的本质:派生类 在基类已有的成员基础之上,对基类进行的横向和纵向上的扩展。
横向扩展—类的成员个数的扩充,只会越来越多
纵向扩展—对类成员的版本进行扩充,类成员的重写【技术术语:重写】
再次说一下快捷键 :
F12 查看函数定义
Ctrl - 退回原函数
protected这个修饰符 放在父类中,派生类无法访问这个成员