>백엔드 개발 >C++ >인터페이스 제약 조건으로 인해 C# 일반 유형 추론이 실패하는 이유는 무엇입니까?

인터페이스 제약 조건으로 인해 C# 일반 유형 추론이 실패하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-23 09:46:101028검색

Why Does C# Generic Type Inference Fail with Interface Constraints?

C# 제네릭 유형 추론의 한계

C#의 유형 추론 메커니즘은 일반적으로 제네릭 메서드의 제네릭 매개변수를 지능적으로 추론할 수 있습니다. 그러나 다음 예와 같이 경우에 따라 유형 추론이 실패할 수 있습니다.

<code class="language-csharp">interface IQuery<TResult> { }

interface IQueryProcessor
{
    TResult Process<TQuery, TResult>(TQuery query)
        where TQuery : IQuery<TResult>;
}

class SomeQuery : IQuery<string>
{ }</code>

위 코드에서 SomeQuery 인스턴스를 사용하여 IQueryProcessorProcess 메서드를 호출하면 컴파일러가 올바른 일반 매개변수를 추론할 수 없습니다. 매개변수를 명시적으로 지정하면 이 문제가 해결됩니다.

<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>

추론 실패 이유

초기 가정과 달리 제약 조건만으로는 유형 추론에 충분하지 않습니다. C#의 형식 유추는 전적으로 매개 변수와 해당 형식 매개 변수 형식을 기반으로 합니다. 제공된 매개변수 유형이 SomeQuery(IQuery<string> 구현)이므로 컴파일러는 일반 매개변수가 TQuery = SomeQueryTResult = string이어야 한다고 자동으로 추론할 수 없습니다.

Eric Lippert는 "제약조건은 서명의 일부가 아닙니다"라는 기사에서 (https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d.

위 내용은 인터페이스 제약 조건으로 인해 C# 일반 유형 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.