1

我们使用 DevExpress,在今天的发布中,他们的一个打印类发生了奇怪的变化。

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

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

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

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

4

4 回答 4

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();
    }
}
于 2009-08-25T15:51:37.810 回答
2

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

于 2009-08-25T15:57:33.727 回答
1
public class MyShape : ClosedShapeBase
{
    protected internal override PointF[] CreatePoints(RectangleF bounds, int angle)
    {
        ...
    }
}

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

于 2009-08-25T15:48:54.633 回答
0

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

最好的祝福

于 2009-08-25T15:53:20.663 回答