나는 다음과 같은 Windows 런타임 솔루션을 설치 한 : 또한, 다른 클래스가있는 EXE는 DLL에서WinRT는 리플렉션을 사용하여 수퍼 클래스 생성자를 찾고 호출 할 수 있습니까?
public sealed class DerivedClass : BaseClass {
}
에서 내 EXE
public abstract class BaseClass {
public BaseClass(Guid id, string name) {
//...
}
}
참조하는 DLL에서
을하는 런타임에 지정되는 서브 유형 BaseClass
을 사용합니다. 나는 기본 클래스 생성자를 가지고 있기 때문에, 내가 지금처럼 인스턴스화 할 수있을 것이라고 생각 :
//this._userType holds the type of DerivedClass
BaseClass foo = (BaseClass)Activator.CreateInstance(this._userType, id, name);
그러나, 생성자를 찾을 수 없음을 나에게 알려줍니다. 그래서 나는 가서 Type
의 GetConstructor()
메서드를 사용할 수 있다고 말한 다른 답변을 찾았지만 WinRT에는 나타나지 않습니다. DeclaredConstructors
속성이 있지만 DerivedClass
에 명시 적으로 선언 된 생성자 만 나열됩니다. DerivedClass
은이 특정 생성자에 대해 BaseClass
이외의 작업을 수행 할 필요가 없으므로 base
을 호출하는 명시 적 생성자를 작성하는 것이 싫지만 그 유일한 옵션 인 경우 알려주십시오 (이 접근 방식을 확인했습니다. 공장).
아, 저는 public으로 생성자를 부주의하게 입력했습니다 (Activator는 public 생성자 만 선택한다는 것을 읽은 후 대중이 내 마음 속에있었습니다). C#이 암시 적으로 수퍼 클래스 생성자를 상속받지 못했다는 것을 알지 못했습니다. C#을 사용하고 너무 많은 시간을 소비했습니다. 반사가 진행되는 한 함정을 알고 있지만이 클래스는 소켓을 통한 직렬화 및 전송을 위해 설계되었으므로 내가 아는 한 즉시 다른 방법을 사용할 수는 없습니다. 모든 조언을 주셔서 감사합니다! – borrrden