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(); } } } }