나는 내가 만든 추상 클래스에서 상속 한 클래스의 컬렉션을 가지고있다. 추상 클래스의 구체적인 구현 인스턴스를 생성하는 팩토리로 추상 클래스를 사용하고 싶습니다.생성자를 C#의 상위 클래스에서만 볼 수있게 만드는 방법이 있습니까?
부모 클래스를 제외한 모든 코드에서 생성자를 숨길 수있는 방법이 있습니까?
나는이 기본적으로
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
을하고 싶습니다하지만 내가 직접이 개 구체적인 클래스를 인스턴스화하지 못하도록하고 싶습니다. MakeAbstractClass() 메서드 만 기본 클래스를 인스턴스화 할 수 있도록하고 싶습니다. 이 일을 할 수있는 방법이 있습니까?
UPDATE
나는 추상 클래스의 외부에서 특정 ConcreteClassA의 방법 또는 B에 액세스 할 필요가 없습니다. 필자는 Abstract 클래스에서 제공하는 public 메소드 만 필요로한다. 필자는 Concrete 클래스가 인스턴스화되는 것을 막을 필요가 없다. 새로운 public 인터페이스를 제공하지 않기 때문에 그냥 피하려고 노력하고있다. 추상 클래스의 내부에서 매우 특정한 것들을 다르게 구현한다.
나에게 가장 간단한 해결책은 make child classes as samjudson mentioned입니다. 그러나 나는 이것을 피하고 싶다. 왜냐하면 내 추상 클래스의 파일을 내가 원하는 것보다 훨씬 더 크게 만들 것이기 때문이다. 차라리 조직을위한 몇 가지 파일을 통해 클래스를 분리하여 보관하고 싶습니다.
나는이에 대한 쉬운 해결책이 없다 생각 ...
좋은 예입니다.하지만 .NETy를 조금 더 이름을 짓고 코딩 표준 인 "CreateAbstractClass (string args)"라고 부릅니다. :) –