2010-12-17 10 views
1

ToString()を持つWeekdayExceptionクラスがあります。 ToString()でConstructor( "Illegal weekday:" + wday)に設定された文字列を返したいとします。文字列にアクセスするには?C#例外処理(コンストラクタに指定した文字列を使用)

using System; 

class WeekdayException : ApplicationException { 
    public WeekdayException(String wday) : base("Illegal weekday: " + wday) {} 

    public override string ToString() 
    { 
     return "HELLO" + ???; 
    } 
} 

class TryCatchFinally 
{ 
    public static void Main(String[] args) 
    { 
     try 
     { 
      throw new WeekdayException("thrown by try"); 
     } 
     catch (ApplicationException ex) 
     { 
      Console.WriteLine("Catch ..." + ex.ToString()); 
     } 
    } 
} 

これは、C#プログラマーが使用する方法です(ToString()の作成と使用)ですか?そうでない場合は、どうしたらいいですか?

+0

を?親のバージョンはあなたが望むことをするつもりはありませんか?それ以外の場合は、データを取得するために独自の(継承された)メソッドを呼び出すか、インスタンス変数 – Robert

+0

を使用してください.'ApplicationException'から継承することは、しばらくお待ちください。 'Exception'から直接継承します。 –

答えて

3

これはprivateメンバ変数を追加します(ただし下記参照)により、具体的wdayにアクセスする方法です。

class WeekdayException : ApplicationException { 
    private readonly string weekday; 
    public WeekdayException(String wday) : base("Illegal weekday: " + wday) { 
     this.weekday = wday; 
    } 

    public override string ToString() 
    { 
     return "HELLO " + this.weekday; 
    } 
} 

とC#プログラマが使用方法この(作るとToString()を使用して)いるのですか?そうでない場合は、どうしたらいいですか?

通常、例外の場合、のコンストラクタを呼び出すときに設定されるプロパティを設定して使用します。

class WeekdayException : ApplicationException { 
    public WeekdayException(string weekday) 
     : base("Illegal weekday: " + weekday) { } 
} 

その後:

try { 
    throw new WeekdayException("Tuesday"); 
} 
catch(WeekdayException weekdayException) { 
    Console.WriteLine(weekdayException.Message); 
} 

最後に、wdayのような短い変異体にもweekdayのような名前を短縮することはできません。ちょうどフルネームを使用してください。

1

私はあなたにoverrideMessageプロパティをお勧めします:なぜ、ToStringメソッドをオーバーライドし

class WeekdayException : ApplicationException 
{ 
    private readonly string _message; 

    public override string Message 
    { 
     get { return _message; } 
    } 

    public WeekdayException(String wday) 
    { 
     _message = "Illegal weekday: " + wday; 
    } 

    public override string ToString() 
    { 
     return Message; 
    } 
} 
関連する問題