2012-04-05 17 views
2

Ich entwickle eine Windows-Anwendung in C#. In meiner Anwendung habe ich eine statische Klasse verwendet.Eine nicht behandelte Ausnahme vom Typ 'System.StackOverflowException' ist in .dll aufgetreten

Unten ist der Code:

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); 
     } 
    } 
} 

Aus einer anderen Klasse der Wert von „HexValue“ der oben genannten Klasse festgelegt wird. Im Folgenden finden Sie die Codezeile:

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

Während die obige Codezeile kommen die unten genannten Fehler Ausführung:

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

Kann mit der Auflösung dazu helfen Sie mir jemand bitte? Vielen Dank im Voraus.

+8

Der Value-Getter verwendet die Value-Eigenschaft. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Welche verwendet den Value-Eigenschaft Getter. Was nutzt die Value-Eigenschaft getter ... Kaboom !!!! –

Antwort

10

Sie haben einen nicht-Abschluss Rekursion hier:

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

Die Linie return Value in dem Getter ruft der Getter rekursiv und das führt Überlauf zu stapeln. Und ähnlich für den Setter.

Ich glaube, Sie gemeint:

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

ich sehe nicht, was hier aus mit einem explizit benannten Bereich gewonnen werden ist auf Eigentum zu sichern. Ich würde vValue entfernen und die Eigenschaft wie folgt erklären:

public static object Value { get; set; } 
+0

Es wurde das Problem behoben. Danke vielmals. :) – user1018213

-2
public static string HexValue 

im Einsatz String über der Linie statt String

1

2 Dinge:

  1. Sie haben vergessen, dass Sie erstellt haben vWert-Feld

  2. Machen Sie die Eigenschaft nicht rekursiv (es sei denn, sie wird wirklich benötigt und kann nach einigen Iterationen aufgelöst werden). Hier rufen Sie die Value-Eigenschaft in der Value-Eigenschaft auf.

Verwandte Themen