C#泛型类定义自动属性

问题描述 投票:0回答:2

我在C#中新,我完成这本书“微软的Visual C#2013分步实施”由约翰·夏普写的。练习,关于“仿制药”,我发现这个代码:

public class Tree<TItem> where TItem : IComparable<TItem>
{
    public TItem NodeData { get; set; }
    public Tree<TItem> LeftTree { get; set; }
    public Tree<TItem> RightTree { get; set; }

    public Tree(TItem nodeValue)
    {
        this.NodeData = nodeValue;
        this.LeftTree = null;
        this.RightTree = null;
    }

    public void Insert(TItem newItem)
    {
        TItem currentNodeValue = this.NodeData;
        if (currentNodeValue.CompareTo(newItem) > 0)
        {
            // Insert the new item into the left subtree
            // code here....
        }
        else
        {
            // Insert the new item into the right subtree
            // code here....
        }
    }

}

我不明白为什么他定义在不同模式下的性能。有人是这样:

public TItem NodeData { get; set; }

和其他人在此:

public Tree<TItem> LeftTree { get; set; }
public Tree<TItem> RightTree { get; set; }

有人可以解释我为什么?谢谢

c# generics properties
2个回答
2
投票

这些特性被用于不同的事情。正如其名称提示:

  • NodeData是用来方便存储在树中的信息。
  • LeftTree / RightTree在那里,以便于树的拓扑结构 - 每个当前对象(节点)基本上是在本身为根的树的根。所以,因为它是一个二叉树,它有两个直接的后裔 - 左,右节点。

哪里哪里泛型前来游玩的部分是关于什么是那种在树中存储的数据。所以NodeData是平凡的“类型” TItem。左,右节点类型Tree<TItem>这样保证在树它是存储数据的TItem类型的任何深度。

为了使它更简单的让假设你想创建一个整数的二叉树。然后,你就通过模型:

public class Tree 
{
    public int Data { get; set; }
    public Tree Left {get; set; }
    public Tree Right {get; set; }
}

我想,这样你才能真正看到的是什么DataLeft之间的根本区别,Right性能。


0
投票

他定义了一棵树。所述NODEDATA属性是当前节点值。然后,如果该值大于当前节点时,新的值被放在左边,否则在右边。如果LeftValue和RightValue的类型是树,这是有父子结构。该类允许创建像二叉树的数据结构。

© www.soinside.com 2019 - 2024. All rights reserved.