Использование отражения для создания экземпляров защищенного класса - PullRequest
0 голосов
/ 10 июня 2011

Может кто-нибудь объяснить мне, как метод Activator.CreateInstance может создавать экземпляры защищенного класса?

public abstract class File
{
    public string Name {get; set;}
}

public class ExcelFile : File
{
    protected ExcelFile()
    {
    }
}

Невозможно создать новый экземпляр объекта, вызвав Файл ExcelFile = новый ExcelFile ();

«ExcelFile» недоступен из-за уровня защиты

Однако его можно создать с помощью:

Type type = Type.GetType("ConsoleApplication.ExcelFile");
object o = Activator.CreateInstance(type, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, new object[0], CultureInfo.InvariantCulture);

Приведенный выше код был извлечен из метода BCL WebRequest.Create () и хотел бы узнать, какие параметры в Activator.CreateInstance позволяют отражению создавать экземпляр защищенного класса?Я планирую использовать Activator.CreateInstance в классе фабрики для возврата новых объектов, поэтому хотел бы лучше понять, как он работает.

1 Ответ

1 голос
/ 10 июня 2011

Отражение не заботится о модификаторах доступа

...