C#에서 생성자 인수를 일반 유형으로 전달
C#에서 매개변수화된 생성자를 사용하여 일반 유형의 인스턴스를 생성하는 것은 어려울 수 있습니다. 직접 인스턴스화를 시도하면 "변수 인스턴스를 생성할 때 인수를 제공할 수 없습니다."라는 오류가 발생하는 경우가 많습니다. 이는 컴파일러가 컴파일 타임에 특정 생성자 서명을 알지 못하기 때문입니다.
new()
제약 조건은 매개 변수가 없는 생성자만 허용합니다. 인수가 있는 생성자를 처리하기 위한 일반적인 솔루션은 팩토리 메서드(종종 대리자로 표시됨)를 사용하는 것입니다.
이를 달성하는 방법은 다음과 같습니다.
제네릭 유형을 직접 인스턴스화하는 대신 대리자(예: Func
)를 제네릭 메서드에 전달하세요. 이 위임은 필요한 생성자 인수를 사용하여 개체를 생성하는 작업을 담당하는 팩토리 역할을 합니다.
예:
<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) { // ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(factoryMethod(listItem)); } // ... }</code>
이 GetAllItems
메소드는 이제 Func<ListItem, T>
대리자를 허용합니다. 이 대리자는 ListItem
을 입력으로 사용하고 T
.
사용법:
<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>
이 예에서는 람다 식 l => new Foo(l)
이 팩토리 메서드 역할을 합니다. ListItem
(l
)을 가져와 Foo
의 생성자를 사용하여 새 Foo
개체를 만드는 데 사용합니다. 이는 ListItem
인수를 Foo
생성자에 효과적으로 전달합니다.
이 접근 방식을 사용하면 객체 생성 논리를 제네릭 메소드 자체에서 분리하여 매개변수화된 생성자가 있는 경우에도 제네릭 유형의 유연한 인스턴스화를 허용합니다.
위 내용은 C#에서 제네릭 형식을 인스턴스화할 때 생성자에 인수를 전달하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!