【问题标题】:how to copy custom properties when making clone克隆时如何复制自定义属性
【发布时间】:2012-04-08 15:52:01
【问题描述】:

我正在“winforms”应用程序中使用 C# 3.5 开发“DataGridView”。

我有一个自定义列是“MaskTextColumn”,我有一些自定义属性,例如:Mask, “PromptChar”等

当我克隆“MaskTextColumn”时,我的客户属性不会复制到新对象,我想使用自定义属性值进行克隆。

【问题讨论】:

    标签: c# winforms clone datagridviewcolumn customcolumn


    【解决方案1】:

    您应该覆盖克隆方法以包含您的自定义属性。正如link 所说,

    当覆盖 Clone ... 确保同时复制任何 添加到派生类的属性。

    代码如下:

    public override Object Clone()
    {
        object clonedObject = base.Clone();
        MaskTextColumn clonedColumn = clonedObject as MaskTextColumn;
        clonedColumn.PromptChar = this.PromptChar;
        // .. more property settings here
        return clonedColumn;
    }
    

    【讨论】:

      【解决方案2】:

      您需要在自定义派生类中重写 Clone 方法。

      类似这样的:

      public override object Clone() 
      {
          var clonedColumn = base.Clone() as CustomColumn;
          clonedColumn.CustomProp = this.CustomProp;
          return clonedColumn;
      }
      

      【讨论】:

      • 我认为这行不通。 base.Clone() 的返回值将是一个 MaskTextColumn,因此 as CustomColumn 将使 clonedColumn 变量为 null,下一行将抛出 NullReferenceException。
      • 此方法将在 CustomCell 类中应用,其中 base.Clone() 将返回类的对象
      猜你喜欢
      • 2011-10-13
      • 2018-04-20
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2015-05-21
      • 2016-08-05
      相关资源
      最近更新 更多