c# 참조 익명 클래스에 속성을 사용할 수 있습니까?




c# 임시 객체 (3)

실제로 동적 인 것이 아닌 익명의 타입을 만들고 있습니다.

불행히도 당신이하려는 것을 성취 할 방법이 없습니다. 익명 형식은 이름 / 값 쌍으로 구성된 매우 간단한 불변 형입니다.

익명 형식의 C # 버전에서만 기본 형식의 이름 / 값 쌍 집합을 사용자 지정할 수 있습니다. 다른 건 없어. VB.Net은 쌍을 변경할 수 있거나 변경할 수 없다는 점에서 약간 더 많은 사용자 지정을 허용합니다. 또한 속성을 사용하여 유형을 증가시키지 않아도됩니다.

속성을 추가하려면 전체 유형을 만들어야합니다.

EDIT OP는 속성이 리플렉션을 통해 추가 될 수 있는지 질문했습니다.

이것은 할 수 없습니다. 리플렉션은 메타 데이터를 변경하지 않고이를 검사하는 방법입니다. 따라서 속성을 추가하는 데 사용할 수 없습니다.

또한 어셈블리의 형식 정의는 일반적으로 변경할 수 없으며 런타임시 변형 할 수 없습니다 (1). 여기에는 메소드에 속성을 추가하는 것도 포함됩니다. 그래서 기술과 같은 다른 반사는 여기에서도 사용할 수 없습니다.

[1] 이것에 대한 한 가지 예외는 ENC 작동입니다

나는 익명의 반이있다 :

var someAnonymousClass = new
{
    SomeInt = 25,
    SomeString = "Hello anonymous Classes!",
    SomeDate = DateTime.Now
};

이 클래스에 속성을 첨부 할 여지가 있습니까? 반사, 다른? 나는 정말로 다음과 같은 것을 기대하고 있었다.

var someAnonymousClass = new
{
    [MyAttribute()]
    SomeInt = 25,
    SomeString = "Hello anonymous Classes!",
    SomeDate = DateTime.Now
};

Answer #1

TypeDescriptor.AddAttributes 를 사용하여 익명 인스턴스에 특성을 추가 할 수 있습니다. 그런 다음 나중에 TypeDescriptor.GetAttributes 사용하여 특성에 액세스 할 수 있습니다.

이렇게하면 객체의 Type 인스턴스에 추가되지 않습니다. 따라서 속성을 검색하고 적용하는 코드를 제어하지 않으면 유용하지 않을 수 있습니다.


Answer #2

우선 익명의 유형입니다. "동적"이라는 단어는 사람들이 당신이 아닌 동적 의미 체계를 구현하는 C # 4.0 클래스에 대해 말하는 것이라고 생각하게 할 수 있습니다.

둘째로, 아니오, 당신은 당신이 요구하는 것을 할 수 없습니다.

속성에 대한 속성을 지정해야하는 경우 이름이 지정된 유형으로 돌아갑니다. 일반 클래스 또는 구조체.





anonymous-types