2010-03-02 15 views
7

Konstanten Wenn const Werte Windows-API zu definieren, ist es besser, sie zu haben als constSo gruppieren Windows-API

public const int SW_HIDE = 0; 
public const int SW_SHOWNORMAL = 1; 
public const int SW_NORMAL = 1; 
public const int SW_SHOWMINIMIZED = 2; 
public const int SW_SHOWMAXIMIZED = 3; 
public const int SW_MAXIMIZE = 3; 
public const int SW_SHOWNOACTIVATE = 4; 
public const int SW_SHOW = 5; 
public const int SW_MINIMIZE = 6; 
public const int SW_SHOWMINNOACTIVE = 7; 
public const int SW_SHOWNA = 8; 
public const int SW_RESTORE = 9; 
public const int SW_SHOWDEFAULT = 10; 
public const int SW_MAX = 10; 

[DllImport("user32.dll")] 
public static extern bool ShowWindow(HandleRef hWnd, int nCmdShow); 

oder sie zusammen als eine Enumeration zu gruppieren.

public enum SW { 
    SW_HIDE = 0, 
    SW_SHOWNORMAL = 1, 
    SW_NORMAL = 1, 
    SW_SHOWMINIMIZED = 2, 
    SW_SHOWMAXIMIZED = 3, 
    SW_MAXIMIZE = 3, 
    SW_SHOWNOACTIVATE = 4, 
    SW_SHOW = 5, 
    SW_MINIMIZE = 6, 
    SW_SHOWMINNOACTIVE = 7, 
    SW_SHOWNA = 8, 
    SW_RESTORE = 9, 
    SW_SHOWDEFAULT = 10, 
    SW_MAX = 10 
} 

[DllImport("user32.dll")] 
public static extern bool ShowWindow(HandleRef hWnd, SW nCmdShow); 
+0

Ich bevorzuge die 'Enum'-Version, die Sie gezeigt haben, aber ohne das redundante Präfix auf den Namen:' public enum SW {HIDE = 0, SHOWNORMAL = 1 ... etc.'. Zumindest, um [DRY] (https://en.wikipedia.org/wiki/Don't_repeat_yourself) zu beobachten und (die mögliche Existenz von) eine ganze Klasse von Fehlern oder Verwirrungen zu eliminieren ('SW.SX_MODE == ?? ? ') –

Antwort

5

Gruppieren Sie sie als enums.

Warum? Ints werden überall benutzt und man kann sie dort passieren, wo zum Beispiel auch eine Größe benötigt wird. Das führte an erster Stelle zu der ungarischen Notation (szSomething ..). Das Typsystem fehlte und sie versuchten es mit dem Variablennamenschema zu "reparieren". Sie sind jetzt besser dran, mit einem besseren Typensystem; benutze es.

Definieren Sie enums, gruppieren Sie sie auf eine vernünftige Art und Sie werden nicht Thread.Sleep (WM_User) eines Tages (Ja, ich bin nicht ganz ernst mit diesem Beispiel, aber ich denke, Sie bekommen den Punkt).

5

Abgesehen von der Wartbarkeit des Codes spielt dies keine Rolle.

Ich empfehle die Verwendung einer enum; Dadurch können Sie IntelliSense beim Aufrufen der Funktion verwenden und Fehler vermeiden.
Sie sollten jedoch Ihrem Enum einen aussagekräftigen Namen geben, z. B. WindowShowType.
Vielleicht möchten Sie auch die Präfixe entfernen und vielleicht die Namen zu CamelCase standardisieren.

+0

Während ich dem Entfernen der Präfixe zustimme, bevorzuge ich es, die ALLCAPS-Namen von' Win32' zu behalten, statt sie ** TitleCase ** zu wechseln, wie Sie vorschlagen (ich reserviere normalerweise den Begriff ** camelCase ** für das Formular Ich habe es nur illustriert). Meine Argumentation ist, dass die erste Änderung eine prinzipielle Motivation hat (siehe meinen anderen Kommentar auf dieser Seite), während die letztere grundloser erscheint und möglicherweise sogar Informationen - wenn auch umständlich - über die Win32-Provenienz des Enums verliert. –

Verwandte Themen