2012-01-17 20 views
10

Estoy escribiendo una clase donde el nombre comienza con un I (porque ese es el nombre del producto con el que estamos integrando, no puede cambiar).Nombres de clase C# comenzando con un I

El convenio establece que los nombres de clase tienen una letra mayúscula para iniciar, sin embargo, en este caso, parecería que el consumidor es una interfaz.

¿Hay alguna documentación que guíe a los desarrolladores sobre el enfoque correcto aquí? Además, ¿qué sucede si necesito implementar e interconectarme, debería ser IiProduct/IIProduct?

editar para agregar:

No puedo mencionar el producto por razones obvias, pero sigue la misma convención de mayúsculas y minúsculas que manzana. iPhone, por lo tanto, IPhoneClass (sigue su marca, pero aparece como una interfaz) en lugar de IphoneClass (que sigue la convención en lugar de la marca).

+8

yo no pensaría que es una interfaz, como interfaces comienzan 'I ....' –

+0

No puedo mencionar el producto por razones obvias, pero sigue la misma convención de mayúsculas y minúsculas que manzana. iPhone, por lo tanto, IPhoneClass (aparece como una interfaz) en lugar de IphoneClass (como mencionó en su comentario y aparece como una clase). – Liath

+1

Lo que dijo @GeorgeDuckett, un buen ejemplo sería la clase 'Image'. – Widor

Respuesta

6

Si el nombre del producto es, por ejemplo iPhone, entonces en ese caso yo llamaría la clase Iphone para mantener el nombre de la clase consistente. La interfaz sería IIphone, que no se ve muy bien, pero es clara en su significado (como sigue la convención).

estoy seguro que la gente con la clase sería más molesto si pensaron que era una interfaz, que si no fue activada como el producto es seguir la convención.

+0

Marcando esto como la respuesta porque se dio primero en los comentarios. – Liath

8

La interfaz comienza con I como prefijo y luego el nombre de interfaz con mayúscula. Entonces la interfaz será IImposibleProduct y la clase será ImposibleProduct.

+0

El nombre de su producto es algo así como iImpossibleProduct. ¿Que haces entonces? – shamp00

+0

Se adhieren a la convención. Use el iPhone para la clase de iPhone, IIPhone para la interfaz de iPhone. – Sjoerd

+0

En caso de iPhone, pensaría que seguir la convención correcta y no la convención "marca" y llamar a dicha clase en lugar de Iphone iPhone. –

0

¿Puede cambiar el nombre de la clase para asegurarse de que no comience con un I?

Por lo general, es de esperar que un I que no pertenezca a una palabra denota una interfaz. Un nombre de clase que comienza con I (por ejemplo, Interpolator) está bien y no es particularmente ambiguo.

1

Si el nombre de la clase comienza con una I, esto está bien, p. Index o Idea son ambos nombres válidos. IIndex sería un nombre de interfaz válido.

Para obtener ayuda con las convenciones, podría considerar obtener una copia de Code Complete que es una fuente de orientación increíble en muchos aspectos programáticos.

2

Sigo esta convención para la interfaz.

  1. Encuentra el método más significativo en la interfaz.
  2. Agregar capaz sufijo con él.
  3. Capital la primera letra.
  4. Añadir I prefijo

Vea el ejemplo

interface ICallable{ 
    public void call(); 
} 

ICallable = I + CapitlizeFirstLetter (llamada + poder)

Creo que la mayoría de los desarrolladores siguen a estas convenciones. Desde ese punto de vista IClass, IDone, ICall, IncomeTax etc. no son una interfaz. Pero IClassable, ICallable, ITaxable etc. respectivamente son la interfaz.

+0

En mi opinión personal, esto solo está dificultando la vida de cualquier persona que tenga que leer y comprender su código. IDone o ICall indicarán a cualquier desarrollador que son interfaces. Sin embargo, estoy de acuerdo en que la nomenclatura debe indicar el uso de la interfaz. – Digbyswift

0

se puede envolver su clase de "malos" los llamados nombres con la letra "I" mayúscula a otro Nombre Por ejemplo:

//"Bad" name class 
public class IBadClass 
{ 
    public void SomeFuncA(int i) 
    { 
    } 

    public void SomeFunctB(string str) 
    { 
    } 
} 

//"Better" name class 
public class BetterNameClass 
{ 
    private IBadClass _badClass; 

    public BetterNameClass() 
    { 
     _badClass = new IBadClass(); 
    } 

    public void SomeFuncA(int i) 
    { 
     _badClass.SomeFuncA(i); 
    } 

    public void SomeFunctB(string str) 
    { 
     _badClass.SomeFunctB(str); 
    } 
}