具有内部抽象成员的公共类

时间:2009-08-25 15:45:23

标签: c# abstract-class devexpress

我们使用DevExpress,今天发布了一个奇怪的改变他们的印刷类。

该类名为ClosedShapeBase,用于在报告中打印出形状。

类本身是公共的,但它的一些属性是受保护的内部抽象,如

public abstract class ClosedShapeBase : ShapeBase
{
    protected internal abstract PointF[] CreatePoints(RectangleF bounds, int angle);
}

是否有任何神秘的方式可以覆盖该成员,即使它是内部成员?

4 个答案:

答案 0 :(得分:4)

“受保护的内部”只意味着DevExpress在其项目中自己的代码可以访问它。出于该项目之外的所有目的(除了AssemblyInfo中的一些魔法),它就像它只是“受保护”一样。 DevEx在整个地方做到了这一点。

您无需在自己的覆盖中维护“内部”:

public class Foo
    : ClosedShapeBase
{
    protected override ShapeBase CloneShape()
    {
        throw new NotImplementedException();
    }

    protected override PointF[] CreatePoints(RectangleF bounds, int angle)
    {
        throw new NotImplementedException();
    }

    protected override ILinesAdjuster GetLinesAdjuster()
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:2)

受保护的内部表示受保护的内部。 意味着受保护的 OR 内部。因此,您应该能够在已定义ClosedShapeBase的程序集之外的其他位置覆盖该方法。

答案 2 :(得分:1)

public class MyShape : ClosedShapeBase
{
    protected internal override PointF[] CreatePoints(RectangleF bounds, int angle)
    {
        ...
    }
}

您只需要尊重被覆盖的类中的“受保护的内部”限定符。

答案 3 :(得分:0)

protected internal意味着任何子类都可以访问(在您的情况下覆盖)该成员。子类可以位于任何程序集中。定义基类的程序集的所有类也可以访问该成员。

最好的问候