2010-02-27 18 views

Respuesta

22

Básicamente solo lo necesita cuando quiere usar dos tipos con el mismo nombre completo (el mismo espacio de nombres, el mismo nombre) de diferentes ensamblajes. Usted declara un alias diferente para cada ensamblaje, por lo que puede hacer referencia a ellos a través de ese alias.

hace falta decir que usted debe tratar de evitar caer en esa situación para empezar :)

Anson Horton tiene un good blog post al respecto.

+0

Solo para agregar, incluso después de agregar extern declaración de alias en la parte superior del archivo comsumer * .cs, el compilador de manera predeterminada no busca el tipo que estoy usando (que está presente en ese ensamblaje). El comportamiento predeterminado de Compiler siempre es buscar clases y tipos en el actual y ensambles a los que se hace referencia que tienen alias 'global'. Terminé utilizando un nombre de tipo completo que comienza con el nombre de alias externo, por ejemplo mi declaración de alias externa era 'extern alias WidgetsVendor1;' y todavía estaba escribiendo código como 'var wid = new WidgetsVendor1.Widgets.Widget();'. No puedo simplemente hacer -'var wid = new Widgets.Widget() ; ' – RBT

+1

@RBT: No, solo * declara * el alias. Pero podría tener 'usando WidgetsVendor1.Widgets;' y escribir 'var wid = new Widget();'. –

+0

ohh. ¡Interesante! No lo sabía. Publiqué mis comentarios sobre la base de mi observación que tuve en la mañana. Es bueno saberlo. Puedo importar los espacios de nombres dentro del alias externo usando la palabra clave 'using'. Gracias. – RBT

23

Está ahí para ayudarte a salir de un pozo realmente profundo excavado por el control de versiones. Supongamos que su primera versión de su programa usa esta clase

using System; 

namespace Acme.Financial.Banking { 
    [Serializable] 
    public class BankAccount { 
    public double Balance { get; set; } 
    //... 
    } 
} 

Y ha estado serializando muchos registros de cuentas bancarias con ella. Y un contador comienza a quejarse sobre el balance de estar fuera por una mil millonésima parte de un centavo, por lo que cambiar la clase:

public decimal Balance { get; set; } 

Problema resuelto, el próximo cliente tiene balances felices. Hasta que se le solicite que actualice un cliente existente con muchos registros serializados en el formato anterior. Gran problema, ya no se pueden deserializar los registros ya que la clase ha cambiado.

extern alias resuelve su problema, puede hacer referencia tanto a la versión anterior como a la nueva versión de la clase en su código, aunque los nombres del espacio de nombres y de clase sean los mismos.

+1

Muy útil caso de uso para usar alias extern. – RBT

Cuestiones relacionadas