2011-01-27 20 views
0

所以用這個成員函數我猜想「調用基類displayTime方法,然後將時區添加到輸出消息」返回成員函數與字符串顯示? C#

public string DisplayTime() 
     { 
      //return base.displayTime(); 
      return "okay"; 
     }//end of DisplayTime 

基類:

public void displayTime() 
     { 
      DateTime time = DateTime.Now; // Use current time 
      string format = "MMM ddd d HH:mm yyyy"; // Use this format 
      MessageBox.Show(time.ToString(format)); // Write to console 

     }//end of displayTime 

可悲的是我的第一個DisplayTime設置不正確,因爲我不完全知道如何設置它。當我提到「return(」「+ base.displayTime());我試過不同的conbomations;」等等,並沒有工作。我不確定該從哪裏出發。

回答

2

基類的方法應該是虛擬的,並返回一個字符串

public virtual string DisplayTime() 
{ 
    DateTime time = DateTime.Now; // Use current time 
    string format = "MMM ddd d HH:mm yyyy"; // Use this format 
    return time.ToString(format); // Write to console 
} 

那麼你後代

 public override string DisplayTime() 
     { 
      return base.displayTime() + " Some time zone"; 
     }//end of DisplayTime 

回去重新讀一章繼承等等

+0

謝謝。我剛剛做了,我們的老師真的沒有給我們這個項目的很多指導。 – 2011-01-27 20:39:39

7

你的displayTime()返回void並且DisplayTime()應該返回字符串。 所以,如果你希望能夠寫出return base.displayTime();你必須改變displayTime()返回字符串,例如:

public string displayTime() 
     { 
      DateTime time = DateTime.Now; // Use current time 
      string format = "MMM ddd d HH:mm yyyy"; // Use this format 
      return (time.ToString(format)); // Write to console 

     }//end of displayTime 
+0

這忽略了提問者試圖實現繼承的觀點。 – Neil 2011-01-27 21:20:29

1

由於void displayTime()不返回任何內容,也不接受任何參數,因此不可能改變它的任何行爲。

現在,如果它是:

string displayTime() 
{ 
    ... 
// MessageBox.Show(time.ToString(format)); 
    return time.ToString(format)); 
} 

然後,在派生類中,你可以這樣做:

public string DisplayTime() 
{ 
    //return base.displayTime(); 
    return base.displayTime() + "A TimeZone"; 
}//end of DisplayTime 

注意,base.部分是沒有必要的代碼(但它是允許的) 。

如果你到d變成一個D,該名稱將是相同的,那麼你就必須使用base.指示要使用哪一個。