我想通过反射自动并递归地激活我正在实例化的类中的所有嵌套类。这是我想要做的模板,但我不知道如何制作该功能。我知道如何枚举成员并创建实例,但我不知道如何将它们分配给内部子类型。以下是该方案。我需要通过反思来做到这一点,而不是在原始类中进行任何更改。只是从外部激活内部的物体。显然,没有在类内部重写代码或在类内部添加各种“新”
void someCode()
{
Nest MyNest = new Nest();
createInstancesOfAllClassesInside(MyNest);
}
void createInstancesOfAllClassesInside(object anyObj)
{
//How, using reflection ?
}
public class Nest
{
public class A
{
public class A1
{
public class A2
{
public string x = "Activate me!";
}
}
}
public class B
{
public class B1
{
}
}
public string s = "Hello";
}
回应评论:通过激活,我的意思是“就像”内部类已由 new() 实例化。谢谢!
我将添加我的(无效的)尝试,这样可能会使问题更清楚:
public void createInstancesOfAllClassesInside(object obj)
{
var objType = obj.GetType();
var result = obj;
foreach (MemberInfo member in objType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
{
if (member is Type && ((Type)member).IsNested)
{
var instance = Activator.CreateInstance((Type)member);
// here i do not know how to assign to the member!
var propInfo = objType.GetProperty(member.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (propInfo is not null)
{
propInfo.SetValue(obj, instance, (object[])null);
}
}
}
}
我创建了实例,但找不到“SetValue”的方法,即将生成的实例(通过激活器)分配给相应的成员。
嵌套类不会自动嵌套相应的对象。嵌套类只会影响访问类的方式。例如。如果你有两个像这样的嵌套类:
public class A
{
public class B
{
}
}
...然后你可以像这样实例化类
B
:new A.B()
。即,这种嵌套的工作方式类似于命名空间内的嵌套。
您需要什么......更多即将到来