我正在尝试使用逻辑分隔符来保持我的所有属性在逻辑上分离,但所以我只需要传递一个对象。我所说的是,我想实例化Object,并能够使用Object.InnerObject.InnerObjectsProperty。这是我正在测试的代码,试图弄清楚如何执行此操作:
namespace SubclassTesting
{
class Program
{
static void Main(string[] args)
{
int x;
Console.WriteLine("type a number");
x = Convert.ToInt32(Console.ReadLine());
OuterClass TestClass = new OuterClass();
TestClass.OuterNumber = x;
TestClass.InnerClass.InnerNumber = x;
Console.WriteLine("success!");
Console.ReadKey();
}
}
class OuterClass
{
public OuterClass()
{
_InnerClass InnerClass = new _InnerClass();
}
public int OuterNumber { get; set; }
public class _InnerClass
{
public int InnerNumber { get; set; }
}
public _InnerClass InnerClass { get; set; }
}
}
此代码在TestClass.InnerClass.InnerNumber = x上失败; with NullReferenceException - 未将对象引用设置为对象的实例。
构造函数似乎什么都不做,并且它无论是否有效都无法使用。
这甚至可能吗?我想实例化单个OuterClass对象,并让所有包含的对象实例化,并可通过OuterClass对象访问。这样我只需要在方法中传递单个对象,但可以保持内部工作在逻辑上彼此分离。
答案 0 :(得分:6)
public OuterClass()
{
_InnerClass InnerClass = new _InnerClass();
}
您正在构造函数中创建一个局部变量InnerClass
- 这对您没有帮助 - 您需要该属性:
InnerClass = new _InnerClass();
我对整个方法提出质疑。一般来说,我没有看到嵌套类在这里买到什么,一般来说我会尽量避免使用它们,因为它们增加了复杂性。
答案 1 :(得分:4)
_InnerClass InnerClass = new _InnerClass();
在构造函数中声明一个局部变量;它将在构造函数完成后立即丢弃。如果你这样做
InnerClass = new _InnerClass();
相反,您实际上将在外部类的新实例中设置成员变量。
顺便说一句,我强烈建议您调用内部类InnerClass
和变量_innerClass
,因为这符合C#命名约定;你当前的命名一定会让大多数人感到困惑。
答案 2 :(得分:1)
您在构造函数中声明了 new 变量_InnerClass InnerClass
。删除_InnerClass
,它将开始工作: - )
答案 3 :(得分:1)
我认为如果您将OuterClass
ctor更改为
public OuterClass()
{
_InnerClass = new _InnerClass();
}
它会更好用!
答案 4 :(得分:1)
包含InnerClass的构造函数局部变量,然后将其转储。将其更改为:
public OuterClass()
{
this.InnerClass = new _InnerClass();
}
答案 5 :(得分:1)
您需要创建InnerClass的公共实例
class OuterClass
{
public _InnerClass InnerClass;
public OuterClass()
{
InnerClass = new _InnerClass();
}
public int OuterNumber { get; set; }
public class _InnerClass
{
public int InnerNumber { get; set; }
}
public _InnerClass InnerClass { get; set; }
}