Para decirlo brevemente, no puedes hacer eso.
Como ve, el directorio "MasterType" proporciona tipo información, que el compilador usa en tiempo de compilación.
Cuando escribe algo como Page.MasterPage.btn1.Text = "abcd"
, el compilador necesita saber cómo manejar esa parte "btn1". ¿Qué es? Es un campo? ¿Una propiedad? ¿Un método? Una clase anidada? O tal vez no existe en absoluto? Para responder a estas preguntas, el compilador necesita saber tipo de la expresión Page.MasterPage
. Y eso es exactamente lo que usted proporciona con la directiva "MasterType".
El atributo VirtualPath básicamente dice "ir a compilar ese otro archivo primero, y el resultado de su compilación será el tipo de propiedad maestra de esta página". Así es como el compilador sabe.
De todo lo anterior, se puede sacar una conclusión: no solo es imposible cambiar el tipo de alguna propiedad en tiempo de ejecución, sino que tampoco tiene ningún sentido: el código ya se ha compilado, no se puede ¡necesita más información en tiempo de compilación!
Así que la siguiente pregunta que surge es: ¿por qué querías hacer esto en primer lugar?
Si solo desea utilizar diferentes propiedades que están declaradas en diferentes páginas maestras, puede seguir los consejos de Nick Craver y Nathan Taylor y declarar una clase base que tendría todos esos campos/propiedades y heredaría todas sus páginas maestras de esa clase base, y luego haga que su directiva MasterType especifique esa clase base a través del atributo TypeName.
Sin embargo, yo solo iría de esta manera si ambas páginas maestras son similares en lógica, solo diferentes en diseño. Es decir, una página no debería tener ninguna propiedad que la otra no tenga. De lo contrario, simplemente no es correcto tener dos subconjuntos de propiedades/métodos/campos en una clase (que será la clase base) cuando solo se usa uno de esos subconjuntos en cualquier momento. Y no es correcto crear una base común para dos clases cuando en realidad no existe una base común. Aka "mal diseño". En este caso, probablemente debería reconsiderar su diseño inicial.
Si su propósito es otro - por favor explique, y trataré de encontrar algunas soluciones para usted.
Buena suerte con eso.
Althoght que han dado una respuesta agradable que no era la solución. Pero dado que es muy útil para otros visitantes, voy a marcarlo como Userfull. :) – Marco
No es una solución, porque no hay ninguna. :-) Y en mi respuesta, intento explicar cuidadosamente por qué. –