문제

인사말,

파일에서 구성 할 수있는 특정 객체가 있습니다.

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

나는 본질적으로 "좋아, 이제 우리가 방금 사로화 한이 대상, 이것이 우리가 실제로 우리가있는 대상이다"라고 말하고 싶다. 이 작업을 수행하는 몇 가지 방법이 있으며, 어느 것이 가장 좋은 행위로 간주되는지 궁금합니다. 내 아이디어는 다음과 같습니다.

  • 객체 필드를 필드별로 복사하는 카피 지형 함수를 작성하십시오. 이것은 현재 구현이며 새 멤버가 객체에 추가 될 때마다 'Copy-Into-Me'기능에 추가해야하기 때문에 끔찍한 아이디어를 확신합니다. .
  • 객체를로드하기위한 Facto 생성자 역할을하는 configobj 클래스에 대한 정적 메소드를 구축하십시오. 이것은 훨씬 나아지지 만 최고의 실습은 아닙니다.

그래도 나는 둘 중 하나에 완전히 만족하지 않습니다. 여기서 인정 된 모범 사례는 무엇입니까?

도움이 되었습니까?

해결책

두 번째 옵션은 a라고합니다 공장 방법 일반적인 디자인 기술입니다. 이 기술을 사용하는 경우 실제로 클래스를로드하기 전에로드 할 클래스 유형을 알아야한다는 것을 알 수 있습니다. 이 상황에 빠지면 스트림을보고 적절한 유형의 클래스에 대한 공장 방법을 호출하는 더 높은 수준의 공장 유형을 사용할 수 있습니다.

다른 팁

There's nothing wrong with having a static method instead of a constructor. In fact, it has a number of advantages.

I always go with the static method. Usually it's kind of a hierarchy which is loaded, and therefore only the root object needs the method. And it's not really an unusual approach in the .NET framework (e.g. Graphics.FromImage), so it should be fine with users of your class.

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