c类中的类的getter和setter

时间:2009-05-11 12:37:33

标签: c# class member setter getter

假设我们有一个带有属性和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?

提前致谢!

5 个答案:

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