Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。 やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。 public enum PersonType { Man, Woman, None };
public class Person { public static Person GetInstance(PersonType x) { switch (x) { case PersonType.Man: return new Man(); case PersonType.Woman: return new Woman(); default: return new None(); } } private class Man : Person { public Man() {} } private class Woman : Person { public Woman() {} } private class None : Person { public None() {} } }
class Startup { static void Main() { Person man = Person.GetInstance(PersonType.Man); Person woman = Person.GetInstance(PersonType.Woman); Person none = Person.GetInstance(PersonType.None); } }