从同一个“父”类获取另一个嵌套类的类型

时间:2013-12-25 02:14:24

标签: c# parameter-passing nested-class

我正在尝试在学习编程时首次创建命名空间。我希望有一种解决我遇到的问题的方法并不是特别凌乱,但实质上我有一个类对象,它保存两个嵌套类对象的两个字典。我需要能够将NestedClassA的Dictionary传递给NestedClassB,或者允许NestedClassB以某种方式访问​​它......这是我正在尝试做的一个例子:

namespace MyFirstNamespace 
{
    public class BossClass 
    {
        public Dictionary<int, NestedClassA> DictionaryA = new Dictionary<int, NestedClassA>();
        public Dictionary<int, NestedClassB> DictionaryB = new Dictionary<int, NestedClassB>();

        public class NestedClassA { ...arbitrary class definition... }

        public class NestedClassB 
        {
            public Dictionary<int, NestedClassA> PassedDictionary;

            public NestedClassB() { }

            public NestedClassB(Dictionary<int, NestedClassA> tempDic))
            {
                PassedDictionary = tempDic;
            }
        }


        public BossClass() { ... arbitrary constructor ... }

        ...arbitrary dictionary population methods...

        function void CreateAClassBInstance()
        {
            DictionaryB[n] = new NestedClassB(n, DictionaryA);
        }
    }
}

我的问题似乎是我不能在“NestedClassB”中对“NestedClassA”进行类型转换,因为它无法识别该类型。是否可以访问B中的“NestedClassA”类型?我尝试过的任何东西都没有效果。我是否必须传递“BossClass”的实例,以便我可以通过“Dictionary<int, MyFirstNamespace.BossClassInstance.NestedClassA>”引用类型?

任何帮助将不胜感激。为了清楚起见,我希望将一个REFERENCE变量传递给所有NestedClassA成员的Dictionary的NestedClassB,以便它们可以被NestedClassB操纵。它不能是克隆。我知道这似乎是荒谬的实现,但如果可能的话,它似乎是最有效的,我正在尝试做的事情。

编辑:也许我根本不应该将它们嵌套,但它会使它们更容易序列化,这就是为什么我真的想这样做。

(编辑 - 修复错误,我忘了在构造函数之前插入“public”。)

2 个答案:

答案 0 :(得分:2)

如果您希望实例化NestedClassB的实例,除了需要使构造函数公开之外,您的NestedClassB实现似乎没有什么特别的错误。默认情况下,在.Net中,对象通过引用传递给函数参数,因此您将拥有相同的Dictionary&lt; int,NestedClassA&gt;实例。在NestedClassB中。

以下是调整后的课程:

    public class NestedClassB 
    {
        private readonly Dictionary<int, NestedClassA> _PassedDictionary;

        public NestedClassB() { }

        public NestedClassB(Dictionary<int, NestedClassA> tempDic) {
            _PassedDictionary = tempDic;
        }

        public Dictionary<int, NestedClassA> PassedDictionary {
            get { return _PassedDictionary; }
        }
    }

请注意,我将PassedDictionary更改为属性而不是成员变量。大多数序列化程序将忽略成员变量并仅序列化属性。如果需要反序列化,则需要从私有成员变量中删除readonly并添加setter。

代码段底部的功能看起来不正确。你想让它看起来像:

private void CreateAClassBInstance()
{
    DictionaryB[n] = new NestedClassB(DictionaryA);
}

答案 1 :(得分:0)

对于任何试图这样做的人:传递包装类的实例对于嵌套类访问包装类的方法或变量是必要的。这可以使用“this”关键字来完成。