Если вы хотите использовать конструктор по умолчанию, то решение с использованием System.Activator
, представленное ранее, возможно, наиболее удобно. Однако, если в типе отсутствует конструктор по умолчанию или вам нужно использовать нестандартный, тогда опция должна использовать отражение или System.ComponentModel.TypeDescriptor
. В случае отражения достаточно знать только имя типа (с его пространством имен).
Пример с использованием отражения:
ObjectType instance =
(ObjectType)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(
typeName: objectType.FulName, // string including namespace of the type
ignoreCase: false,
bindingAttr: BindingFlags.Default,
binder: null, // use default binder
args: new object[] { args, to, constructor },
culture: null, // use CultureInfo from current thread
activationAttributes: null
);
Пример с помощью TypeDescriptor
:
ObjectType instance =
(ObjectType)System.ComponentModel.TypeDescriptor.CreateInstance(
provider: null, // use standard type description provider, which uses reflection
objectType: objectType,
argTypes: new Type[] { types, of, args },
args: new object[] { args, to, constructor }
);