static typed object可枚举集合声明

时间:2018-02-07 17:31:48

标签: c# class static declaration

我有几个编辑。每个编辑器都有特定性,例如数据库中的特定字段类型或可编辑或不编辑。

所以我需要一个包含名称和属性的编辑器类型集合。我需要能够使用集合

填充组合框

我如何声明每种类型并拥有类型列表?

我试试这个

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

    };

这是正确的方法吗?

1 个答案:

答案 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; }
  }
}

是的,您的字典将始终将对象作为基类的实例返回,因为它是如何定义的。但是,对象的运行时类型将是您添加的任何派生类,因此将从属性访问器返回正确的值。