当前位置:  开发笔记 > 编程语言 > 正文

C#:泛型类中的嵌套类是否应该被认为是通用的?

如何解决《C#:泛型类中的嵌套类是否应该被认为是通用的?》经验,为你挑选了2个好方法。

简而言之,是 - 一个类型从包含它的任何类型继承类型参数:这是类似事物的关键List.Enumerator和许多其他场景等 - 它们T与外部类(不仅仅是任何T)共享是至关重要的.

ECMA参考文献是§25.1:

嵌套在泛型类声明或泛型结构声明(第25.2节)中的任何类本身都是泛型类声明,因为应提供包含类型的类型参数以创建构造类型.


Dylan Beatti.. 6

是的,您的嵌套类绝对是通用的,因为T绑定到嵌套类的任何实例范围内的类型(这称为封闭泛型).

using System;
using System.Collections.Generic;

public class AGenericClass {
    public class NestedNonGenericClass {
        public void DoSomething() {
            Console.WriteLine("typeof(T) == " + typeof(T));
        }
    }
}

public class MyClass {
    public static void Main()   {
        var c = new AGenericClass.NestedNonGenericClass();
        var d = new AGenericClass.NestedNonGenericClass();
        c.DoSomething();
        d.DoSomething();
        Console.ReadKey(false); 
    }

}

DoSomething()根据泛型类型的关闭方式,相同的方法产生不同的输出 - 所以是的,内部类肯定表现出通用行为.



1> Marc Gravell..:

简而言之,是 - 一个类型从包含它的任何类型继承类型参数:这是类似事物的关键List.Enumerator和许多其他场景等 - 它们T与外部类(不仅仅是任何T)共享是至关重要的.

ECMA参考文献是§25.1:

嵌套在泛型类声明或泛型结构声明(第25.2节)中的任何类本身都是泛型类声明,因为应提供包含类型的类型参数以创建构造类型.



2> Dylan Beatti..:

是的,您的嵌套类绝对是通用的,因为T绑定到嵌套类的任何实例范围内的类型(这称为封闭泛型).

using System;
using System.Collections.Generic;

public class AGenericClass {
    public class NestedNonGenericClass {
        public void DoSomething() {
            Console.WriteLine("typeof(T) == " + typeof(T));
        }
    }
}

public class MyClass {
    public static void Main()   {
        var c = new AGenericClass.NestedNonGenericClass();
        var d = new AGenericClass.NestedNonGenericClass();
        c.DoSomething();
        d.DoSomething();
        Console.ReadKey(false); 
    }

}

DoSomething()根据泛型类型的关闭方式,相同的方法产生不同的输出 - 所以是的,内部类肯定表现出通用行为.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有