1、C#多态的特性使得设计模式成为可能数据库
二十多种设计模式的都是基于多态编程
2、多态的表现形式设计模式
1.普通类ide
子类可以继承父类的全部成员(父类的私有成员子类对象不能直接访问到),包括父类实现的接口已经父类继承的其余类的成员。this
将方法标记为virtual,表示子类能够重写这个方法(固然也能够不重写);设计
将方法标记为sealed,表示子类不容许重写这个方法; 对象
特性:隔代继承,子类对象能访问父类全部的非私有成员;继承
2.抽象类接口
能够有实现的成员,也能够有非实现的成员;字符串
能够有virtual方法,子类能够重写,也能够不重写;
标记为abstruct的成语必须被子类重写(若是子类也是抽象类能够不重写);
一个类只要有一个struct成员,那么这个类必定要是抽象类;
特色:将子类共有的方法加以实现,将非共有的方法标记为abstract方法,以供子类重写
3.接口
不能有任何实现的成员,能够有属性(属性的本质是方法),全部的成员方法都是abstract;
特色:全部实现这个接口的实现类均可以被“接口对象”指向,每一个实现了接口的类的对象都会有接口定义抽象方法的实现,实现统一调度
(与委托相似,委托实例对象调用的时候,并不清楚具体调用的是哪个方法);
接口
3、面向接口编程的实例:
FTP地址、用户名、密码要保存到一个地方,配置提供者就提供了一个保存、读取配置的一些类
数据配置提供者接口:
public interface ISettingsProvider
{
string this[string name] { get; set; }//以字符串类型读取、设置配置项的值
string[] Names{get;}//全部配置名
bool NameExists(string name);//判断指定名字的配置是否存在
}
//实现这个接口的配置操做能够有多重:文件读取写入,数据库读取写入
4、设计模式
1.模板设计模式:
class Program
{
static void Main(string[] args)
{
Person p = new Student();
p.Play();
Console.ReadKey();
}
}
//模板父类的实现
abstract class Person
{
//子类共同继承的方法
public void Play()
{
for (int i = 0; i < 3; i++)
{
//步骤已经实现好,具体的实现由子类完成
SayHello();
Run();
Jump();
}
}
//要求子类写本身的实现
public abstract void SayHello();
public abstract void Run();
public abstract void Jump();
}
class Student : Person
{
public override void SayHello()
{
Console.WriteLine("学生打招呼");
}
public override void Run()
{
Console.WriteLine("学生跑");
}
public override void Jump()
{
Console.WriteLine("学生跳");
}
}
抽象类和接口的最大区别:接口是公共的行为规范,抽象类是公共的实现。