C#에서 인터페이스 제약 조건이 있는 일반 유형을 추론할 수 없는 이유는 무엇입니까?
C# 제네릭 유형 추론의 한계
이 경우 C#에서 일반 유형을 추론할 수 없는 이유는 무엇입니까?
일반 메서드를 사용할 때 C# 형식 유추는 일반적으로 올바른 일반 매개 변수를 식별합니다. 그러나 어떤 경우에는 실패하여 프로그래머가 유형을 명시적으로 지정해야 할 수도 있습니다. 이 기사에서는 컴파일러가 추론을 수행하는 데 결함이 있다고 말하는 상황에 대해 설명합니다.
다음 코드 조각을 고려하세요.
interface IQuery<TResult> { } interface IQueryProcessor { TResult Process<TQuery, TResult>(TQuery query) where TQuery : IQuery<TResult>; } class SomeQuery : IQuery<string> { }
Test
메서드에서 SomeQuery
인스턴스를 인수로 사용하여 Process
를 호출하면 컴파일러는 일반 인수를 추론할 수 없습니다.
class Test { void Test(IQueryProcessor p) { var query = new SomeQuery(); // 无法编译 :-( p.Process(query); // 必须显式编写所有参数 p.Process<SomeQuery, string>(query); } }
질문은 이 경우 컴파일러가 일반 매개변수를 성공적으로 추론하지 못하는 이유입니다.
제약 및 추론
답은 C#이 일반 매개변수 제약 조건을 처리하는 방법에 있습니다. 제약 조건(예: TQuery : IQuery<TResult>
)은 인수로 사용할 수 있는 유형을 제한합니다. 그러나 제약 조건은 메서드 시그니처의 일부로 간주되지 않으므로 형식 유추에 사용할 수 없습니다.
이 특별한 경우 컴파일러는 query
매개변수가 IQuery<TResult>
을 구현한다는 것을 확인할 수 있지만 제약 조건을 사용하여 TResult
의 구체적인 유형을 추론할 수는 없습니다. 따라서 명시적인 유형 매개변수가 필요합니다.
결론
제네릭을 사용할 때는 C# 유형 추론의 한계를 이해하는 것이 중요합니다. 컴파일러는 일반적으로 유형 추론 작업을 꽤 잘 수행하지만 어떤 경우에는 제약 조건으로 인해 그렇게 할 수 없습니다. 이 경우 컴파일러를 안내하기 위해 특정 일반 매개변수를 제공해야 합니다.
위 내용은 C#에서 인터페이스 제약 조건이 있는 일반 유형을 추론할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
