首页 > 代码库 > .NET基础回顾(三)
.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.cs11 class Chinese:Person12 {13 public override void SayHi()14 {15 Console.WriteLine("我是中国人。");16 }17 }18 19 //GuangDongRen.cs20 class GuangDongRen:Chinese21 {22 public override void SayHi()23 {24 Console.WriteLine("我是广东人。");25 }26 }27 28 //Main29 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.cs17 class Girl:Person18 {19 public override void WashBody()20 {21 Console.WriteLine("女孩在洗澡");22 }23 }24 25 //WashMachine.cs26 class WashMachine27 {28 public void Wash(Person p)29 {30 Console.WriteLine("开始洗澡");31 p.WashBody();32 Console.WriteLine("洗澡结束");33 }34 }35 36 //Main37 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.cs11 class Cat:Pet12 {13 public override void Shout()14 {15 Console.WriteLine("猫咪叫");16 }17 }18 19 //Dog.cs20 class Dog:Pet21 {22 public override void Shout()23 {24 Console.WriteLine("狗狗叫");25 }26 }27 28 //Shop.cs29 class Shop30 {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 //Main46 static void Main(string[] args)47 {48 Shop shop = new Shop();49 Pet pet = shop.SellPet("dog");50 pet.Shout();//输出"狗狗叫"51 }
.NET基础回顾(三)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。