多态:
概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候表现出的不同就称为多态
条件:必须要有继承 父类引用指向子类实例 子类必须对父类的方法进重写
1、虚方法 virtual
重写 override
父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Program { static void Main(string[] args) { DongWu dw = new Dog(); Dog d = new Dog(); Console.WriteLine(Ceshi(dw)); Console.WriteLine(CeShi(d)); Console.ReadLine(); } public static string CeShi(DongWu d) { return "ok"; } } class DongWu { public virtual string Eat() //虚方法 { return "该动物在吃饭"; } } class Dog:DongWu { public override string Eat() //重写 { return "狗正在吃骨头"; } } class Cat : DongWu { public override string Eat() { return "猫正在吃鱼"; } }
2、抽象类
是因为普通的多态虚方法没有人用本身的方法主体,那么...
抽象类就是来当亲爹,abstract
抽象类中可以有抽象方法:abstract
抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西
一般抽象类中只放置抽象方法,只规定了返回类型和参数
比如:
人 - 有吃饭,睡觉方法
男人 - 继承人抽象类,必须实现吃饭,睡觉的方法主体
女人 - 继承人抽象类,必须实现吃饭,睡觉方法的主体
抽象类中可以有普通属性,通过子类来使用
1.关键字:abstract
2.抽象类可以包含抽象方法和普通方法
3.abstract关键字可以定义方法为抽象方法,抽象方法可以没有函数体
4.抽象类无法被实例化,抽象类主要做为一个基类,让别的类继承。
5.sealed和abstract关键字不能同时出现
6.如果一个子类继承自抽象类,那么子类中必须实现所有的抽象方法
7.如果子类中没有实现父类的抽象方法,那么该子类必须是抽象类
8.如果一个类里面包含抽象方法,那么该类一定是抽象类
注:有抽象方法的,一定是抽象类 ;抽象类中,不一定有抽象方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//定义抽象类 public abstract class DongWu { public void Run() { } public abstract void Eat(); } //做一个人类来继承抽象类 public class Ren:DongWu { public override void Eat() { Console.WriteLine("吃熟食"); } }
3、接口
接口就是出来做 干爹的,接口不是类 interface
编写方法格式: string 方法名();
实现接口的方法 不要override,直接正常编写就可以了
作用:可以将程序拆分成多个模块,定义子类必须实现的功能
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//定义接口 interface IUSB { //开始读取USB void Start(); //关闭USB void Stop(); } //做一个鼠标类来实现USB接口 class ShuBiao:IUSB { public void Start() { Console.WriteLine("鼠标启动了"); } public void Stop() { Console.WriteLine("鼠标停止了"); } }
注:接口和抽象类的区别:
1. 写法区别
关键字:interface
没有class关键字 类名一般用I开头
不用写public因为本身就是public,不用写abstract接口里面所有的都是抽象的
2. 接口里面不能包含普通成员
3. 凡是继承接口的类,全部要实现接口里面的方法
类库:
其实就是一堆类文件,只不过你看不到这些类的源代码,保密性好。
优点:保密性好
缺点:如果这个方法不好用,使用者无法自己去更改它。
引用别人写的类
1、源代码方法:
可以将直接写好的.cs源代码文件,添加进我的解决方案文件夹下,在解决方案资源管理器中, 项目上右键→添加→现有项,来添加此.cs源代码文件的使用,需要引入相应的命名空间
2、类库方法:
一个dll文件,就是一个类库 它人新建一个类库,在里面编写类和相应的方法,生成后出现一个dll文件,拿过来,放在自己的 程序文件夹里,在项目右键→添加引用→找到此dll类库文件添加,然后引用命名空间,就可以调用相应的类中的方法了
注意类一定要是public访问权限
类库使用是多公司联合开发时使用的方式,因为每个公司都有自己的核心技术,我允许你使用,但不允许你 知道我是怎么编写的,所以需要dll类库文件,因为dll文件是将源代码文件编译后的文件,看不到源代码, 所以你只能调用不允许更改
委托:
委托可以理解为:函数的指针
关键词:delegate
声明:
public delegate int FirstDel(int a, int b);
创建委托变量:
FirstDel 名字 = 与这个委托类型相同的方法;
泛型集合 List<T>
综合了集合和数组的优点,
固定数据类型,不限制长度的一种集合
var 万能变量
dynamic 万能变量
this关键字:
虽然写在类里面,但不是属于类的,而是属于该对象的
一般来说在类里面 this关键字是可以省略的,但是如果有一个方法形参名字和成员名字重复,这时候再调用该对象里面的成员的时候需要加this关键字
is关键字:
判断某一个对象是否是某一种类型
对象 is 类型名 是这种类型返回 true 不是返回 false
例:if (y2 is Ren)
{
s = "是一个人";
}
else
{
s = "不是一个人";
}
as关键字: 转换类型(只能转换兼容类型,可以将子类对象转换为父类对象)
将某一个对象转换成某一种类型,如果转换不成功,那么会给这个对象赋一个null,不会抛出异常