2012-03-29 12 views
13

Il naming convention for constants in C# è involucro Pascal:denominazione costanti API di Windows in C#

private const int TheAnswer = 42; 

Ma a volte abbiamo bisogno di rappresentare le costanti già esistenti dalla API di Windows.

Per esempio, non so come dare un nome a questo:

/// <summary> 
/// With this style turned on for your form, 
/// Windows double-buffers the form and all its child controls. 
/// </summary> 
public const int WS_EX_COMPOSITED = 0x02000000; 

Cosa devo chiamarla?

Mantenerlo come WS_EX_COMPOSITED mi consente di associarlo rapidamente a the WinAPI, ma è sbagliato.

Alcune opzioni:

  • WsExComposited- Troppo ungheresi
  • Composited- Troppo breve
  • WsEx enum con Composited in esso - Ancora ungherese
  • ExtendedWindowsStyles.Composited- Contro tantissimo in una classe? Enum?

Va osservato che gli obiettivi per una buona denominazione sono:

  • Deve essere leggibile.
  • Non deve attivare FxCop e StyleCop, anche se questo significa nasconderlo da essi.
+13

IMO, penso che disobbedire alla linea guida sia perfettamente ok in questa situazione. Il commento sommario e la sua sfacciata vanità WinAPI sono abbastanza buoni da lasciarlo così com'è - la maggior parte delle persone capirebbe.Se * devi * scegliere un formato, penso che mi piaccia "ExtendedWindowStyles.Composited" come una costante in una classe. –

+1

Come può * essere * ungherese? –

+0

@Cory Quindi dici che dovrei invece decorare cose come questa in modo che FxCop e StyleCop non si lamentino? –

risposta

14

WS_EX_COMPOSITED è perfettamente adatto per una parte che si interfaccia direttamente con l'API di Win (o qualsiasi altra API documentata). La porzione che vuoi esporre dovrebbe seguire le convenzioni standard - avere una facciata pubblica separata per chiamare funzioni native con buoni nomi di metodi (finirai per dimenticare ciò che hai studiato su particolari combinazioni di flag, ma il buon nome del metodo wrapper almeno lascerà lo usi).

Il vantaggio collaterale di mantenere il nome il più vicino possibile all'API nativa è che è possibile cercare la costante direttamente nel MSDN/altra documentazione e trovare la risposta immediatamente. Sarà molto più difficile se la cambierai.

+0

Questa è la ragione esatta per cui non dovrei rinominarlo. Credo che tu abbia ragione. –

0

Forse this aiuterà i nuovi visitatori con questa domanda.

Se il campo o il nome della variabile è destinato a corrispondere al nome di un elemento associato con Win32 o COM, e deve quindi cominciare con un carattere di sottolineatura, posizionare il campo o una variabile all'interno di una classe speciale NativeMethods. Una classe NativeMethods è una classe che contiene un nome che termina con NativeMethods ed è intesa come segnaposto per Win32 o COM wrapper. StyleCop ignorerà questa violazione se l'oggetto è inserito in una classe NativeMethods.