C# Next : Attribute 제네릭 지원

아주~ 오랜 시간 동안 Attribute는 제네릭을 사용할 수 없었습니다.

[Test("Test")]   // CS0404: "TestAttribute<T>" 특성 클래스를 적용할 수 없음 오류
class TestClass
{
}

class TestAttribute<T> : Attribute   // CS0698: 특성 클래스로 제네릭 형식을 파생시킬 수 없음 오류
{
    public T Value { get; }

    public TestAttribute(T value) => Value = value;
}

하지만, roslyn/Language Feature Status.md at main · dotnet/roslyn (github.com)에 의하면, 이미 Visual Studio 2022 17.0 Preview 4에 포함되었다 합니다. 이 버젼 이후로는 위의 코드가 정상 처리 됩니다.

preview langversion으로 C# 10 에 포함될지는 아직은 미지수입니다.

4개의 좋아요

C#의 기능 변경이 Visual Studio의 버젼을 따라가는 이유가 아마도, Visual Studio의 분석기와 같이 업데이트가 되어서 이렇게 버젼표시를 하는것 같습니다. (Visual Studio 설치에 의해 최신 .NET 프레임워크도 같이 설치되므로)

3개의 좋아요

오…Generic Attribute라니 신기하군요…
제가 알기로 Attribute는 거의 대부분이 Reflection으로 동적코드인 것으로 알고 있는데 런타임에는 타입이 확정되는 Attribute에 대해서도 되다니…기술의 발전이 대단한 거 같습니다.

3개의 좋아요