隱藏基類成員與成員的虛擬過載的區
阿新 • • 發佈:2018-12-26
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class shape { protected double lenth = 0; protected double width = 0; public double Lenth { set { lenth = value; } get { return lenth; } } public double Width { set { width = value; } get { return width; } } public virtual double perimeter() { return 0; } public virtual double area() { return 0; } } class circle : shape { protected double r;//半徑 public double R { set { r = value; } get { return r; } } public override double perimeter() { return Math.PI * r*2; } public override double area() { return Math.PI * r * r; } } class square:shape { public override double perimeter() { return 2 * (lenth + width); } public override double area() { return lenth * width; } } class Program { static void Main(string[] args) { int x = 0;//預設矩形 int y=0;//預設周長 shape a = new shape(); circle b = new circle(); Console.Write("本應用可計算圓,矩形\n請輸入圖形型別:"); if (Console.ReadLine() == "圓") { x = 1; b.R = double.Parse(Console.ReadLine()); } else a.Lenth = double.Parse(Console.ReadLine()); Console.WriteLine("可計算周長,面積\n請輸入計算型別"); if(Console.ReadLine() == "面積")y=1; if (x == 1) { if (y == 0) Console.WriteLine( "周長為{0}",b.perimeter()); else Console.WriteLine("周長為{0}",b.area()); } else { if (y == 0) Console.WriteLine("周長為{0}",a.perimeter()); else Console.WriteLine("周長為{0}", a.area()); } } } }
隱藏基類成員與成員的虛擬過載的區別
隱藏基類成員 關鍵詞:new(關鍵詞修飾)
成員的虛擬和過載:多型性 virtual/override
區別:
“虛擬與過載在執行時會根據物件的實際型別來進行呼叫,而不像new關鍵字修飾的方法那樣根據宣告型別來呼叫”
——《c#語言程式設計基礎》P139
由字面上可知,多型性是指對不同型別的派生類方法的描述。
隱藏基類成員僅適用於直接使用派生類時,隱藏基類同名方法;虛擬過載可在基類按照不同條件直接自動匹配呼叫相應的方法。
(不知道啥時候寫的文章了,直接發出來好了)