2012-04-05 3 views
2

Я разрабатываю приложение Windows на C#. В моем приложении я использовал один статический класс.Необработанное исключение типа «System.StackOverflowException» произошло в .dll

Ниже приведен код:

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" 

Может кто-нибудь, пожалуйста, помогите мне с разрешением на это? Спасибо заранее.

+8

Значение свойства getter использует свойство Value. В котором используется свойство get. В котором используется свойство get. В котором используется свойство get. В котором используется свойство get. В котором используется свойство get. В котором используется свойство get. В котором используется свойство get. Который использует свойство Value getter ... Kaboom !!!! –

ответ

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; } 
+0

Он разрешил проблему. Большое спасибо. :) – user1018213

-2
public static string HexValue 

в выше использования линии StringBuilder вместо строки

1

2 вещи:

  1. Вы забыли, что вы создали vValue.

  2. Не создавать свойство рекурсивное (если это не нужно, и которое разрешимо после некоторых итераций). Здесь вы вызываете свойство Value внутри свойства Value.

Смежные вопросы