Domanda

Ho letto le domande / risposte spiegando che non c'è l'ereditarietà multipla non in C # , che non abbiamo nemmeno bisogno, e che provoca troppi problemi.

Ora, sto lavorando su un progetto in cui io non capisco come posso fare le cose senza l'ereditarietà multipla, senza duplicare il codice.

Ecco la situazione. C'è un sito web con una home page e le altre pagine che ereditano da un masterpage (la home page non eredita da). Sia la pagina e masterpage stanno effettuando alcune cose: di login personalizzato, statistiche, caricamento delle impostazioni di personalizzazione degli utenti, ecc Per il momento, la soluzione è pessima, in quanto il codice sorgente per questi compiti è solo copiato due volte .

I eredita classe home page da Page. Il masterpage, d'altra parte, eredita da Masterpage. A rigor di logica, sarebbe bello ereditare da una classe comune troppo, ma è l'ereditarietà multipla, quindi è impossibile.

Quindi, cosa fare, invece?

ho pensato a diversi modi, ma le piacciono:

  • Crea un class standalone che sarà chiamato dalla classe Page / masterpage . Così, per esempio, invece di scrivere bool isDisplayingTips = this.CurrentUser.IsDisplayingTips, vorrei scrivere bool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTips. Non mi piace che, dal momento che è più tempo per scrivere.

  • Crea un "vero", svuotare, masterpage comune , ed ereditano sia la home page e masterpage da esso. Non solo sarà necessario scrivere codice più ai parametri di accesso MasterPage, ma sarà anche rallentare le cose, che richiedono un masterpage aggiuntivo su ogni richiesta.

Qualche idea?

È stato utile?

Soluzione

MasterPage è un solo comando (che vengono incorporati nella pagina reale), quindi non si può avere l'approccio seguito. Tuttavia, primo approccio della creazione di un'altra classe di supporto è abbastanza fattibile.

Ancora un altro approccio che abbiamo in genere l'uso è di avere

  1. pagina di base comune di classe -. Tutte le pagine erediteranno dalla pagina base comune
  2. Mettere funzionalità comuni nella classe di pagina di base
  3. Dalla pagina principale, la pagina di base può essere definito dalla fusione - per esempio, myBasePage = (BasePage)this.Page;. Questa pagina master modo può accedere a funzionalità comuni dalla classe pagina di base.

Altri suggerimenti

non trovo la tua seconda opzione che antipatico.

I presume vuoi dire la creazione di una classe di base, ad esempio, MasterPageBase, derivato da System.Web.UI.MasterPage, e la creazione di un MasterPage vuoto per la tua home page, che erediterà da questo MasterPageBase.

Se il diritto a farsi, non dovrebbe rallentare le cose ...

Vi suggerisco di usare il primo della vostra opzione. Se (comprensibilmente) non si sentono bene con aumento del livello di riferimento indiretto, si può solo creare nuovi metodi sulla vostra classe standalone, per esempio:

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

e dalle tue pagine basta chiamare

bool isDisplayingTips = this.SharedObjects.IsDisplayingTips()

Usa:

  

classe autonoma che si chiamerà   dalla pagina / classe masterpage

ma invece di fermarsi lì, aggiungere una pagina di base e una pagina master di base. Sia l'uso della classe condiviso e mantenere il codice pagine specifiche / pagine master dal indirezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top