我有以下类层次结构
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");
}
答案 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 + ",";
}
}
重要的是要注意,如果子类覆盖了该功能,那么当前如何将所声明的方法声明为公共虚拟,可能并不总是被调用。