> 백엔드 개발 > C++ > C#에서 매개변수화된 생성자를 사용하여 일반 유형을 인스턴스화하려면 어떻게 해야 합니까?

C#에서 매개변수화된 생성자를 사용하여 일반 유형을 인스턴스화하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-09 12:27:49
원래의
972명이 탐색했습니다.

C# 일반 유형 및 매개변수화된 생성자의 인스턴스화

제네릭 유형을 허용하는 제네릭 메서드가 있고 특정 생성자 매개변수를 사용하여 해당 유형의 인스턴스를 인스턴스화하려고 한다고 가정해 보겠습니다. 그러나 유형의 생성자에는 매개변수가 필요하며 그렇게 할 수 있는지 여부는 알 수 없습니다.

다음 코드 조각은 일반적인 방법으로 과일 객체를 생성하려는 시도를 보여줍니다.

<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>
로그인 후 복사

Tnew() 제약 조건을 사용하면 컴파일러가 컴파일 타임에 매개 변수가 없는 공용 생성자를 확인하는 것만 보장됩니다. 유형을 생성하는 데 사용되는 실제 코드는 Activator 클래스에 의해 처리됩니다.

이 접근 방식을 사용하면 매개변수화된 생성자를 사용하여 유형을 인스턴스화할 수 있지만 특정 생성자가 유형 정의에 있는지 확인해야 합니다. 이 접근 방식을 사용하면 잠재적인 코드 냄새가 나타날 수 있으며 다른 디자인 옵션을 탐색해야 한다고 제안할 수 있습니다.

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

위 내용은 C#에서 매개변수화된 생성자를 사용하여 일반 유형을 인스턴스화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿