我有两个程序集,比如Main和Sub,其中Sub取决于Main。Main定义了一些具有protected internal virtual
成员的类,我想在Sub中覆盖它们。我将这些成员覆盖为protected override
.
Main中有一个不相关的类,称为Main.Shared,我想在Sub中使用它,但我不希望任何其他程序集看到它。情况如下:
//In assembly Main:
public class Shared
{
}
public class Parent
{
protected internal virtual void DoStuff()
{
}
}
//In assembly Sub:
public class Child : Parent
{
protected override void DoStuff()
{
base.DoStuff();
}
}
所以我InternalsVisibleTo
像往常一样使用该属性。但是,在我用这个属性装饰Main之后,代码拒绝编译。错误消息说我现在必须覆盖DoStuff
as protected internal override
,大概是因为它现在认为Main和Sub是同一个程序集(?)
这是一个大问题,因为这意味着我需要手动将每个覆盖更改为受保护的内部,而且其中有很多。此外,我可能想稍后删除该属性,然后我需要再次更改所有内容。
有什么办法可以避免这样做吗?(除了代码库的完全重新设计......)
我也很好奇为什么会发生这种情况。这种行为只是某种盲点,还是应该像这样工作?