内部类通用类型与外部类型相同

克里斯汀·哈马克(Kristen Hammack)

我发现了一个问题,这里几乎回答我的问题,但我还是不完全了解。

尝试编写Tree数据结构,我这样做是:

public class Tree<T>
{
    public TreeNode<T> root;
    ...

    public class TreeNode<T>
    {
        List<TreeNode<T>> children;
        T data;
        public T Data { get { return data; } }

        public TreeNode<T>(T data)
        {
            this.data = data;
            children = new List<TreeNode<T>>();
        }
        ...
    }
}

而且,任何使用C#泛型的人显然都知道我收到了此编译器警告: Type parameter 'T' has the same name as the type parameter from outer type 'Tree<T>'

我的意图是创建一个内部类,该类将被迫使用与外部类相同的类型,但是我现在知道,添加类型参数实际上可以使内部类更加灵活。但是,就我而言,我希望的子类Tree<T>能够使用TreeNode,例如,如下所示:

public class IntTree : Tree<int>
{
    ...
    private static IntTree fromNode(TreeNode<int> node)
    {
        IntTree t = new IntTree();
        t.root = node;
        return t;
    }
}

(该方法允许子类ToString()递归实现

所以我的问题是,如果我删除参数化,像这样:

public class Tree<T>
{
    public TreeNode root;
    ...

    public class TreeNode
    {
        List<TreeNode> children;
        T data;
        public T Data { get { return data; } }

        public TreeNode(T data)
        {
            this.data = data;
            children = new List<TreeNode>();
        }
        ...
    }
}

创建TreeNodes时,结果子类是否会被迫使用整数,因此永远无法破坏我的意图?

免责声明:是的,我知道我可能在这里做错了很多事情。我仍在学习C#,主要是Java和Lisp的背景知识,并带有一点普通的C语言。因此,欢迎提出建议和解释。

雷内·沃格特(Rene Vogt)

是的,它将被迫使用相同的类型。再看一下声明:

public class Tree<T>
{
    public class TreeNode
    {
        private T Data;
    }
}

因此,Data实例化特定对象时将确定的类型Tree

var tree = new Tree<int>();

这样,的类型Data被声明为int和可以相同。

请注意,没有非泛型TreeNode类。只有一种Tree<int>.TreeNode类型:

Tree<int> intTree = new Tree<int>(); // add some nodes
Tree<int>.TreeNode intNode = intTree.Nodes[0]; // for example

Tree<string> stringTree = new Tree<int>(); // add some nodes
Tree<string>.TreeNode stringNode = stringTree.Nodes[0]; // for example

// ERROR: this won't compile as the types are incompatible
Tree<string>.TreeNode stringNode2 = intTree.Nodes[0]; 

Tree<string>.TreeNode是一个不同类型的比Tree<int>.TreeNode

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型为内部类的通用数据类型数组创建

来自分类Dev

Android:以编程方式检查外部或内部类型的目录路径

来自分类Dev

内部匿名类的外部类的调用函数(与外部类相同)

来自分类Dev

如何在外部类中声明实例变量(内部类类型)?

来自分类Dev

从匿名指针类型检索内部类型

来自分类Dev

如何获取模板类型的内部类型?

来自分类Dev

内部类/接口中定义的泛型类型是否绑定到外部类的泛型类型定义?

来自分类Dev

为什么我不能使外部类型看起来像c ++中的内部类型?

来自分类Dev

通用可比内部类

来自分类Dev

使用内部类作为类型参数

来自分类Dev

Scala:比较内部类对象的类型

来自分类Dev

比较打字对象的外部类型

来自分类Dev

如何处理外部类型?

来自分类Dev

如何在Scala中创建通用列表monoid来维护所涉及列表的内部类型?

来自分类Dev

如何使用内部类型在fortran 90/95中进行一些通用编程

来自分类Dev

从外部类通过内部类实例访问外部类字段

来自分类Dev

为什么在外部参数化类中创建一个数组,其中组件类型是被视为“通用数组创建”的内部类?

来自分类Dev

与外部类同名的内部类?

来自分类Dev

内部类与外部类的构建器模式?

来自分类Dev

从内部类调用外部类的同步方法

来自分类Dev

内部类访问外部类的嵌套枚举

来自分类Dev

从内部类对象访问外部类函数

来自分类Dev

方式,通过外部类调用内部类

来自分类Dev

内部类访问外部类的嵌套枚举

来自分类Dev

从内部类访问外部类的字段

来自分类Dev

从内部类对象访问外部类函数

来自分类Dev

从内部类调用外部类的同步方法

来自分类Dev

为什么新类型不使用内部类型的特征?

来自分类Dev

Java的匿名内部类调用封装类型的超类型的方法

Related 相关文章

  1. 1

    类型为内部类的通用数据类型数组创建

  2. 2

    Android:以编程方式检查外部或内部类型的目录路径

  3. 3

    内部匿名类的外部类的调用函数(与外部类相同)

  4. 4

    如何在外部类中声明实例变量(内部类类型)?

  5. 5

    从匿名指针类型检索内部类型

  6. 6

    如何获取模板类型的内部类型?

  7. 7

    内部类/接口中定义的泛型类型是否绑定到外部类的泛型类型定义?

  8. 8

    为什么我不能使外部类型看起来像c ++中的内部类型?

  9. 9

    通用可比内部类

  10. 10

    使用内部类作为类型参数

  11. 11

    Scala:比较内部类对象的类型

  12. 12

    比较打字对象的外部类型

  13. 13

    如何处理外部类型?

  14. 14

    如何在Scala中创建通用列表monoid来维护所涉及列表的内部类型?

  15. 15

    如何使用内部类型在fortran 90/95中进行一些通用编程

  16. 16

    从外部类通过内部类实例访问外部类字段

  17. 17

    为什么在外部参数化类中创建一个数组,其中组件类型是被视为“通用数组创建”的内部类?

  18. 18

    与外部类同名的内部类?

  19. 19

    内部类与外部类的构建器模式?

  20. 20

    从内部类调用外部类的同步方法

  21. 21

    内部类访问外部类的嵌套枚举

  22. 22

    从内部类对象访问外部类函数

  23. 23

    方式,通过外部类调用内部类

  24. 24

    内部类访问外部类的嵌套枚举

  25. 25

    从内部类访问外部类的字段

  26. 26

    从内部类对象访问外部类函数

  27. 27

    从内部类调用外部类的同步方法

  28. 28

    为什么新类型不使用内部类型的特征?

  29. 29

    Java的匿名内部类调用封装类型的超类型的方法

热门标签

归档