는 AssemblyOne에 고려 AssemblyOne을 바꾸지 않고 C의 ctor에서 B의 ctor?를 상속 클래스와 전화 숨겨진 기본 생성자
4
A
답변
5
잠시 동안 어셈블리 2를 무시하십시오. public constructor가없는 B에서 상속하기 때문에 C 클래스의 인스턴스를 인스턴스화 할 수 없습니다.
그래서 C 클래스에서 상속 문제를 제거하면 보호 수준으로 인해 B 어셈블리 외부에서 B 클래스의 인스턴스를 만드는 데 여전히 문제가 있습니다. 하지만 리플렉션을 사용하여 B의 인스턴스를 만들 수 있습니다. ,이 일을
static void Main(string[] args)
{
System.Reflection.ConstructorInfo ci = typeof(B).GetConstructors(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)[0];
B B_Object = (B)ci.Invoke(new object[]{"is reflection evil?"});
Console.WriteLine(B_Object.PropSetByConstructor);
Console.ReadLine();
}
내가 권하고 싶지 않다 그 단지 나쁜 :
public class A
{
internal A(string s)
{
PropSetByConstructor = s;
}
public string PropSetByConstructor { get; set; }
}
public class B : A
{
internal B(string s)
: base(s)
{
PropSetByConstructor = "Set by B:" + s;
}
}
내가 다음 테스트 콘솔 응용 프로그램을 쓴 다음과 같이 테스트의 목적을 위해
, 나는 당신의 클래스를 변경 연습. 나는 모든면에서 예외가 있다고 생각합니다. 여기서 예외는 확장 할 수없는 제 3 자 라이브러리를 다루는 것일 수도 있습니다. 이렇게하면 상속하지 않으면 인스턴스화하고 디버그 할 수 있습니다.
2
리플렉션을 사용해도 가능하지 않습니다.
클래스에 액세스 가능한 생성자가없는 경우이를 상속하는 클래스를 만들 수있는 방법이 없습니다.
1
아니요, 아니요, AssemblyOne을 변경해야합니다.
관련 문제
- 1. Java에서 기본 생성자 및 상속
- 2. 생성자 상속 문제
- 3. Ninject에서 생성자 생성자 상속
- 4. 이 상속 생성자
- 5. PHP 클래스와 상속, serialization
- 6. 자바 생성자 상속
- 7. 자바 : 상속 생성자
- 8. 전화 슈퍼 생성자
- 9. 생성자 및 상속
- 10. 기본 클래스와 유틸리티 클래스
- 11. AS3 클래스/기본 클래스 생성자
- 12. 객체 지향 프로그래밍, 상속, 복사 생성자
- 13. Python에서 상속 된 클래스의 기본 클래스 메소드 (및 생성자)를 올바르게 호출하는 방법은 무엇입니까?
- 14. 개인 생성자 및 상속 (Java)
- 15. 스칼라 생성자, 논리 및 상속
- 16. 상속 hierachy : 생성자 및 소멸자 실행 순서
- 17. 이동 생성자 기본 클래스 이동 생성자
- 18. 명명 된 생성자 관용구 및 상속
- 19. C++ 생성자, 상속, 액세스 수정 및 재료
- 20. 오버로드 "기본"생성자 또는 "이"생성자?
- 21. perl의 기본 생성자 호출
- 22. 는 기본 생성자
- 23. JavaScript의 기본 생성자 래퍼?
- 24. 기본 인자가있는 복사 생성자
- 25. Xml 직렬화 - 기본 생성자
- 26. NSObject 기본 생성자
- 27. 의 BitmapData 생성자 기본
- 28. 콜링 기본 클래스 생성자
- 29. 복사 생성자와 기본 생성자
- 30. 기본 생성자 전에 C#