>백엔드 개발 >C++ >인터페이스 제약 조건이 있는 메서드에서 C#이 일반 형식 인수를 추론할 수 없는 이유는 무엇입니까?

인터페이스 제약 조건이 있는 메서드에서 C#이 일반 형식 인수를 추론할 수 없는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-23 09:31:09253검색

Why Can't C# Infer Generic Type Arguments in Methods 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> { }

class Test
{
    void Test(IQueryProcessor p)
    {
        var query = new SomeQuery();

        // Compilation Error: Type inference failed
        p.Process(query);

        // Explicit type arguments required for successful compilation
        p.Process<SomeQuery, string>(query);
    }
}</code>

컴파일러는 첫 번째 TQuery 호출에서 TResultp.Process(query)을 추론하지 못했습니다. 그 이유는 C#의 유형 추론 메커니즘이 제공된 인수의 유형에 의존하기 때문입니다. querySomeQuery 유형이지만 이것만으로는 TQueryTResult을 완전히 정의할 수 없습니다.

where TQuery : IQuery<TResult> 제약 조건은 여러 IQuery 구현을 허용하지만 컴파일러는 인수 유형에서 정확한 구현을 추론할 수 없습니다. 따라서 제네릭 유형을 해결하려면 명시적인 유형 인수(<SomeQuery, string>)가 필요합니다.

Eric Lippert가 설명했듯이(https://www.php.cn/link/4a3cffe005397d4cffdee044f1c8d30e) 제약 조건은 메서드 서명의 일부가 아닙니다 따라서 유형에 사용되지 않습니다. 추론. 추론은 형식 매개변수 유형에만 기반을 두고 있으며 결정적으로 제약 조건을 배제합니다.

위 내용은 인터페이스 제약 조건이 있는 메서드에서 C#이 일반 형식 인수를 추론할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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