클래스 이름을 사용하여 클래스를 만드는 데에 대한 프로그래밍 조언

StackOverflow https://stackoverflow.com//questions/10658564

  •  11-12-2019
  •  | 
  •  

문제

OK, 이름을 사용하여 클래스를 만드는 방법에 대해 검색하고 몇 가지 질문을 보았습니다.내 질문은 똑같지는 않으므로 어쨌든 물어볼 것입니다.

내 응용 프로그램에는 2 개의 클래스가 있습니다. "A"및 "B"라고합니다.다른 클래스에서는이 두 클래스를 사용할 필요가 있습니다 (세 번째 클래스는 외부 서비스에 의해 호출됩니다).외부 서비스는 문자열로 두 개의 "A"및 "B"클래스의 이름 만 전달합니다.세 번째 수업에서는 내가 할 수있는 것을 알고 있습니다 :

case "A":
    create an instance of A
case "B":
    create an instance of B
.

그러나 그것은 이상한 것처럼 보입니다.나는 그것을 동적으로 동적으로하고 싶습니다. 그래서 나는 활성기를 생각하고있었습니다. 크레아 테인 스턴스 (createinstance)는 어셈블리를 원격으로로드 할 때 "CreateInstance"가 사용되므로 좋은 프로그래밍이 가능하기 때문에 확실하지는 않습니다.내 경우 모든 것이 하나의 프로젝트에 있습니다.

조언은 무엇입니까?고맙습니다!

도움이 되었습니까?

해결책

이것은 공장 방식 패턴을 사용하기에 완벽한 경우입니다.

http://www.dofactory.com/patterns/patternfactory.aspx <./ P>

다른 팁

이름으로 만들려는 수업 수가 제한되어있는 경우 (예 : 예제에서 2 개의 다른 클래스와 같은), "스위치"의 방법을 선호합니다.

public object ClassFactory(string ClassName)
{
    switch(ClassName)
    {
        case "A": return new A();
        case "B": return new B();
    }
}
.

더 빠르고 안전한 경우 (클래스의 이름이 외부 서비스에서 나오는 경우,이 서비스가 악의적 인 클래스 이름을 보내는 경우 일어날 것을 상상해보십시오).

그렇지 않으면 activator.createInstance는 문제가되지 않아야하지만 입력을 철저히 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top