c# - sirve - ¿Cómo manejar el mismo nombre de clase en diferentes espacios de nombres?
un espacio de nombres no puede contener directamente miembros como campos o métodos (8)
¿Si hago eso, tendré que especificar el nombre completo del espacio de nombres antes de mi clase estática para poder acceder a él?
No, no hay necesidad de eso, aunque los detalles dependen de la clase que usará estos tipos y las declaraciones de using
que tiene.
Si solo usa uno de los espacios de nombres en la clase, no hay ambigüedad y puede seguir adelante y usar el tipo.
Si usa ambos espacios de nombres, tendrá que calificar completamente los usos o usar aliases espacio de nombres / tipo para desambiguar los tipos.
using ERPUtils = MyCompany.ERP.Utilities;
using BCUtils = MyCompany.Barcode.Utilities;
public void MyMethod()
{
var a = ERPUtils.Method();
var b = BCUtils.Method();
}
Estoy tratando de crear una estructura de biblioteca común. Estoy haciendo esto creando proyectos separados para cada biblioteca común que quiero
Tengo los siguientes 2 espacios de nombres: MyCompany.ERP y MyCompany.Barcode
Necesito que ambos tengan una clase llamada "Utilidades" y sean estáticos. Si hago eso, tendré que especificar el nombre completo del espacio de nombres antes de mi clase estática para poder acceder a él.
¿Hay alguna otra forma preferida de hacerlo?
¿O debería ir por nombres diferentes en clases como BarcodeUtils y ERPUtils ?
"Utilidades" no es un nombre muy bueno para una clase, ya que es demasiado genérico. Por lo tanto, creo que debería cambiar el nombre de ambos a algo más informativo.
En realidad depende del propósito de tus clases. Si va a distribuir su código de barras. Las utilidades y el ERP. Por lo general, es mejor quedarse así. Por otro lado, si va a usarlos solo en la misma clase, puede usar el método 2. para facilitar el código.
Las pautas de la EM tienen lo siguiente para decir:
No introduzca nombres de tipos genéricos como Elemento, Nodo, Registro y Mensaje. Existe una alta probabilidad de que provoque conflictos de nombre de tipo en escenarios comunes.
y
No le dé el mismo nombre a los tipos en espacios de nombres dentro de un solo modelo de aplicación.
Estoy de acuerdo en que probablemente sea una buena idea usar BarcodeUtilities
y ErpUtilities
en ErpUtilities
lugar. (A menos que las clases de utilidad no estén destinadas a ser utilizadas por el código del cliente, en cuyo caso usted podría nombrarlas Utilities
y hacerlas internal
).
No hay otra manera. Puedes hacer un alias using
directivas:
using MC=MyCompany.ERP;
using MB=MyCompany.Barcode;
...
public void Test()
{
var a = MC.Utilities.Method();
var b = MB.Utilities.Method();
}
Es la forma más sencilla de gestionarlos.
Puedes usar un alias:
using BarcodeUtils = MyCompany.Barcode.Utilities;
En las páginas tienes choques. Pero lo ideal es cambiarles el nombre si esto sucede en muchos lugares.
Tendrá que usar la ruta completa cuando ambas tengan el mismo nombre. De lo contrario obtendrá un error de referencia ambiguo.
Puedes usar un alias sin embargo eso te ahorrará algo de escritura:
using Project = PC.MyCompany.Project;
Iría por un nombre diferente que sea algo más descriptivo. UNA
Yo sugeriría usar diferentes nombres de clase. Si realmente desea llamar a ambos Utilidades, entonces podría usar la función de alias en la directiva using, por ejemplo
using ERP = MyCompany.ERP;
using Barcode = MyCompany.Barcode;
...
ERP.Utilities.SomeMethod();
Barcode.Utilities.SomeMethod();