首页 > 代码库 > .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基础回顾(三)