Pregunta

He leído las preguntas / respuestas explicando que hay sin herencia múltiple en C # , que nosotros ni siquiera lo necesitamos, y que causa demasiado problemas.

Ahora, estoy trabajando en un proyecto en el que realmente no entiendo cómo puedo hacer las cosas sin la herencia múltiple, sin duplicar código.

Esta es la situación. Hay un sitio web con una página de inicio y otras páginas que heredan de una masterpage (la página principal no hereda de). Tanto la página y el masterpage están realizando algunas cosas: inicio de sesión personalizado, las estadísticas, la carga de la configuración de los usuarios para la personalización, etc. Por el momento, la solución es horrible, ya que el código fuente de esas tareas se acaba de copiar dos veces .

Los hereda de la clase página de inicio de Page. El masterpage, por el contrario, se hereda de Masterpage. Lógicamente, sería muy bueno para heredar de una clase común también, pero es la herencia múltiple, por lo que es imposible.

Entonces, ¿qué hacer en su lugar?

pensé en varias formas, pero les gusta:

  • Crear un clase independiente que se llamará a partir de la clase de página / masterpage . Así, por ejemplo, en lugar de escribir bool isDisplayingTips = this.CurrentUser.IsDisplayingTips, me gustaría escribir bool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTips. No me gusta ella, ya que es más tiempo para escribir.

  • Crear un "verdadero", vaciar, masterpage común , y heredan tanto la página principal y la masterpage de ella. No sólo se requerirá para escribir más código para parámetros de acceso masterpage, pero también se ralentizará las cosas, lo que requiere un masterpage adicional en cada petición.

¿Alguna idea?

¿Fue útil?

Solución

MasterPage es simplemente un control (que se incrustan en la página real) por lo que no se puede tener el enfoque más tarde. Sin embargo, el primer enfoque de crear otra clase de ayuda es bastante factible.

Sin embargo, otro enfoque que normalmente uso es tener

  1. clase de página de base común -. Todas las páginas heredarán de la página base común
  2. Poner funcionalidad común en la clase base de la página
  3. En la página principal, la página de base puede ser referido por fundición - por ejemplo, myBasePage = (BasePage)this.Page;. Esta página maestra manera puede acceder a la funcionalidad común de clase de página de base.

Otros consejos

no encuentro su segunda opción que dislikable.

supongo que se trata de crear una clase base, por ejemplo, MasterPageBase, derivado de System.Web.UI.MasterPage, y creando un MasterPage vacío para su página de inicio, que heredará de este MasterPageBase.

Si el derecho de hacer, no debe retrasar las cosas ...

Le sugiero que utilice el primero de su opción. Si (comprensiblemente) no se sienten cómodos con un mayor nivel de indirección, sólo podría crear nuevos métodos en su classe independiente, por ejemplo:

public bool IsDisplayingTips(){
    return CurrentUser.IsDisplayingTips;
}

y la de sus páginas a llamarlo

bool isDisplayingTips = this.SharedObjects.IsDisplayingTips()

Uso:

clase independiente que se llamará desde la página / clase masterpage

, pero en lugar de detenerse allí, agregar una página de base y una página maestra de base. Tanto el uso de la clase compartida, y mantener el código de las páginas específicas / páginas maestras de la vía indirecta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top