Вам не нужен неинициализированный объект, если это просто статический класс.После того, как вы получили тип, например,
Type t = asm.GetType("NAMESPACE.CLASS");
, вы можете получить необходимые методы с помощью
MethodInfo method = t.GetMethod("MethodName");
//getmethod has some useful overloads
//also GetMethods() returns a MethodInfo[] array containing all methods
, затем вы можете позвонить
object result = method.Invoke(null, new object[] { param1, param2, ... } );
Есть другиеспособы сделать это также.Вы можете использовать делегаты для получения указателя функции на метод вместо вызова invoke.
Я не уверен, как делать обработчики событий, хотя я уверен, что если вы просматриваете intellisense под объектом Type, вы должны бытьв состоянии найти что-то.Что касается свойств, обычно вы используете их только для объектов, но если вы хотите использовать свойства статического класса и заранее знаете тип возвращаемого значения, вы можете создать класс для его обработки:
public class ExternalProperty<PropertyType>
{
delegate PropertyType GetFunction();
delegate void SetFunction(PropertyType value);
GetFunction GetValue;
SetFunction SetValue;
public ExternalProperty(PropertyInfo externalProperty)
{
MethodInfo getMethod = externalProperty.GetGetMethod();
GetFunction getter = (GetFunction)Delegate.CreateDelegate(typeof(GetFunction), getMethod);
MethodInfo setMethod = externalProperty.GetSetMethod();
SetFunction setter = (SetFunction)Delegate.CreateDelegate(typeof(SetFunction), setMethod);
}
public PropertyType Value
{
get { return GetValue(); }
set
{
SetValue(value);
}
}
}
использовать этот класс очень просто, если вы уже знаете тип свойства.Допустим, у вас есть свойство Имя типа string:
ExternalProperty<string> PropName = new ExternalProperty(t.GetProperty("Name"));
string oldName = PropName.Value; //this will call the property's getter
PropName.Value = "new name"; //this will call the property's setter
, однако оно не проверяет ошибки, поэтому, если вы попытаетесь передать свойство другого типа, чем вы указали, или свойство, которое не может быть найдено дляэто сломается.Это также не работает для объектов, только для статических классов.Надеюсь, это поможет.