假设我们有一个带有属性和getter / setter的类InnerClass。我们还有一个包含InnerClass的类OuterClass。
e.g。
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?
提前致谢!
答案 0 :(得分:26)
语法不会有任何不同。只是......
public InnerClass InnerClass
{
get { return innerClass; }
set { innerClass = value; }
}
顺便说一句,如果您在.NET 3.5中使用C#,那么您可以使用自动属性生成功能,如果您拥有的只是一个只读取和写入后备存储的简单属性(就像您上面所做的那样)。 sytax类似于抽象属性:
public InnerClass InnerClass { get; set; }
这会自动生成一个私有成员进行存储,然后在get
中从中读取并在set
中写入。
答案 1 :(得分:21)
最优雅的方法是使用隐式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;
}
}
}
这两个定义含义相同 - 减去很多按键。在第一个示例中,编译器将在幕后实现必要的私有字段,因此您不必这样做。然而,第二个让你更好地控制正在发生的事情。
答案 2 :(得分:2)
public InnerClass InnerClass
{
get
{
return innerClass;
}
set
{
innerClass = value;
}
}
答案 3 :(得分:0)
这取决于内部类应该如何工作。外部类可能需要“拥有”内部类,在这种情况下:
public InnerClass InnerClass{
get{ return innerClass; }
set{ innerClass.CopyFrom(value); /* Pseudo method call */ }
}
通过这种方式,您可以防止外部代码操纵实例,除非通过OuterClass显式实现..
答案 4 :(得分:0)
如果您的意思是在不暴露内部类本身的情况下访问内部类成员,则可以使用以下代码。如果您只想公开this.innerClass
,则公开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();
}
}
}
}