c类中的类的getter和setter

14 c# getter setter class member

假设我们有一个带有属性和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
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Ada*_*son 26

语法不会有任何不同.只是...

public InnerClass InnerClass
{
    get { return innerClass; }
    set { innerClass = value; }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果你在.NET 3.5中使用C#,你可以使用自动属性生成功能,如果你拥有的只是一个简单的属性,它只是读写一个后备存储(就像你上面的那样).sytax类似于抽象属性:

public InnerClass InnerClass { get; set; }
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*ter 21

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

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

class OuterClass
{
  public InnerClass innerClass{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这隐含地与:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • ......这与我的答案有什么不同? (2认同)
  • @Adam,对不起,当我发布我的答案时,我没有看到你的答案.我猜你在我写答案的时候发帖了. (2认同)