2010-01-22 10 views
7

Estoy tratando de ver los Estándares de codificación C# para hacer que mi código sea más bonito y estándar, y tengo una pregunta: ¿Las funciones (métodos que no son vacíos), de acuerdo con los estándares de codificación C#, deberían comenzar con "Obtener "¿?" Por ejemplo: "GetSongOrder()", "GetNextLine()" etc.?Las funciones deberían comenzar con "Obtener"?

Gracias.

+5

¿Qué estándares? –

+1

http://www.google.co.il/search?q=C%23+Coding+Standards&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a –

+0

@ Alan que solo muestra muchos "estándares" de codificación diferentes – leeeroy

Respuesta

24

Hay dos casos:

Si la rutina puede "obtener" el valor muy rápidamente, sin causar efectos secundarios en el código, le recomiendo usar una propiedad de captador, y omitiendo el nombre de "obtener":

public SongOrder SongOrder 
{ 
    get { return this.songOrder; } // ie: an enum 
} 

Si, no obstante, se requiere procesamiento, entonces es apropiado un método con el nombre "Obtener ...". Esto sugiere que puede haber efectos secundarios a llamar a este método, como el procesamiento adicional, o un cambio en un cierto estado:

public string GetNextLine() 
{ 
    string line = this.stream.ReadLine(); // This may cause a longer running operation, especially if it's using Disk IO/etc 
    // do other work? 
    return line; 
} 
+1

Muy buena descripción. Mis pensamientos son exactos: las propiedades nunca deberían usar la convención Verb-Noun, y deberían ser solo Sustantivo. Los métodos siempre deben ser Verb-Sustantivo. –

+0

Gracias por su respuesta, pero lo que quiero decir es que debe elegir "GetNextLine" o "ReadLine", por ejemplo. –

+0

@Alon: GetNextLine y ReadLine podrían ser lo mismo o podrían ser diferentes, no está claro de inmediato. Si está leyendo desde un archivo, use "ReadLine". Si obtiene una línea de una cadena en la memoria, use "GetNextLine". – FrustratedWithFormsDesigner

1

no he visto un estándar de C# en eso, pero la mayor parte del código real he visto usos escritos propiedades "getter" y omitir la palabra "Obtener" desde el nombre de la función. Ejemplo:

Public SongOrderList SongOrder 
{ 
    get 
    { 
     return mySongOrderList; 
    } 
} 

El uso de "Get" (y "Set") como un nombre de función de prefijo es algo que suelo ver en langauges que no tienen propiedades a la NET (lenguajes como C, Java) .

Editar:

... y por supuesto se puede tener demasiado set

Public SongOrderList SongOrder 
{ 
    get 
    { 
     //do some processing code here 
     return mySongOrderList; 
    } 
    set 
    { 
     //do some processing code here 
     mySongOrderList = value; //value is a C# keyword, in case you didn't know. it is the parameter to the setter 
    } 
} 

Por supuesto, si quieres un getter y setter y que no necesitan ningún procesamiento adicional , simplemente Pure Java-bean-como/set youc un hacer esto:

Public SongOrderList SongOrder 
    { 
     get; set; 
    } 

Si sólo desea un captador públicos puede hacer esto (creo - que ha sido un tiempo):

Public SongOrderList SongOrder 
    { 
     public get; private set; 
    } 
+0

pásame a ello. :) Creo que la tendencia a querer usar 'Obtener' proviene del uso frecuente de Java de los pares GetFoo()/SetFoo (valor). En C# normalmente envolvemos esto en una propiedad, Foo. – JMD

+0

y si hay un parámetro? –

+1

No siempre es cierto, sin embargo, si hay efectos secundarios para llamar a esto, es mejor que un método llamado "Obtener", IMO. –

2

El nombre de su función debe ser sucinto y tener sentido. Nada más y nada menos.

Si funciona para usted, entonces use Get. Si Recuperar funciona, úsalo.

No existe un verdadero "estándar" para las convenciones de nomenclatura.

+2

Yo diría "El nombre de la función debe ser lo más breve posible, sin dejar de ser autodescriptivo" - No te vayas demasiado corto;) –

2

En general, es común una convención de nombres Verb-Sustantivo para funciones. 'Obtener' es solo uno de los verbos que puede ver. También podría ser 'Activar', 'Cerrar', 'Volcar', o cualquier cosa ... es solo una consecuencia de la codificación general y en inglés que un método o función típicamente 'Hacer algo' a 'Algún tipo de objeto (s) '.

1

No, no existe una norma que la función debe comenzar con "Get".

Al crear nombres de funciones que tengan sentido, a menudo toman esa forma, como la función GetHashCode. Otros verbos al principio son comunes, como en la función ToString, y solo verbos como en la función Encode.

Existen otras formas, en las que se describe el resultado de la función, como la función Substring.

1

Además de otras respuestas, si tiene un método como GetNextLine(), le recomendamos que devuelva una enumeración, p.

IEnumerable<Line> GetLines();

Cuestiones relacionadas