2010-02-23 4 views
0

문자열 속성이있는 클래스를 사용하고 있습니다. 누군가가이 속성의 값을 읽을 때 일종의 이벤트 알림을 찾고 있으므로 속성을 동적으로 제공 할 수 있습니다. 예를 들어, 보통 누군가는 다음과 같이합니다 :동적 속성을 제공하는 방법은 무엇입니까?

그리고 현재 속성에 지정된 문자열 값을 반환합니다.

그러나, 내가 말하고 싶은 게 같은 :

someClass.PropertyRead += new EventHandler<PropertyReadEventArgs>("Property", Property_Read); 

private void Property_Read(object sender, PropertyReadEventArgs e) 
{ 
    e.Value = "some dynamically generated string here."; 
} 

이런 일이 가능하다면 어떤 생각?

+0

.NET의 버전은 무엇입니까? – sylvanaar

답변

3

일반 속성 가져 오기 도구를 사용하지 않는 이유는 무엇입니까? 오히려 전략을 주입하려는 경우

public string Property { 
    get { return Generate(); } 
} 

당신은 할 수 있습니다 : 다음

public Func<string> PropertyGetter{ get; set; } 

public string Property{ 
    get{ 
     return PropertyGetter(); 
     } 
} 

그리고

myclass.PropertyGetter = Console.ReadLine; 
1

당신이 그때는 아마 게터를 사용하는 속성을 사용하는 경우 어떤에서 동적 문자열을 만들 수 있습니다.

public String SomeProperty 
{ 

get 
{ 
    return DynamicString(); 
} 

} 

private String DynamicString() 
{ 
    return "some dynamically generated string here."; 
} 
0

런타임에 속성을 추가하고 특수 구문을 사용하지 않고 액세스하려는 것처럼 들립니다.

그래서 myClass.Property는 컴파일 할 때 존재하지 않습니다.

호출을 가로 채서 누락 된 속성에 대한 구현을 제공 할 수 있도록 내 (예상) 개체에 대한 동적 프록시를 만들어야합니다.

.NET 4.0에 대한 확신이 없으며 이것이 더 쉬운지 아닌지에 대해 잘 모르겠습니다.

+0

".NET 4.0에 대한 확신이 없으며 이것이 더 쉬운지 아닌지에 대한 확신이 없습니다." : 예를 들어 ExpandoObject를 참조하십시오. 하지만 그 질문의 요점이 아니에요;) –

+0

나는 그랬다고 생각했는데 - 내 사실을 확인할 시간이 없었어요. – sylvanaar

관련 문제