MainとSubという 2 つのアセンブリがあり、SubはMainに依存しています。Mainは、 Subでオーバーライドしたいメンバーを持ついくつかのクラスを定義します。これらのメンバーを としてオーバーライドします。protected internal virtual
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をこの属性で装飾した後、コードはコンパイルを拒否します。エラー メッセージには、おそらくMainとSubが同じアセンブリであると考えられるため、 DoStuff
asをオーバーライドする必要があることが示されています (?)protected internal override
すべてのオーバーライドを手動で保護された内部に変更する必要があり、それらの多くがあるため、これは大きな問題です。さらに、後で属性を削除したい場合があり、すべてを元に戻す必要があります。
これを避ける方法はありますか?(コードベースの完全な再設計に加えて...)
また、なぜこれが起こるのかについても興味があります。この動作は単なる盲点ですか、それともこのように機能するはずですか?