.NET基础回顾(三)
一. 里氏替换原则:LSP
定义:子类可以替换父类的位置,并且程序的功能不受影响(父类变量指向子类对象)。因为父类有的功能子类都有,所以不影响程序的功能。
程序示例:
1 Person p = new Person(); 2 p.SayHi();//调用父类的 3 Student s = new Student(); 4 s.SayHi(); //调用子类的 5 //里氏替换原则 6 Person p1 = new Student(); 7 P1.SayHi(); //调用父类的
二. 类型转换
1. bool b = p is Person;判断变量所指的类的类型。
2. as转换
Person p = new Person();
Student s1 = (Student)p;//可能会报异常
//如果转换成功,引用指向s2,如果转换失败,返回null
Student s2 = p as Student;
三.虚方法、多态
1. 虚方法:允许子类覆盖父类的方法。
程序示例:
1 //Person.cs 2 class Person 3 { 4 public virtual void SayHi() 5 { 6 Console.WriteLine("我是人。"); 7 } 8 } 9 10 //Chinese.cs 11 class Chinese:Person 12 { 13 public override void SayHi() 14 { 15 Console.WriteLine("我是中国人。"); 16 } 17 } 18 19 //GuangDongRen.cs 20 class GuangDongRen:Chinese 21 { 22 public override void SayHi() 23 { 24 Console.WriteLine("我是广东人。"); 25 } 26 } 27 28 //Main 29 static void Main(string[] args) 30 { 31 Person p = new GuangDongRen(); 32 p.SayHi(); 33 //输出“广东人” 34 //如果GuangDongRen类里面没有重写SayHi()方法,则输出“中国人” 35 36 Console.ReadKey(); 37 }
2. 多态,同种行为,对于不同事物,有不同的表现。
程序示例:
1 //Person.cs 2 public virtual void WashBody() 3 { 4 Console.WriteLine("人在洗澡"); 5 } 6 7 //Boy.cs 8 class Boy:Person 9 { 10 public override void WashBody() 11 { 12 Console.WriteLine("男孩在洗澡"); 13 } 14 } 15 16 //Girl.cs 17 class Girl:Person 18 { 19 public override void WashBody() 20 { 21 Console.WriteLine("女孩在洗澡"); 22 } 23 } 24 25 //WashMachine.cs 26 class WashMachine 27 { 28 public void Wash(Person p) 29 { 30 Console.WriteLine("开始洗澡"); 31 p.WashBody(); 32 Console.WriteLine("洗澡结束"); 33 } 34 } 35 36 //Main 37 static void Main(string[] args) 38 { 39 Boy p1 = new Boy(); 40 Girl p2 = new Girl(); 41 WashMachine wm = new WashMachine(); 42 wm.Wash(p1);//男孩洗澡 43 wm.Wash(p2);//女孩洗澡 44 Console.ReadKey();
3. 将父类类型作为方法的返回值。(原理是什么?)
程序示例:
1 //Pet.cs 2 class Pet 3 { 4 public virtual void Shout() 5 { 6 Console.WriteLine("宠物叫"); 7 } 8 } 9 10 //Cat.cs 11 class Cat:Pet 12 { 13 public override void Shout() 14 { 15 Console.WriteLine("猫咪叫"); 16 } 17 } 18 19 //Dog.cs 20 class Dog:Pet 21 { 22 public override void Shout() 23 { 24 Console.WriteLine("狗狗叫"); 25 } 26 } 27 28 //Shop.cs 29 class Shop 30 { 31 public Pet SellPet(string type) 32 { 33 switch(type) 34 { 35 case "dog": 36 return new Dog(); 37 case "cat" 38 return new Cat(); 39 default: 40 return null; 41 } 42 } 43 } 44 45 //Main 46 static void Main(string[] args) 47 { 48 Shop shop = new Shop(); 49 Pet pet = shop.SellPet("dog"); 50 pet.Shout();//输出"狗狗叫" 51 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。