ここに私の問題の大まかなコード例があります:
class FooMaster
{
private static FooChildBase GetFooChild(int number)
{
switch(number)
{
case 1:
return new FooChild1();
case 2:
return new FooChild2();
default:
throw new NotImplementedException("...");
}
}
public static string GetFooChildText1Value(int number)
{
FooChildBase fooChild = GetFooChild(number);
return (fooChild?.Text1) ?? throw new NullReferenceException("...");
}
...
class FooChild1 : FooChildBase
{
internal override string Text1 { get; } = "Test"
public static void Test()
{
//Do something
}
}
class FooChild2 : FooChildBase
{
internal override string Text1 { get; } = "Test"
}
abstract class FooChildBase
{
internal abstract string Text1 { get; }
}
}
私が達成したいこと:
あなたがすべき:
- 別のクラスから「GetFooChildText1Value」を呼び出してからFooMasterを呼び出した場合にのみ、Text1にアクセスできます
- FooMaster の FooChild1 と FooChild2 の値とコンストラクターにアクセスできる
- FooMaster の外部から FooChild1 または FooChild2 のコンストラクターを呼び出すことはできません
- --> FooMaster の外部から FooChild1 または FooChild2 のプロパティを参照することもできません。
編集:
タイプ FooChild1 および FooChild2は、個々の public static メソッドを直接呼び出すことができる必要があるため、外部から認識されている必要があります (次のメソッドのみを呼び出すメソッドを作成したくありません)。