2015-08-31 38 views
-1

考慮場景:壓倒一切的ToString()與格式化參數

int myNumber = 10; 
string formattedNumber = myNumber.ToString("0000"); // output will be "0010" 

即,我們可以使用格式化ToString()整數作爲像在上面的代碼。我有一個名爲myNewClass的類,其中我在ToString()之上,我的目標是使用重寫的ToString()方法獲得格式化的輸出。

public class myNewClass 
     { 
      public int MyProperty { get; set; } 
      public myNewClass(dynamic x) 
      { 
       MyProperty = x; 
      } 
      public override string ToString() 
      { 
       return MyProperty.ToString(); 
      } 
     } 

現在正在創建該類的對象爲:

myNewClass p = new myNewClass(10); 

當我打電話ToString()與格式化,然後它不會編譯:

var m = p.ToString("0000");//gives error that "no overloaded method Tostring() takes one argument." 

所以我已經改變了函數簽名如下所示:

public override string ToString(string format) 
     { 
      return MyProperty.ToString(format); 
     } 

再次導致相同:No suitable method found to override

我的問題是,我如何能實現重寫的ToString()的格式化參數

+0

你的'myNewClass','System.Object'的基類沒有定義'public virtual string ToString(string)'方法,所以你不能「覆蓋」它。坦率地說,你顯示的代碼片段甚至不應該編譯。嘗試從「ToString(string)」方法中刪除「覆蓋」規範。 –

+0

Blindy回答了你的問題。您應該考慮實施[IFormattable](https://msdn.microsoft.com/en-us/library/system.iformattable.tostring(v = vs.110).aspx)以使用[string.Format]中的格式化值(https://msdn.microsoft.com/en-us/library/System.String.Format(v=VS.110).aspx)。 –

回答

2

取出override關鍵字和你設置。在這種情況下,你不會壓倒一切,因爲System.Object只有string ToString()。你正在做的是給現有的函數添加一個額外的函數調用(就像框架中的所有數值類型一樣)。