如何在 csharp 中访问泛型类的子类

本文关键字:泛型类 子类 访问 csharp | 更新日期: 2023-09-27 18:30:59

我在C#中有一个简单的问题:

我在泛型类(Box)中嵌入了一个类(属性),如下所示:

public class Box<E> where E : Box{
    public class Properties {
    }
}

如何从外部类引用子类(属性)?我需要与这个 java 语句等效的东西:

Shape<?>.Properties prop = new Shape<?>.Properties();

谢谢

如何在 csharp 中访问泛型类的子类

你不能这样做。您必须指定E

Shape<OneBox>.Properties是不同的阶级,那么Shape<AnotherBox>.Properties

C# 规范 (10.3.8.5)

泛型类声明中包含的每个类型声明都是 隐式泛型类型声明。写入对 嵌套在泛型类型中的类型,包含构造类型, 包括其类型参数,必须命名。

做不到。一个经典的解决方案,如果Properties不需要E,是这样的:

public class Box {
    // So that it can't be instantiated, or you could make the class abstract
    protected Box()
    {
    }
    public class Properties {
    }
}
public class Box<E> : Box {
}