System.Reflection получить экземпляр класса

195
15 сентября 2018, 17:50

Какой метод в Reflection может дать мне пустой экземпляр класса?

Answer 1

Activator.CreateInstance

var instance = (ObjectType)Activator.CreateInstance(typeof(ObjectType));
Answer 2

Есть и немного другой способ создания экземпляра, пример Generic - метода для создания экземпляра объекта заданного типа:

public static T GetNewObject<T>()
{
    var constructor = typeof(T).GetConstructor(new Type[] {});
    if (constructor != null)
    {
        return (T) constructor.Invoke(new object[] {});
    }
    return default(T);
}

В отличие от Activator.CreateInstance - данный метод не выбросит исключение, в случае, если для объекта не определено беспараметрических конструкторов, будет возвращено значение null.

Ссылка на источник: Get a new object instance from a Type - там есть и другие ответы, которые будут полезны, но я решил выделить этот.

Метод Type.GetConstructor - выполняет поиск открытого конструктора экземпляра, параметры которого соответствуют типам, содержащимся в указанном массиве.

Метод MethodBase.Invoke - вызывает метод или конструктор, представленный текущим экземпляром, используя указанные параметры.

Выражение default(T) - выражения значения по умолчанию, которое создает значение по умолчанию с типом T.

Конечно же, использовать подход с помощью Activator.CreateInstance намного проще и удобнее, как уже был дан ответ от @free_ze

READ ALSO
Делегат не работает. Почему? С#

Делегат не работает. Почему? С#

Недавно писал приложение про кота! Одно решил другое началось!

277
Иерархия treeView c 3-м уровнем вложенности

Иерархия treeView c 3-м уровнем вложенности

Помогите разобратьсякак корректно построить иерархию для 3 вложенности в treeview, а именно для 3 классов, описывающих таблицы БД (entity framework):

212