递归实例化对象内的类

问题描述 投票:0回答:1

我想通过反射自动并递归地激活我正在实例化的类中的所有嵌套类。这是我想要做的模板,但我不知道如何制作该功能。我知道如何枚举成员并创建实例,但我不知道如何将它们分配给内部子类型。以下是该方案。我需要通过反思来做到这一点,而不是在原始类中进行任何更改。只是从外部激活内部的物体。显然,没有在类内部重写代码或在类内部添加各种“新”

        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”的方法,即将生成的实例(通过激活器)分配给相应的成员。

c# class system.reflection abstraction
1个回答
0
投票

嵌套类不会自动嵌套相应的对象。嵌套类只会影响访问类的方式。例如。如果你有两个像这样的嵌套类:

public class A
{
    public class B
    {
    }
}

...然后你可以像这样实例化类

B
new A.B()
。即,这种嵌套的工作方式类似于命名空间内的嵌套。

您需要什么......更多即将到来

© www.soinside.com 2019 - 2024. All rights reserved.