------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
-
多态
LSP里氏替换原则、多态。(程序的可扩展性、灵活性)方法重写override。虚方法的原理:虚方法表。
子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用、以及多态。
用虚方法实现多态
class Program
{
static void Main(string[] args)
{
//ctrl + k + d 代码对齐快捷键
//开放封闭原则:对扩展开放,对修改关闭原则
Chinese ch = new Chinese("张三");
Japanese ja = new Japanese("松下井田");
American am = new American("Tom");
//由于多个子类对象,那么声明一个父类的对象就能将子类的
//对象一一放进来存放。
Person[] per = new Person[] { ch, ja, am };
for (int i = 0; i < per.Length; i++)
{
//如果随着人的不断增加,那么这个代码就要一直往下写。很麻烦
#region 旧代码
//由于person类中没有Say方法。所以是点不出来的
//per[i].
//if (per[i] is Chinese)
//{
// Chinese c = (Chinese)per[i];
// c.Say();
//}
//else if (per[i] is Japanese)
//{
// Japanese j = (Japanese)per[i];
// j.Say();
//}
//else
//{
// American a = (American)per[i];
// a.Say();
//}
#endregion
//这样就只要一句话的代码就能搞定
//这就体现了多态
per[i].Say();
}
Console.WriteLine();
Console.ReadKey();
}
}
class Japanese:Person
{
public Japanese(string name)
: base(name)
{
}
public override void Say()
{
Console.WriteLine("我叫{0},我是日本人!", Name);
}
}
class Chinese : Person
{
public Chinese(string name):base(name)
{
this.Name = name;
}
//如果子类要重写父类的方法,那么要在子类方法名前 加一个override关键字,如下
//并且有且仅有这个一个关键字重写父类的方法
public override void Say()
{
Console.WriteLine("我叫{0},我是中国人!",Name);
}
}
class American : Person
{
public American(string name):base(name)
{
this.Name = name;
}
public override void Say()
{
Console.WriteLine("我叫{0},我是美国人!", Name);
}
}
public class Person
{
public Person(string name)
{
this.Name = name;
}
public string Name
{
get;
set;
}
//virtual关键字是标记为虚方法用的
//如果一个方法是虚方法,那么这个方法在子类中就可以被重写了
//子类继承父类后,可以直接使用父类的方法,也可以将它重写 (用关键字override即可)
public virtual void Say()
{
Console.WriteLine("父类中的Say方法");
}
}
- 封装
1、属性封装了字段
2、方法的多个参数封装成了一个对象
3、将一堆的代码封装到了一个方法中
4、将一些功能封装到几个类中
5、将一些具有相同功能的代码封装到了一个程序集中(dll、exe)
并且对提供统一的访问接口(属性名,方法名等)
- 继承
1、继承 是类与类之间的关系
2、比如奔驰汽车(类)继承了汽车(类)
3、继承的优点:
代码重用
继承的特点:
继承具有单根性。即只能继承一个父类,不能继承多个父类
继承具有传递性。当类A继承自object类的时候,
这时A类就有了object类中继承下来的的4个方法:
Tostring(),GetType(),GetHashCode(),Equals()
然后类B又继承了类A,那么类B会将类A中的四个方法继承下来
由于那4个方法是在object中的,所以相当于类B间接从object中继承下来了成员
C#中任何一个类都是继承自object类的,如果一个类没有继承自任何类,
则默认继承自object类。如果显示的指定了当前类继承自某个类,则将覆盖默认继承的object类
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------