我有几个编辑。每个编辑器都有特定性,例如数据库中的特定字段类型或可编辑或不编辑。
所以我需要一个包含名称和属性的编辑器类型集合。我需要能够使用集合
填充组合框我如何声明每种类型并拥有类型列表?
我试试这个
public enum TemplateType
{TextBox,ColorPicker};
public class TabloidBaseControl
{
public static DbType DefaultFieldType { get { return DbType.String; } }
public static int? DefaultFieldLength { get { return 20; } }
public static int? DefaultFieldDecimal { get { return null; } }
}
public class TCColorPicker:TabloidBaseControl
{
public new static int? DefaultFieldLength = 7;
}
public class TCTextBox: TabloidBaseControl
{
public new static int? DefaultFieldLength = 20;
}
public static Dictionary<TemplateType, TabloidBaseControl> TabloidControlList = new Dictionary<TemplateType, TabloidBaseControl> {
{TemplateType.TextBox,new TCTextBox()},
{TemplateType.ColorPicker,new TCColorPicker() }
};
这是正确的方法吗?
答案 0 :(得分:1)
您没有正确执行类继承。在基类上使用虚拟属性,并覆盖派生类中的相应属性,如下所示:
public enum TemplateType
{TextBox,ColorPicker};
public class TabloidBaseControl
{
public virtual DbType DefaultFieldType
{
get { return DbType.String; }
}
public virtual int? DefaultFieldLength
{
get { return 20; }
}
public virtual int? DefaultFieldDecimal
{
get { return null; }
}
}
public class TCColorPicker : TabloidBaseControl
{
public override int? DefaultFieldLength
{
get { return 7; }
}
}
public class TCTextBox : TabloidBaseControl
{
public override int? DefaultFieldLength
{
get { return 20; }
}
}
是的,您的字典将始终将对象作为基类的实例返回,因为它是如何定义的。但是,对象的运行时类型将是您添加的任何派生类,因此将从属性访问器返回正确的值。