この質問は、c# 内部抽象クラス、使用法を外部に隠す方法に似ていますが、私の動機は異なります。これがシナリオです
私は次のことから始めました:
internal class InternalTypeA {...}
public class PublicClass
{
private readonly InternalTypeA _fieldA;
...
}
上記は正常にコンパイルされます。しかし、基本クラスを抽出する必要があると判断し、次のように記述しようとしました。
public abstract class PublicBaseClass
{
protected readonly InternalTypeA _fieldA;
...
}
したがって、問題は、保護されたメンバーがアセンブリの外部に表示されますが、内部型であるため、コンパイルされません。
当面の問題は、PublicBaseClass と同じアセンブリ内のパブリック クラスのみがそれを継承する可能性があるため、_fieldA がアセンブリの外部に公開されないことをコンパイラに伝える方法 (またはできるか?) です。
または、私がやりたいことを行う別の方法はありますか、すべて同じアセンブリにあり、共通の (「保護された」) コードでそのアセンブリの内部型を使用するパブリック スーパー クラスと一連のパブリック基本クラスがありますか?
私がこれまでに持っていた唯一のアイデアは次のとおりです。
public abstract class PublicBaseClass
{
private readonly InternalTypeA _fieldA;
protected object FieldA { get { return _fieldA; } }
...
}
public class SubClass1 : PublicBaseClass
{
private InternalTypeA _fieldA { get { return (InternalTypeA)FieldA; } }
}
public class SubClass2 : PublicBaseClass
{
private InternalTypeA _fieldA { get { return (InternalTypeA)FieldA; } }
}
しかし、それは醜いです!