我们使用DevExpress,今天发布了一个奇怪的改变他们的印刷类。
该类名为ClosedShapeBase,用于在报告中打印出形状。
类本身是公共的,但它的一些属性是受保护的内部抽象,如
public abstract class ClosedShapeBase : ShapeBase
{
protected internal abstract PointF[] CreatePoints(RectangleF bounds, int angle);
}
是否有任何神秘的方式可以覆盖该成员,即使它是内部成员?
答案 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意味着任何子类都可以访问(在您的情况下覆盖)该成员。子类可以位于任何程序集中。定义基类的程序集的所有类也可以访问该成员。
最好的问候