E 'possibile avere la classe di 2 Base, che già eredita da qualcosa di ereditare o conosci una terza classe comune?

StackOverflow https://stackoverflow.com/questions/1563804

Domanda

Ho 2 della classe

Classe 1.

public class BaseContentPage : System.Web.UI.Page
{

}

Classe 2.

public class BaseUserControl : System.Web.UI.UserControl
{


}

E ora voglio che siano a conoscenza di questa classe.

public class BaseCommon 
{
  public string Variable1 { get; set; }
  public string Variable2 { get; set; }
  public string Variable3 { get; set; }
}

Come Attualmente sto facendo è per rendere le variabili della classe BaseCommon statica in questo modo

public static string Variable1 { get; set; }
public static string Variable2 { get; set; }
public static string Variable3 { get; set; }

In quale altro modo posso fare questo?

È stato utile?

Soluzione

Usa composizione.

Dare BaseContentPage e BaseUserControl un campo privato (che può essere esposto come una proprietà se necessario) di tipo BaseCommon (non renderlo statico).

Si possono creare BaseCommon o hanno un'istanza passata attraverso il costruttore (Dependency Injection).

Altri suggerimenti

Prima di tutto, non credo che si desidera le proprietà BaseCommon essere statico. Le proprietà sono quindi globale attraverso l'applicazione in modo da cambiare da un'istanza li cambierà per tutte le istanze.

Che cosa stai parlando è ereditarietà multipla e non è supportato da c #. Si sarebbe meglio cambiando BaseCommon di essere un'interfaccia e avendo BaseContentPage e BaseUserControl implementano tale interfaccia.

Se sono statici, vuol dire che questa terza classe è una risorsa globale? Si potrebbe guardare a Singleton o IoC container o passare l'istanza alle altre classi quando costruito.

È necessario dare esempi più concreti di ciò che questo comune "base" di dati che si sta aggiungendo a due diverse parti del vostro albero oggetto eredità sono.

In teoria, dire ogni istanza in realtà solo ha dati simili (un esempio sto pensando è l'internazionalizzazione, per esempio, che viene utilizzato per personalizzare sia una pagina e un UserControl in base agli ID frase, ecc, che sono specifici nel contesto), allora che cosa si può fare è avere una classe che implementa I18nSettings II18nSettings. Poi in ogni classe, incapsulare un'istanza I18nSettings e attuare II18nSettings e passarle. In alternativa, è possibile esporre l'istanza I18nSettings interna. Ho anche appena definito un'interfaccia e aveva ogni classe attuarla -. Non era la pena di avere una classe separata a tutti

Ci sono altre opzioni per fare questo genere di cose - dipende dal fatto che le classi concrete che si sta eredita da implementare le cose molto più utile di quanto le cose che si sta aggiungendo. Si potrebbe avere più senso di ereditare dalla classe concreta e implementare altre interfacce in modo che la classe può essere utilizzato in altri luoghi.

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