C# 多态 虚方法 抽象 接口

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace _09多态  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             //概念:让一个对象能够表现出多种的状态(类型)  
  14.             //实现多态的3种手段:1、虚方法 2、抽象类 3、接口  
  15.   
  16.             Chinese cn1 = new Chinese("韩梅梅");  
  17.             Chinese cn2 = new Chinese("李雷");  
  18.             Japanese j1 = new Japanese("树下君");  
  19.             Japanese j2 = new Japanese("井边子");  
  20.             Korea k1 = new Korea("金秀贤");  
  21.             Korea k2 = new Korea("金贤秀");  
  22.             American a1 = new American("科比布莱恩特");  
  23.             American a2 = new American("奥尼尔");  
  24.             Person[] pers = { cn1, cn2, j1, j2, k1, k2, a1, a2, new English("格林"), new English("玛利亚") };  
  25.   
  26.             for (int i = 0; i < pers.Length; i++)  
  27.             {  
  28.                 //if (pers[i] is Chinese)  
  29.                 //{  
  30.                 //    ((Chinese)pers[i]).SayHello();  
  31.                 //}  
  32.                 //else if (pers[i] is Japanese)  
  33.                 //{  
  34.                 //    ((Japanese)pers[i]).SayHello();  
  35.                 //}  
  36.                 //else if (pers[i] is Korea)  
  37.                 //{  
  38.                 //    ((Korea)pers[i]).SayHello();  
  39.                 //}  
  40.                 //else  
  41.                 //{  
  42.                 //    ((American)pers[i]).SayHello();  
  43.                 //}  
  44.   
  45.   
  46.                 pers[i].SayHello();  
  47.             }  
  48.             Console.ReadKey();  
  49.         }  
  50.     }  
  51.   
  52.     public class Person  
  53.     {  
  54.         private string _name;  
  55.         public string Name  
  56.         {  
  57.             get { return _name; }  
  58.             set { _name = value; }  
  59.         }  
  60.   
  61.         public Person(string name)  
  62.         {  
  63.             this.Name = name;  
  64.         }  
  65.         public virtual void SayHello()  
  66.         {  
  67.             Console.WriteLine("我是人类");  
  68.         }  
  69.   
  70.     }  
  71.   
  72.     public class Chinese : Person  
  73.     {  
  74.         public Chinese(string name)  
  75.             : base(name)  
  76.         {  
  77.   
  78.         }  
  79.   
  80.         public override void SayHello()  
  81.         {  
  82.             Console.WriteLine("我是中国人,我叫{0}"this.Name);  
  83.         }  
  84.     }  
  85.     public class Japanese : Person  
  86.     {  
  87.         public Japanese(string name)  
  88.             : base(name)  
  89.         { }  
  90.   
  91.         public override void SayHello()  
  92.         {  
  93.             Console.WriteLine("我是脚盆国人,我叫{0}"this.Name);  
  94.         }  
  95.     }  
  96.     public class Korea : Person  
  97.     {  
  98.         public Korea(string name)  
  99.             : base(name)  
  100.         {  
  101.   
  102.         }  
  103.   
  104.   
  105.         public override void SayHello()  
  106.         {  
  107.             Console.WriteLine("我是棒之思密达,我叫{0}"this.Name);  
  108.         }  
  109.     }  
  110.     public class American : Person  
  111.     {  
  112.         public American(string name)  
  113.             : base(name)  
  114.         {  
  115.   
  116.         }  
  117.   
  118.         public override void SayHello()  
  119.         {  
  120.             Console.WriteLine("我叫{0},我是米国人"this.Name);  
  121.         }  
  122.     }  
  123.   
  124.   
  125.     public class English : Person  
  126.     {  
  127.         public English(string name)  
  128.             : base(name)  
  129.         { }  
  130.   
  131.         public override void SayHello()  
  132.         {  
  133.             Console.WriteLine("我是英国人");  
  134.         }  
  135.     }  
  136.   
  137. }  
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6.   
  7. namespace _12_抽象类  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             //使用多态求矩形的面积和周长以及圆形的面积和周长  
  14.             Shape shape = new Square(5, 6); //new Circle(5);  
  15.             double area = shape.GetArea();  
  16.             double perimeter = shape.GetPerimeter();  
  17.             Console.WriteLine("这个形状的面积是{0},周长是{1}", area, perimeter);  
  18.             Console.ReadKey();  
  19.   
  20.         }  
  21.     }  
  22.   
  23.     public abstract class Shape  
  24.     {  
  25.         public abstract double GetArea();  
  26.         public abstract double GetPerimeter();  
  27.     }  
  28.     public class Circle : Shape  
  29.     {  
  30.   
  31.         private double _r;  
  32.         public double R  
  33.         {  
  34.             get { return _r; }  
  35.             set { _r = value; }  
  36.         }  
  37.   
  38.         public Circle(double r)  
  39.         {  
  40.             this.R = r;  
  41.         }  
  42.         public override double GetArea()  
  43.         {  
  44.             return Math.PI * this.R * this.R;  
  45.         }  
  46.   
  47.         public override double GetPerimeter()  
  48.         {  
  49.             return 2 * Math.PI * this.R;  
  50.         }  
  51.     }  
  52.     public class Square : Shape  
  53.     {  
  54.         private double _height;  
  55.   
  56.         public double Height  
  57.         {  
  58.             get { return _height; }  
  59.             set { _height = value; }  
  60.         }  
  61.   
  62.         private double _width;  
  63.   
  64.         public double Width  
  65.         {  
  66.             get { return _width; }  
  67.             set { _width = value; }  
  68.         }  
  69.   
  70.         public Square(double height, double width)  
  71.         {  
  72.             this.Height = height;  
  73.             this.Width = width;  
  74.         }  
  75.   
  76.         public override double GetArea()  
  77.         {  
  78.             return this.Height * this.Width;  
  79.         }  
  80.   
  81.         public override double GetPerimeter()  
  82.         {  
  83.             return (this.Height + this.Width) * 2;  
  84.         }  
  85.     }  
  86.   
  87. }  
shashou47

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: