http://www.linux.org.ru/profile/eRazor/view-message.jsp?msgid=542692#544060
Итак, насколько я понял, надо сделатъ две вещи, которые как утверждают
отсутствуют в рефлексии дот нета. Первое: добраться до приватного поля
произвольного класса. Второе: вызов приватного метода произвольного
класса.
Ок.
1:
using System;
using System.Reflection;
namespace PrivateField
{
class Foo
{
private string bar = "Godzilla live!";
}
class Application
{
[STAThread]
static void Main(string[] args)
{
Foo foo = new Foo();
System.Reflection.FieldInfo[] fieldInfo;
Type type = typeof(Foo);
fieldInfo = type.GetFields(BindingFlags.NonPublic |
BindingFlags.Instance);
for(int i=0;i<fieldInfo.Length;i++)
{
Console.WriteLine("The value of {0} is: {1}",
fieldInfo[i].Name,fieldInfo[i].GetValue(foo));
}
}
}
}
2:
Регистрацию класса Action и его методов в Executor -е мне лень писать
согласно твоей задачи, тем более она у тебя уже есть, сосредоточимся
непосредственно на том, что ты сказал, что невозможно приватный метод
у класса вызвать.
using System;
using System.Reflection;
namespace PrivateMethod
{
class Executor
{
public static void RunAction()
{
Type type = typeof(Action);
MethodInfo methodInfo =
type.GetMethod("foo",BindingFlags.NonPublic |
BindingFlags.Instance);
Action action = new Action();
methodInfo.Invoke(action,new Object[]{});
}
}
class Action
{
private void foo()
{
Console.WriteLine("Reflection.. he, he, he.");
}
}
class Application
{
[STAThread]
static void Main(string[] args)
{
Executor.RunAction();
}
}
}
Ну и что мы видим? Всё работает, следовательно утверждение об ущербности дот нетовской рефлексии, на основании приведённых примеров ошибочно.
2All: А смогёт кто-нибудь мне пример из Java рефлексии привести, который я под .Net сделать не смогу?
И вопрос: умеет ли Java reflection в run-time байт код создавать?
Ответ на:
комментарий
от eRazor
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Добавить сахара в Java вдохновляясь Lombok (2016)
- Форум Java + теоретический вопрос (2005)
- Форум Lua in C# program (2014)
- Форум Type casting в C# (2015)
- Форум Java, массивы — почему здесь нет ошибки? (2012)
- Форум Объясните пожалуйста, в чем проблема. (2014)
- Форум [java][generic]interfaces (2011)
- Форум java (2005)
- Форум Декораторы в Java для listener'ов (2015)
- Форум Возможно тупой вопрос по обобщениям в Java (2016)