Activator.CreateInstance(...)
을 통해 클래스의 인스턴스를 만들고 싶습니다. 모든 클래스는 동일한 추상 클래스를 상속합니다. 생성자에는 하나의 매개 변수가 있습니다.내부 클래스 및 공용 생성자 - Activator.CreateInstance와 함께 작동하는 이유는 무엇입니까?
클래스 및 생성자 은 (는)이 공개되어서는 안됩니다.
internal abstract class FooAbstract
{
protected Bar MyProperty { get; set; }
// Constructor is only need in concreat classes of FooAbstract
protected FooAbstract(Bar barProperty)
{
MyProperty = barProperty;
}
}
internal class Foo : FooAbstract
{
// Internal is enough, public is not necessary
internal Foo(Bar barProperty)
: base(barProperty)
{
}
// Many more Foo´s ...
internal class Creator()
{
private object CreateAFoo<T>() where T : FooAbstract
{
T someFoo = (T)Activator.CreateInstance(typeof(T), barProperty);
}
}
을하지만이 예외 Constructor on type 'Foo' not found
을 던졌습니다 :
이것은 내가 코드를 원하는 것입니다 (하지만하지). 내가 public
에 FooAbstract
및Foo
의 생성자를 변경하는 경우
모두가 잘 될 것입니다 (클래스 internal
을 유지!).
따라서 Activator.CreateInstance(...)
은 공개 액세스가 필요합니다 (그는 패키지 외부에서 제공됨).하지만 내부 클래스가 남아있는 이유는 무엇입니까?
는 지금까지 내가 클래스는 내부 때및생성자 클래스는 내부에및생성자 (계층 적 액세스 레이어의 종류 또한 내부와 같이이 같은 것 공개 생각) ...하지만 이것은 잘못된 것 같습니다!
누군가 여기서 내가 무슨 일이 있었는지 이해할 수있게 도와 줄 수 있습니까? 왜 내부 수업의 공공 생성자가 효과가 있습니까?
이것은 아주 좋은 질문입니다 - 내가 설명을보고 싶어요. 클래스가 내부 클래스 인 경우 생성자 중 하나라도 public으로 표시 되어도 내부 클래스가됩니다. 따라서, 당신이 말했듯이, Activate.CreateInstance()에 영향을 미치지 않아야합니다. –