C#设计问题 - 静态变量?

时间:2009-03-13 16:40:52

标签: c#

我有以下类层次结构

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
  }
}

在继承自BaseClass

的用户控件中
public void ProcessParams()
{
  base.Process("type1");
  base.Process("type2");
}

5 个答案:

答案 0 :(得分:1)

除非你想在所有实例中存储params,否则我会避免在静态中执行此操作。您可以向基类添加集合,或者将IEnumerable作为Process()的参数。

答案 1 :(得分:0)

此外,您可以使用Singleton模式。

答案 2 :(得分:0)

我不确定你特意想要完成什么,但我认为没有任何静态变量的原因。

答案 3 :(得分:0)

如果你有基于实例的子类(无论它们是否是UserControls),那么你不想使用静态字段。您将需要使用实例字段,以便Process()方法在上下文中为每个单独的用户控件返回适当的值。

如果希望Process()的返回值在BaseClass的所有子类实例中相同,请使用静态字段。希望这有帮助!

答案 4 :(得分:0)

要创建传递给基类的Process方法的所有字符串的单个列表,您需要一个静态成员。

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 + ",";
  }
}

重要的是要注意,如果子类覆盖了该功能,那么当前如何将所声明的方法声明为公共虚拟,可能并不总是被调用。