[英]C# overriding a method with different parameters
我正在做一個涉及繼承和覆蓋方法的作業。 我應該創建一個Ship
類和CruiseShip
子類。 船舶類應該具有兩個成員變量,一個用於船舶名稱的字符串和一個用於船舶建造日期的字符串。 該類還需要一個Print
方法來顯示該信息。
CruiseShip
子類CruiseShip
類似,不同之處在於,其乘員最大容量應為整數值,而不是構建日期的成員變量。 該子類應該覆蓋Ship
類的Print
方法,並且僅顯示船舶名稱和容量(而不是日期)。
我下面的代碼存在的問題是,我不確定如何重寫Print
方法以接受一個字符串和一個整數,而不是兩個字符串。 如何讓覆蓋方法顯示適當的日期?
public class Ship
{
public virtual void Print(string name, string date)
{
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's build date: {0}", date);
}
}
public class CruiseShip : Ship
{
public override void Print(string name, int capacity)
{
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's passanger capacity: {0}", capacity);
}
}
public class SeeShips
{
static void Main(string[] args)
{
Ship newShip = new Ship();
newShip.Print("Generic Ship","1989");
Console.ReadLine();
}
}
您遇到的問題是您正在創建無狀態類,這實際上是您不應在此分配中執行的操作。
想象一下,我創建了您的其中一艘船:
var myShip = new Ship();
好的,那...這艘船有什么特別之處? 我什么也沒說...船上沒有任何相關信息,它們都是一樣的。 您需要找到一種在船內實際存儲信息的機制,也就是狀態 :
public class Ship
{
//these should be properties or
//readonly variables but thats for later
public string name;
public string date;
}
好的,現在您可以創建Ship
並賦予其一些狀態:
var myShip = new Ship();
myShip.name = "My Ship";
myShip.date = "Yesterday";
大! 現在,我們的手中確實有一艘有趣的船。 它有一個名字和一個日期 。
此外,現在虛擬方法Print
不需要傳遞任何信息(自變量),因為它可以從調用該方法的船上獲取狀態:
public class Ship
{
....
public virtual string Print() {
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's build date: {0}", date); }
你知道那是怎么回事嗎?
從這里,您應該能夠弄清楚如何對CruiseShip
進行子類CruiseShip
並覆蓋Print
並使它做您想要的事情。
您一定要閱讀以下主題:
Print方法應從成員變量中獲取其數據,因此不需要任何參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.