2011-02-15 16 views
5

¿Es posible crear un alias para los tipos existentes y usar ese alias en todo el proyecto?Alias ​​en .NET

Por ejemplo, cree

CustomerID = System.UInt32 

y el uso de cliente como un tipo de datos?

Versión: .NET Framework 4.0

(Con el "uso de" palabras clave que sería capaz de crear un alias, pero no es útil, ya que no funciona a través de los archivos.)

Cualquier otro ideas?

+1

La razón por la que tiene el uso de la palabra clave 'using' en un espacio de nombres es porque es una muy mala idea crear un' uso global '. Imagine que otra persona usa un tipo 'CustomerID' en un contexto diferente y devuelve un entero sin signo en lugar del tipo esperado. Al restringirlo solo a un espacio de nombres, previene contra este tipo de colisión. –

Respuesta

4

Creo que la respuesta correcta a esta pregunta es:

No, eso no es posible (por desgracia?). :(


Edición 1: Sin embargo, que puede (tipo de) simular esta haciendo su propio struct y proporcionar conversiones implícitas a/desde el tipo que desea No es exactamente mágica pero. podría funcionar, dependiendo de la situación


Edición 2:.. no he utilizado alguna vez esta característica antes, pero type forwarding podría ser útil Solo transmite a toda otra asamblea, aunque, por lo Probablemente no funcionará para casos simples.

+0

Pensado en la estructura/registro como una solución, ¿hay alguna idea más inteligente? – Pavan

+0

Creo que es bastante inteligente. – JimDaniel

0

Esto no parece posible. Sin embargo, ¿por qué razón quieres hacer esto?

Si el motivo es legibilidad, considere lo siguiente:

Ya puede utilizar sus identificadores para indicar que es, por ejemplo, a customerID. Lo que básicamente está haciendo al intentar cambiar el nombre de UInt32 a CustomerID, lo está haciendo parecer un nuevo tipo. Solo cuando un tipo necesita comportamientos o valores adicionales, es útil considerarlo como un tipo "nuevo". Si alguna vez se desarrolló en C++, puede apreciar la convención causada por no permitir esto en C#. Sabes qué esperar de un UInt32.

Si el motivo está prepararse para cambios:

P. ej supongamos que después de un tiempo usted decide que también desea admitir identificaciones negativas. Esto debería resolverse encapsulando este posible comportamiento esperado en un nuevo tipo. Por lo tanto, no es necesario cambiar el nombre.

+1

Otra razón es la seguridad del tipo agregado. Imagine que tiene un método 'GetItem (uint customerID, uint itemID)'. Alguien podría poner accidentalmente los argumentos en el camino equivocado.Sin embargo, si usa tipos nuevos, como 'GetItem (CustomerID ID de cliente, ItemID itemID)', mezclar los argumentos será un error en tiempo de compilación. – porges