2

我有这个:

public abstract class DRT_Tvw_Abstract : TreeView
{
    TableCountMetrics metrics;
    public TableCountMetrics Metrics { get => metrics; set => metrics = value; }

    public class TableCountMetrics
    {
        int schemaNameCount = 0;
        int tableNameCount = 0;

        public int SchemaNameCount { get => schemaNameCount; set => schemaNameCount = value; }
        public int TableNameCount { get => tableNameCount; set => tableNameCount = value; }
    }

    public DRT_Tvw_Abstract() : base()
    {
    }
}

public class DRT_Tvw_TableList_Unfiltered : DRT_Tvw_Abstract
{
    public DRT_Tvw_TableList_Unfiltered() : base()
    {
    }

    public void _CreateTreeView(DataTable dataTable)
    {
        tableListTreeViewNode = new {treeview node from my class that derives from TreeNode}

        Nodes.Add(tableListTreeViewNode);       
}

我想要做的是override方法Add,这样我就可以同时增加/减少属于我的类的自定义整数DRT_Tvw_Abstract属性。我开始尝试从类派生,但这似乎是一个死胡同,因为我无法弄清楚该类的有效 ctor 是什么AddTreeNodeTreeNodeCollectionTreeNodeCollection

Nodes(如Nodes.Add)是一个属性。我如何从中派生,以便我可以覆盖该Add方法?我首先为此 poprperty 创建了一个覆盖,但我不知道如何Add从属性覆盖代码中覆盖一个方法 ()。

public new virtual TreeNodeCollection Nodes
{

    //override the Add method from within here somehow?

    get
    {
        return base.Nodes;
    }

    set
    {
    }
}

重写 TreeNodeCollection 类 Add(TreeNode) 方法的语法是什么?

4

1 回答 1

4

Add方法属于TreeNodeCollection类。如果您喜欢Add使用新签名的新方法:

  • 自然地,您可能会考虑派生和定义新方法,并从新的自定义节点集合中TreeNodeCollection派生TreeView并替换它。TreeNodeCollection但不要尝试这个解决方案。TreeNodeCollection没有公共构造函数。所以我建议创建Extension Methods

  • 您可能会想到的另一个解决方案是派生TreeView并添加新Add方法到派生的TreeView.

示例 - 扩展方法

创建一个新的代码文件并复制以下代码并将其粘贴到代码文件中:

namespace MyExtensions
{
    using System.Windows.Forms;
    public static class TreeNodeCollectionExtensions
    {
        //Just an example of a new signature, use the signature that you need instead:
        public static TreeNode Add(this TreeNodeCollection nodes, string text, int tag)
        {
            var node = nodes.Add(text);
            node.Tag = tag;
            return node;
        }
    }
}

然后在要使用新Add方法的类中,首先添加 using 语句:

using MyExtensions;

然后像普通方法一样使用它:

treeView1.Nodes.Add("One", 1);
于 2018-06-28T18:51:00.997 回答