2008-10-06 21 views
6

He heredado un 'botón' de la clase C# (que no puedo cambiar) que choca con la clase BCL 'Windows.Forms.Button'. Normalmente, la identificación esté muy feliz de ir:C# Resolución de alcance predeterminada

Pero hay un gran número o referencias a esta clase que es un fastidio tener que volver a escribir.

¿Hay alguna forma de hacer que el compilador (enlazador?) Use de forma predeterminada la versión personalizada de Button sobre la versión BCL?

Respuesta

21

añadir esto a la parte superior del archivo:

using MyButton = MyPackage.MyClass.Button; 

Ahora se puede hacer referencia al botón personalizado usando un nombre distinto. Es posible que deba hacer algo similar para el botón de stock si lo usa en cualquier lugar del mismo archivo.

+0

Esto fue bueno de ver. No creo que funcionó en versiones anteriores de .NET y no sabía que se había agregado. –

+0

Funciona desde al menos 2.0 en adelante. –

+0

En realidad, creo que este tipo de aliasing ha estado disponible desde C# 1.0. Se trata de alias de espacio de nombres (por ejemplo, alias :: typename) que se introdujo en C# 2.0. –

2

Puede quitar using Windows.Forms; desde la parte superior del código. Eso, por supuesto, significa que tendría que hacer referencia a todos los elementos de Windows.Forms específicamente.

+0

Bonita idea, aunque dado el resto de la funcionalidad de las clases, ¡me deja en la misma posición que antes! –

0

Al menos puede hacer que sea un pequeño poco menos dolorosa/prolijo con el "uso":

using MPMC = MyPackage.MyClass; 

entonces se puede decir:

MPMC.Button 
4

si desea utilizarlo de forma predeterminada, reemplazar

using Windows.Forms; 

con

using MyPackage.MyClass; 

Si lo hace, deberá calificar completamente todos los botones de Windows.Forms.

O, si se quiere, se puede crear un alias del espacio de nombres

using My = MyPackage.MyClass; 
//... then 
My.Button b = ... 

o alias el botón

using MyButton = MyPackage.MyClass.Button; 
0

Parece que puedo hacer lo siguiente:

using Button = MyPackage.MyClass.Button; 

funciona y conserva todas las referencias dentro del código a Button. Aunque estoy tentado de no seguir esta ruta, ya que todavía es ambiguo (al menos para el lector) qué botón está siendo utilizado.

+0

Léelo de nuevo: puede establecer su propio nombre para la clase de botón que es diferente del botón. –

+0

Soy consciente de eso. Sin embargo, debido a la naturaleza ya horrible de la base de código, pensé que sería mejor seguir con los nombres que ya están allí, por ejemplo.'Botón' en lugar de otro nombre, p. 'CustomButton'. Aunque podría estar en lo correcto, está sugiriendo un nombre único. –

Cuestiones relacionadas