2013-09-01 5 views
4

접착제 메타 데이터를 C#의 개체에 보낼 수 있습니까?C# 개체 메타 데이터

컨텍스트 : 네트워크를 통해 피어간에 메시지를 보내는 프레임 워크. 메시지는 임의의 직렬화 가능 사용자 정의 .NET 유형일 수 있습니다.

물론 메시지가 피어에 의해 전송되면 프레임 워크는 메타 데이터를 저장하는 Message 클래스로 객체를 래핑 할 수 있으며 수신기는이를 래핑 할 수 있습니다. 그러나 피어의 처리 방법으로 다른 피어에게 메시지를 다시 보낼 수 있지만 원본 메타 데이터는 유지하려고합니다. 사용자는 재발송을 제외하고 항상 Message.RealMessage을 사용할 필요가 없습니다.

사전에 래핑 된 인스턴스를 유지하는 것에 대해 생각해 보았습니다. 사전에 래핑 된 인스턴스가 있고 해당 인스턴스를 다시 보내면 다시 검색 할 때 메시지를 다시 보내지 않을 수도 있고 여러 번 다시 보낼 수도 있습니다. 이것은 더 많은 메모리를 필요로합니다.

모든 솔루션? 어쩌면 C# 직접 개체에 붙어 추가 정보를 지원합니까? 일반적으로 내부 인터페이스가 필요하지만 사용자는 프레임 워크의 기본 클래스에서 모든 클래스를 파생시켜야합니다. 이는 불가능합니다.

편집 : 나는 여기에 WrappedMessage의 객체가 있지만 클래스 T에서 제공하는 인터페이스 만 사용할 수 있습니다. "라고 말하고 싶습니다.

+0

가 어떻게 CLR을 가진 것 :-) 컴파일러되는 클래스에 대한 부분을 무시할 수 있습니까? 어쨌든 귀하의 질문에 대한 대답은 "아니오"입니다. 가장 가까운 속성은 객체가 아닌 유형/멤버/etc에 적용되는 속성입니다. – siride

+0

WPF는 이런 종류의 속성에 대해 연결된 속성을 사용합니다. 본질적으로 그것들은 그들이 붙어있는 유형의 인스턴스에서 키 설정 한 정적 속성입니다. 패턴은 자연스러운 구문은 아니지만 확장 방법을 사용하면 자연스럽게 사용할 수 있습니다. – Will

+0

@siride : 이것은 메모리 효율의 문제가 아닙니다. C#이 구문 적으로 지원되는지 여부는 질문입니다. 사용자의 시야에 잡음을 추가해서는 안됩니다. –

답변

2

사전을 직접 사용하는 것보다 조금 더 나은 것을 수행해야하는 ConditionalWeakTable이 있습니다.

는 인용 :

동적으로 관리되는 개체에 개체 필드를 연결하는 컴파일러를 사용 가능하게합니다.

당신은 일 가능성이 그 일을 당신의 프레임 워크보다 더 많은 메모리를 효율적으로 할 수

+0

니스, 이것은 내가 필요로하고 Will에 의해 묘사 된 것처럼 보인다. 나는 그것을 시도해 볼 것입니다, 그것이 효과가 있다면, 물론 당신의 대답을 받아 들일 것입니다! –