Type type_class_a = ....;
Type type_class_b = type_class_a.GetField("name_b").FieldType;
MethodInfo method = type_class_b.GetMethod("method");
method.Invoke(type_class_b,new object[] {"test_string"});
в дллОтражение: вызвать метод внутри статического поля
public class class_a
{
public static class_b name_b = new class_b();
}
public class class_b
{
public void method(string data)
{
}
}
, но я получил ошибку
Необработанное исключение типа «System.Reflection.TargetException» произошло в mscorlib.dll Дополнительная информация : Объект не соответствует типу цели.
Тогда как его вызывать? Thankyou.
Первый аргумент 'method.Invoke' должен быть * экземпляром * класса_b', а не типом. Вы вызываете метод экземпляра - вам все равно нужен экземпляр. – Blorgbeard
Спасибо, это работает. 'var instance = Activator.CreateInstance (type_class_b); type_class_a.GetField ("name_b"). SetValue (type_class_a, instance) ' –
При создании экземпляра с использованием Activator.CreateInstance (...) создается другой объект в памяти. Таким образом, если статический член 'name_b' вашего' class_a' хранится в ячейке памяти 0x1234, то объект, созданный с помощью Activator.CreateInstance, не будет этим объектом, кроме нового объекта, который может быть сохранен по адресу памяти 0x9876.Следовательно, у вас может не быть того же значения полей и свойств в этом объекте, созданных с помощью Activator.CreateInstance; а также это приведет к много времени для отладки (потому что вы не сможете определить, где теряются значения) –