代码之家  ›  专栏  ›  技术社区  ›  Bercovici Adrian

静态类内定义的类的约束

  •  0
  • Bercovici Adrian  · 技术社区  · 6 年前

    您好,有没有办法约束在静态类中定义的类的泛型方法?

    static class Container {
        class A {
        }
        class B {
        }
    }
    
    static class ContainerExtension
    {
        //(where T  is a class defined in class Container)
        public int[] ToArray<T>(T array) {
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Evk    6 年前

    对于在静态类中定义的类,是否有任何方法可以约束泛型方法?

    不,没有。

    唯一的类型约束是:

    • 需要公共无参数构造函数( where T : new() )
    • 要求它是引用类型( where T : class )
    • 要求它是不可为null的值类型( where T : struct )
    • 需要将标识转换为特定类型或类型参数( where T : Button 或其他)

    “包含在特定类型中”没有任何限制,我也不希望这是一个即将出现的新特性——这听起来像是一个非常利基的用例。

    您可以创建一个仅由这些类型实现的接口,但这几乎是我所能建议的。(如果它是在同一个包含类中声明的私有接口,则只有那些类 能够 实现它-但是通用方法也需要是私有的。)