Я предполагаю, что у вас есть класс «размер», который содержит несколько элементов, из которых только один должен иметь возможность «проверять» класс в любой момент времени.
$(".size a").click(function()
{
if($this).hasClass('checked')
{
$(".size a").removeClass('checked');
$(this).addClass('checked');
}
else
{
$(this).removeClass('checked');
}
}
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");
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);
Activator
класс имеет универсальный вариант, который делает это немного легче:
ObjectType instance = Activator.CreateInstance<ObjectType>();
Одна реализация этой проблемы должна попытаться вызвать конструктора без параметров Типа:
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);
}
}
Если это для чего-то, что назовут много в экземпляре приложения, это намного быстрее, чтобы скомпилировать и кэшировать динамический код вместо того, чтобы использовать активатор или ConstructorInfo.Invoke()
. Две легких опции для динамической компиляции компилируются Выражения Linq или некоторые простые IL
коды операций и DynamicMethod
. Так или иначе различие огромно, когда Вы начинаете входить в жесткие циклы или множественные вызовы.