代码之家  ›  专栏  ›  技术社区  ›  IAbstract

当myNestedClass不是myNestedClass时返回myNestedClass<k>?

  •  0
  • IAbstract  · 技术社区  · 15 年前

    分解ms-rbtree(内部.NET抽象类),我发现有一个方法返回 TreePage<K> :

    private TreePage<K> AllocPage(int size)
    {
        ...
    }
    

    在方法中,变量被声明为treepage…但类没有以这种方式定义:

    private sealed class TreePage
    {
        ...
    }
    

    但是,当我使用.NET 2010(Express)模拟代码和定义时,我不能这样做:

    错误:非泛型类型 “rbtree.treepage”不能使用 带类型参数

    那么,有没有我找不到的扩展方法?有什么是微软正在做的,我们只是看不到?

    2 回复  |  直到 15 年前
        1
  •  4
  •   dtb    15 年前

    当声明嵌套在泛型类中的类时

    class Foo<T>
    {
        class Bar
        {
        }
    }
    

    它被编译成一个类

    Foo<T>
    

    和一个班

    Foo+Bar<T>
    

    条是通用的,因为它嵌套在通用类foo中。但是类型参数声明在C中不会重复(在这里您将类称为foo<t>.bar)。

    我注意到Reflector显示了嵌套在泛型类型中的类的泛型类型参数,即使它们没有直接声明任何类型参数。那是个虫子。当直接从反射镜中复制代码时,需要修复代码。

        2
  •  0
  •   Logan Capaldo    15 年前

    实际上比你想象的要简单。 Klass Klass<T> 是两种完全不同的类型。也就是说:

      class A
      {
      }
    
      class A<T>
      {}
    
      class Program
      {
        static public void Main(string[] args)
        {
          A a = new A();
          A<int> generic_a = new A<int>();
        }
      }
    

    还有一个 TreePage<T> 漂浮在那里的某个地方。