2010-03-02 21 views
7

Al definir los valores const API de Windows, es mejor tener como constcómo agrupar las constantes de API de Windows

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

o agruparlos juntos como una enumeración.

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

Prefiero la versión 'enum' que mostró, pero sin el prefijo redundante en los nombres:' public enum SW {HIDE = 0, SHOWNORMAL = 1 ... etc.'. Como mínimo, observar [DRY] (https://en.wikipedia.org/wiki/Don't_repeat_yourself) y eliminar (la posible existencia de) toda una clase de error o confusión ('SW.SX_MODE == ?? ? ') –

Respuesta

5

Agrúpalas como enums.

¿Por qué? Los Ints se usan en todas partes y puedes pasarlos donde, por ejemplo, también es necesario un tamaño. Eso condujo a la notación húngara de frickin (szSomething ..) en primer lugar. Faltaba el sistema de tipos e intentaron "arreglarlo" usando el esquema de nomenclatura variable. Ahora estás mejor, con un mejor sistema de tipos; usarlo

Defina enumeraciones, agrúpelas de una manera sensata y no usará Thread.Sleep (WM_User) algún día (Sí, no estoy hablando en serio con este ejemplo, pero creo que entiende bien).

5

Excepto por el mantenimiento del código, no importa en absoluto.

Recomiendo usar un enum; esto le permite usar IntelliSense cuando llama a la función, y puede ayudar a prevenir errores.
Sin embargo, debe darle a su enumeración un nombre significativo, como WindowShowType.
Además, es posible que desee eliminar los prefijos y tal vez estandarizar los nombres a CamelCase.

+0

Aunque estoy de acuerdo con eliminar los prefijos, prefiero mantener los nombres de ALLCAPS de' Win32', en lugar de cambiarlos ** TitleCase ** como sugieres (generalmente reservo el término ** camelCase ** para el formulario Acabo de ilustrarlo en). Mi razonamiento es que el cambio anterior tiene una motivación de principios (vea mi otro comentario en esta página), mientras que el último parece más gratuito, posiblemente incluso perdiendo información, aunque circunstancial, sobre la procedencia de Win32 de la enumeración. –

Cuestiones relacionadas