2011-03-17 12 views
0

안녕하세요 런타임에 클래스를 찾고 인스턴스화하려고합니다. 어셈블리가 팩토리 객체에로드됩니다.리플렉션을 통해 런타임에 클래스를 인스턴스화합니다.

그것은이 시점

Object obj = Activator.CreateInstance(
    (factory.ProxyAssembly.GetType("tempuri.org.Authorizations"))); 

까지 잘 작동하지만 사용할 수없는 objObj.FirstName 또는 obj.LastName 그래서 적절한 기본이되는 클래스로 캐스트하려고으로 속성 이름을 얻을 수 없습니다.

하지만 아래 코드는 작동하지 않습니다.

factory.ProxyAssembly.GetType("tempuri.org.Authorizations") 
    .UnderlyingSystemType.BaseType a = 
     Activator.CreateInstance(factory.ProxyAssembly 
       .GetType("tempuri.org.Authorizations").UnderlyingSystemType); 

도움을 주시면 감사하겠습니다. (유형)와 주조로

+0

obj를 인증 기관에 전송 했습니까? 목표를 달성하기위한 다른 좋은 방법이있을 수 있기 때문에 정확히 무엇을하려는 것입니까? – TJHeuvel

+0

지금까지 직접 실행 창에서 실행 중입니다. ("tempuri.org.Authorizations"). UnderlyingSystemType.BaseType a = Activator.CreateInstance (factory.ProxyAssembly.GetType ("tempuri.org.Authorizations"). UnderlyingSystemType); 표현식의 끝 예상 됨 "End of expression expected"메시지가 표시됩니다. – WorkerThread

+0

@TJHeuvel 유형 인증에 대해 알지 못합니다. Factory.ProxyAssembly.GetType ("tempuri.org.Authorizations"). UnderlyingSystemType – WorkerThread

답변

1

캐스팅 할 수 없으므로 프로젝트에서 어셈블리를 참조로 추가하지 않았습니다. Reflection을 사용하여 객체 속성을 가져와야합니다. Type.GetProperty 및 PropertyInfo.GetValue를 사용하십시오. C# 버전 4 동적 인 키워드가 구문 통증을 상당히 완화 할 수있는 방법을 권장합니다.

+0

감사합니다 Hans 그것은 p = obj.GetProperty 및 p.SetValue()와 함께 작동했습니다. – WorkerThread

1
tempuri.org.Authorizations a = (tempuri.org.Authorizations)Activator.CreateInstance(factory.ProxyAssembly.GetType("tempuri.or g.Authorizations"); 

봐. 타입은 돌아 오는 클래스 유형입니다. 유형은이 경우 컴파일 시간입니다. 반사는 구체적인 유형을 보호하기 위해 추상화를 사용하지만,이 경우에는 필요할 것입니다. do를 사용하지 않는 한 :

+0

안녕하세요 저스틴, 저는이 유형의 템플을 받고 있습니다. 의회의 승인. 나는 아직 그 유형, 단지 이름을 모른다. 그래서 'tempuri.org.Authorizations a'를 사용할 수 없습니다. 그래서 factory.ProxyAssembly.GetType ("tempuri.org.Authorizations") .UnderlyingSystemType.BaseType을 할당의 왼쪽에 사용하고 있습니다. – WorkerThread

0

개체를 인스턴스화 한 후에 캐스팅해야합니다.

+0

감사합니다. 아직 동적 런타임 유형으로 유형 변환 할 수있는 방법을 찾을 수 없습니다. – WorkerThread

관련 문제