c类中的类的getter和setter

假设我们有一个带有属性和getter / setter的类InnerClass。 我们还有一个包含InnerClass的类OuterClass。

例如

class InnerClass { private int m_a; private int m_b; public int M_A { get { return m_a; } set { m_a = value; } } } class OuterClass { private InnerClass innerClass } 

我如何为OuterClass的innerClass成员实现正确的getter和setter?

提前致谢!

语法不会有任何不同。 只是…

 public InnerClass InnerClass { get { return innerClass; } set { innerClass = value; } } 

顺便说一句,如果您在.NET 3.5中使用C#,那么您可以使用自动属性生成function,如果您拥有的只是一个只读取和写入后备存储的简单属性(就像您上面所做的那样)。 sytax类似于抽象属性:

 public InnerClass InnerClass { get; set; } 

这会自动生成一个私有成员进行存储,然后在get读取并在set写入。

最优雅的方法是使用隐式getter和setter:

 class InnerClass { public int a{ get; set; } public int b{ get; set; } } class OuterClass { public InnerClass innerClass{ get; set; } } 

这隐含地与:

 class InnerClass { private int _a; public int a { get { return _a; } set { _a = value; } } private int _b; public int b { get { return _b; } set { _b = value; } } } class OuterClass { private InnerClass _innerClass; public InnerClass innerClass { get { return _innerClass; } set { _innerClass = value; } } } 

这两个定义含义相同 – 减去很多键击。 在第一个示例中,编译器将在幕后实现必要的私有字段,因此您不必这样做。 第二种方法可以让您更好地控制正在发生的事情。

 public InnerClass InnerClass { get { return innerClass; } set { innerClass = value; } } 

这取决于内部阶级应该如何运作。 外部类可能需要“拥有”内部类,在这种情况下:

 public InnerClass InnerClass{ get{ return innerClass; } set{ innerClass.CopyFrom(value); /* Pseudo method call */ } } 

通过这种方式,您可以防止外部代码操作实例,除非显式通过OuterClass。

如果您的意思是在不暴露内部类本身的情况下访问内部类成员,则可以使用以下代码。 如果您只想公开this.innerClass ,那么暴露this.innerClass字段的方式没有区别。

 class OuterClass { private InnerClass innerClass public int M_A { get { if (this.innerClass != null) { return this.innerClass.M_A; } else { throw new InvalidOperationException(); } } set { if (this.innerClass != null) { this.innerClass.M_A = value; } else { throw new InvalidOperationException(); } } } }