我正在尝试在学习编程时首次创建命名空间。我希望有一种解决我遇到的问题的方法并不是特别凌乱,但实质上我有一个类对象,它保存两个嵌套类对象的两个字典。我需要能够将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”。)
答案 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”关键字来完成。