2

C# で Windows アプリケーションを開発しています。私のアプリケーションでは、1 つの静的クラスを使用しました。

以下はコードです:

public static class clsNumber
{
     private static object vValue;

     public static object Value
     {
         get
         {
              return Value;
         }
         set
         {
              Value = value;
         }
     }

     public static string HexValue
     {
         get
         {
              try
              {
                   return Microsoft.VisualBasic.Conversion.Hex(vValue);
              }
              catch
              {
                   return Convert.ToString(vValue);
              }
         }
         set
         {
              Value = Microsoft.VisualBasic.Conversion.Val("&H" + value);
         }
     }
}

別のクラスから、上記のクラスの「HexValue」の値が設定されています。以下はコード行です。

iStick = sOutPut.Substring(0, 8);
clsNumber.HexValue = iStick;

上記のコード行を実行すると、以下のエラーが発生します。

"An unhandled exception of type 'System.StackOverflowException' occurred in <.....>.dll"

誰でもこれを解決するのを手伝ってもらえますか? 前もって感謝します。

4

3 に答える 3

10

ここに終了しない再帰があります:

public static object Value  
{
     get
     {
          return Value;
     }
     set
     {
           Value = value;      
     }
 }

ゲッター内の行return Valueがゲッターを再帰的に呼び出すため、スタック オーバーフローが発生します。セッターも同様です。

私はあなたが意味したと思います:

public static object Value  
{
     get
     {
          return vValue;
     }
     set
     {
           vValue = value;      
     }
 }

ここで明示的に名前が付けられたフィールドを使用してプロパティに戻ることで何が得られるのかわかりません。次のようにプロパティを削除vValueして宣言します。

public static object Value { get; set; }
于 2012-04-05T07:10:45.840 に答える
1

2つのこと:

  1. vValue フィールドを作成したことを忘れました。

  2. プロパティを再帰的にしないでください (本当に必要で、何度か繰り返した後に解決できる場合を除きます)。ここでは、Value プロパティ内で Value プロパティを呼び出しています。

于 2012-04-05T09:20:20.200 に答える
-2
public static string HexValue 

上記の行では、文字列の代わりに StringBuilder を使用します

于 2012-04-05T08:28:15.813 に答える