【发布时间】:2013-12-16 19:50:22
【问题描述】:
我有两个程序集,例如 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 覆盖为 protected internal override,大概是因为它现在认为 Main 和 Sub 是同一个程序集 (?)
这是一个大问题,因为这意味着我需要手动将每一个覆盖更改为受保护的内部,而且其中有很多。此外,我可能想稍后删除该属性,然后我需要重新更改所有内容。
有什么办法可以避免这样做吗? (除了代码库的完全重新设计......)
我也很好奇为什么会发生这种情况。这种行为只是某种盲点,还是应该像这样工作?
【问题讨论】:
-
有趣的捕获 - 将自己检查。
-
嗯 - 它对我来说很好用。你用的是什么编译器版本?
-
@JonSkeet 我看到了同样的问题,我正在使用 VS 2012,即 C# 编译器版本 4.0.30319.17929。
-
@mikez:也许它已在 VS 2013 附带的 4.0.30319.33440 中修复?
-
嗯。不过也适用于 v3.5。将发布我的代码作为答案...
标签: c# inheritance assemblies internalsvisibleto