2012-05-29 9 views
8

Ich arbeite an einigen benutzerdefinierten Authentifizierungs-Code auf der Grundlage von Microsoft Mitgliedschaft Sachen. Während ich die Profile-Funktionalität untersuchte, habe ich mir die ProfileBase-Klasse in System.Web.dll v4.0.30319 angesehen. Es gibt einige Variablen auf Klassenebene, die als Typ deklariert sind, aber dann und dann mit einem Nullwert initialisiert werden, der in diesen Typ umgewandelt wird.Microsoft wirft null auf einen Typ, sollte ich?

Zum Beispiel

private static Exception s_InitializeException = (Exception) null; 
private static ProfileBase s_SingletonInstance = (ProfileBase) null; 
private static Hashtable s_PropertiesForCompilation = (Hashtable) null; 

ich normalerweise keine Variablen initialisieren, die eine Klasse Ebene Umfang haben. Ich frage mich, ob das etwas ist, was ich tun soll oder welchem ​​Zweck es dient.

Danke für jede Erleuchtung.

+10

Suchen Sie den ursprünglichen Quellcode oder einen zerlegten? –

+0

Dieser Code wurde von Re-sharper abgerufen, also bin ich mir sicher, dass die Quelle disassembliert wurde. Vielen Dank. –

Antwort

7

Du bist wahrscheinlich am disassemblied Code suchen. Dieses Casting wurde wahrscheinlich vom Disassembler hinzugefügt und im Quellcode nicht vorhanden.

Sie müssen diese Art von Casting in Ihrem Code definitiv nicht tun.

6

Das hat keinen Sinn; Ich glaube, null ist immer null - ich kann sicherlich nicht an irgendwelche Beispiele in C-basierten Sprachen denken, wo es nicht ist. Es ist wahrscheinlich Code generiert, anstatt Code, der explizit so geschrieben wurde.

1

Was dieser Code sagt: initialisieren Sie einen Speicherbereich, um einen Typ von Exception zu halten, und weisen Sie dieser Variablen den Wert NULL zu. Da Exception ein Referenztyp ist, kann es null sein. Es hat keinen Sinn, NULL auf Exception zu setzen. Vielleicht generierter Code?

+0

Es wird nicht gesagt, um irgendetwas zu initialisieren - es gibt kein 'neues', um Speicher zuzuordnen. Es deklariert nur eine Variable, die zu nichts "zeigt". – Luke

+0

Mein Fehler - es ist statisch - hat die Frage vor dem Einspringen nicht richtig gelesen. – RobertMS

1

Die empfohlene Vorgehensweise besteht darin, statische Variablen zu initialisieren, für die sie deklariert sind.

Hier ist der eigentliche Code Microsoft:

///////////////////////////////////////////////////////////////////////////// 
    ///////////////////////////////////////////////////////////////////////////// 
    // Static data 
    private static SettingsPropertyCollection s_Properties = null; 
    private static object s_InitializeLock = new Object(); 
    private static Exception s_InitializeException = null; 
    private static bool s_Initialized = false; 
    private static ProfileBase s_SingletonInstance = null; 
    private static Hashtable s_PropertiesForCompilation = null; 
1

Die Umwandlungen werden von Ihrem Decompiler generiert - die "offizielle" Quelle hat null, aber keine Besetzung. Ich sehe keinen Vorteil darin, den Cast hinzuzufügen.

Ich initialisiere normalerweise keine Variablen, die einen Gültigkeitsbereich auf Klassenebene haben. Ich frage mich, ob das etwas ist, was ich tun soll oder welchem ​​Zweck es dient.

Die null (die ist in der Originalquelle) scheint vor allem eine Art Sache zu sein. Da es normalerweise einfacher ist, ein statisches Feld in der Deklaration zu initialisieren, fügt das Hinzufügen der null ein bisschen Klarheit hinzu, dass es absichtlich nicht initialisiert ist. Es könnte auch dazu dienen, einen FXCop oder eine ähnliche Überprüfung der Stilrichtlinien zu bestehen.

Verwandte Themen