제네릭 유형을 허용하는 제네릭 메서드가 있고 특정 생성자 매개변수를 사용하여 해당 유형의 인스턴스를 인스턴스화하려고 한다고 가정해 보겠습니다. 그러나 유형의 생성자에는 매개변수가 필요하며 그렇게 할 수 있는지 여부는 알 수 없습니다.
다음 코드 조각은 일반적인 방법으로 과일 객체를 생성하려는 시도를 보여줍니다.
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
매개변수 없는 생성자가 없기 때문에 BaseFruit
이 접근 방식은 실패할 수 있습니다. 과일의 무게를 지정하려면 정수 매개변수를 사용합니다.
이 문제를 해결하기 위해 C#에서는 Activator
클래스를 제공합니다. Activator.CreateInstance
메서드를 사용하여 유형의 인스턴스를 만들고 객체 배열을 생성자 인수로 전달할 수 있습니다.
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
T
에 new()
제약 조건을 사용하면 컴파일러가 컴파일 타임에 매개 변수가 없는 공용 생성자를 확인하는 것만 보장됩니다. 유형을 생성하는 데 사용되는 실제 코드는 Activator
클래스에 의해 처리됩니다.
이 접근 방식을 사용하면 매개변수화된 생성자를 사용하여 유형을 인스턴스화할 수 있지만 특정 생성자가 유형 정의에 있는지 확인해야 합니다. 이 접근 방식을 사용하면 잠재적인 코드 냄새가 나타날 수 있으며 다른 디자인 옵션을 탐색해야 한다고 제안할 수 있습니다.
위 내용은 C#에서 매개변수화된 생성자를 사용하여 일반 유형을 인스턴스화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!