문제

내가 함께 일할 때 XmlDOM ASP.NET에는 다음과 같은 패턴이있었습니다 :`XMLREADER reader = XMLREADER.CREATE () ".

그런 다음 몇 번이나 같은 패턴을 만났습니다.

정적 생성자와 "New ClassName ()"생성자의 차이점이 무엇인지 알고 싶습니다 (내가 의미하는 바를 설명하기 위해 올바른 용어를 사용하고 있는지 확실하지 않음).

나는 무엇을 묻지 않습니다 XmlReader.Create() 내가 배우고 싶은 것은 왜 내가 정적 생성자를 사용하는지보다 사용하는 이유는 무엇입니까? 어떤 종류의 측면을 제공할까요? 정적 생성자로 할 수있는 일은 무엇입니까? 그러나 새로운 키워드 생성자로는 할 수 없습니다.

미리 감사드립니다.

도움이 되었습니까?

해결책

우선, 용어를 순서대로 받자. XmlReader.Create ~이다 ~ 아니다 정적 생성자. (일반적으로) 새로운 객체 인스턴스를 반환하는 정적 방법 일뿐입니다. 이것은 일반적으로 "공장 방법"이라고합니다. "정적 생성자"는 키워드로 선언 된 생성자입니다. static, 수업의 정적 멤버를 초기화하는 데 사용됩니다.

class MyClass {
   static MyClass() { ... } // static constructor
}

이제 공장 방법이 바람직한 이유에 관해서. 몇 가지 이유가있을 수 있습니다.

하나는 생성자 (로부터 호출 new) 언제나 새로 인스턴스화 된 객체를 제공하거나 예외를 던져야합니다. 공장 방법이 돌아올 수 있습니다 null 그것이 의미가 있거나, 객체의 약간의 캐시를 유지하고 항상 새로운 객체를 만드는 것을 피할 수 있습니다 (예 : 객체가 불변 할 수있는 경우).

또 다른 이유는 당신이 할 때 때문입니다 new T(), 너 언제나 구체적으로 인스턴스를 얻으십시오 T. 공장 방법은 대신 일부 서브 클래스 인스턴스를 만들 수 있습니다. T, 입력 매개 변수 및 기타 요인에 따라 경우 XmlReader, 이것은 정확히 일어나는 일입니다. XmlReader 그 자체입니다 abstract, 따라서 사례는 없습니다. 그러나 다른 목적 (검증 / 비 검증, 스트림 백엔드 / Dom Backed 등) 및 XmlReader.Create 과부하와 인수를 기반으로 올바른 것을 선택합니다.

다른 팁

정적 생성자는 모든 정적 데이터를 초기화하거나 한 번만 수행 해야하는 특정 동작을 수행하는 데 사용됩니다. 첫 번째 인스턴스가 생성되거나 정적 멤버가 참조되기 전에 자동으로 호출됩니다. 클래식 생성자는 인스턴스 변수를 초기화하는 데 사용되며 개체가 생성 될 때마다 호출됩니다.

두 생성자 모두에서도 동일한 작업을 수행 할 수 있습니다. 다른 점이 없다. 그러나 정적 생성자는 호출됩니다 한 번 프로그램의 수명에 정적 회원과의 수업에만 허용됩니다. 사용하기 전에 개인 정적 변수를 초기화 할 수 있습니다.

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