2009-03-13 10 views
0

Ich habe die folgende KlassenhierarchieC# Designfrage - Static var?

public abstract BaseClass : System.Web.UI.UserControl 
{ 

    public virtual void Process(string sType) 
    { 
    //Do something 
    //Here I want to create a CSV list Ex: "type1, type2" 
    //Do I need to create a static variable? There might be several controls calling //Process. I need to scope it to the UserControl 
    } 
} 

In einer Benutzersteuerung, die von Baseclass erbt

public void ProcessParams() 
{ 
    base.Process("type1"); 
    base.Process("type2"); 
} 

Antwort

1

würde ich tun dies in einem statischen vermeiden, es sei denn, Sie params aus über alle Instanzen hinweg gespeichert werden sollen. Sie könnten Ihrer Basisklasse eine Auflistung hinzufügen oder IEnumerable als Parameter für Process() verwenden.

0

Außerdem könnten Sie das Singleton-Muster verwenden.

0

Ich bin mir nicht sicher, was Sie gerade erreichen wollen, aber ich sehe keinen Grund für statische Variablen.

0

Wenn Sie auf Instanzen basierende Unterklassen haben (unabhängig davon, ob sie Benutzersteuerelemente sind oder nicht), dann möchten Sie keine statischen Felder verwenden. Sie möchten Instanzfelder verwenden, damit Ihre Process() -Methode die entsprechenden Werte für jedes einzelne Benutzersteuerelement kontextabhängig zurückgibt.

Verwenden Sie statische Felder, wenn der Rückgabewert von Process() für alle Unterklasseninstanzen Ihrer BaseClass identisch sein soll. Hoffe das hilft!

0

Um eine einzelne Liste aller Strings zu erstellen, die an die Process-Methode der Basisklasse übergeben werden, benötigen Sie ein statisches Member.

public abstract BaseClass : System.Web.UI.UserControl 
{ 
    private static List<string> collection = new List<string>(); 
    private static string csvString = String.Empty; 
    public virtual void Process(string sType) 
    { 
    //to create a list 
    collection.Add(sType); 
    //Or to create just a csv string 
    csvString += sType + ","; 
    } 
} 

Es ist wichtig zu beachten, wie Sie die Methode deklariert derzeit haben, als öffentliche virtuelle, nicht immer aufgerufen werden, wenn ein Kind Klasse die Funktionalität außer Kraft setzt.