Как создать новый экземпляр объекта из Типа

Я предполагаю, что у вас есть класс «размер», который содержит несколько элементов, из которых только один должен иметь возможность «проверять» класс в любой момент времени.

$(".size a").click(function()
{
    if($this).hasClass('checked')
    {
        $(".size a").removeClass('checked');
        $(this).addClass('checked');
    }
    else
    {
        $(this).removeClass('checked');
    }
}
661
задан shA.t 18 December 2018 в 06:11
поделиться

5 ответов

Activator класс в корне System пространство имен довольно мощно.

существует много перегрузок для передающих параметров конструктору и такому. Проверьте документацию в:

http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx

или (новый путь)

https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance

Здесь некоторые простые примеры:

ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

ObjectType instance = (ObjectType)Activator.CreateInstance("MyAssembly","MyNamespace.ObjectType");
817
ответ дан Jay 18 December 2018 в 06:11
поделиться
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

Activator класс имеет универсальный вариант, который делает это немного легче:

ObjectType instance = Activator.CreateInstance<ObjectType>();
130
ответ дан slavoo 18 December 2018 в 06:11
поделиться

Одна реализация этой проблемы должна попытаться вызвать конструктора без параметров Типа:

public static object GetNewObject(Type t)
{
    try
    {
        return t.GetConstructor(new Type[] { }).Invoke(new object[] { });
    }
    catch
    {
        return null;
    }
}

Вот тот же подход, содержавшийся в общем методе:

public static T GetNewObject<T>()
{
    try
    {
        return (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { });
    }
    catch
    {
        return default(T);
    }
}
42
ответ дан slavoo 18 December 2018 в 06:11
поделиться

Если это для чего-то, что назовут много в экземпляре приложения, это намного быстрее, чтобы скомпилировать и кэшировать динамический код вместо того, чтобы использовать активатор или ConstructorInfo.Invoke(). Две легких опции для динамической компиляции компилируются Выражения Linq или некоторые простые IL коды операций и DynamicMethod . Так или иначе различие огромно, когда Вы начинаете входить в жесткие циклы или множественные вызовы.

12
ответ дан Ian Kemp 18 December 2018 в 06:11
поделиться

Разве общий T t = new T (); не работает?

11
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: