2010-03-30 5 views
0

다음과 같은 문제가 있습니다.
나는 특정 유형에 컨트롤을 변환해야합니다, 이것은 여러 유형이 될 수
(예를 들어, 사용자 정의 버튼 또는 사용자 정의 라벨, ....)
여기 내가하고 싶은 것이의 예는 :유형별 컨트롤 종류 변경

사전에
private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    Type type = c.getType(); 
    ((type) c).CustomPropertieOfControl = 234567; 
} 

감사

답변

1

VB 이전 버전보다 C# 4.0 이전 버전에서는 동적 형식 확인을 지원하지 않지만 약간의 리플렉션으로 C#을 구현할 수 있습니다.

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    PropertyInfo p = c.GetType().GetProperty("CustomPropertieOfControl"); 
    if (p == null) 
    return; 
    p.SetValue(c, new object[] { 234567 }); 
} 
4

는 당신이 "CustomPropertyOfControl"이 유형을 제어한다고 가정하는 공정인가? 그렇다면 모두 인터페이스를 구현하고 해당 인터페이스로 캐스팅하십시오.

캐스트의 요점은 컴파일러에게 컴파일 시간에 일 때 이 아닌 것을 알리는 것입니다. 여기에서는 컴파일 타임에 타입을 알지 못합니다. 기본 클래스 또는 인터페이스를 알고 있다면 컴파일러에게 을 알릴 수 있습니다. 아무런 문제없이을 입력하십시오. 이제 C# 4의

당신 이 사용하여 동적 입력 할 수있는 :

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
    dynamic d = c; 
    d.CustomPropertyOfControl = 234567; 
} 

그러나 이 작업을 수행하더라도, 난 여전히 정적 타이핑 가능하다면 고집 권 해드립니다을 - 모든 공통된 기능을 가진 유형의 그룹이 있다면 공통 인터페이스를 제공하십시오.