得到并设置问题

时间:2009-09-28 16:15:05

标签: c# accessor

以下是演示我的问题的代码(All在同一名称空间中):

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Fubar.BGroup.A = true;
    }

    public Foo Fubar = new Foo();
}

public class Foo
{
    public Foo()
    {
    }

    private BoolGroup bGroup = new BoolGroup();
    public BoolGroup BGroup
    {
        get{ return this.bGroup; }
        set
        { 
            this.bGroup = value;
            this.doSomething();
        }
    }
}

public class BoolGroup
{
    public BoolGroup()
    {
    }

    private bool a;
    public bool A
    {
        get { return this.a; }
        set { this.a = value; }
    }
}

private void doSomething()
{
    ....
}

我永远不会做某事(),我真的很想。我究竟做错了什么?这些值都将被正确设置,但我似乎永远不会进入BGroup的设置部分。

由于

5 个答案:

答案 0 :(得分:3)

在您的代码中,您永远不会设置BGroup。您正在设置A,这是BGroup的属性

尝试类似

的内容
this.Fubar.BGroup = new BoolGroup();

答案 1 :(得分:3)

你根本没有设置BGroup。您最接近的事情是Fubar.BGroup.A = truebGroup = new BoolGroup(); Fubar.BGroup.A = true 获取 BGroup属性,并在A对象上设置BoolGroup属性,但未设置BGroup
bGroup = new BoolGroup()设置了BGroup属性的支持字段,这就是为什么在获得BoolGroup时得到BGroup,但它不会通过设置器。

如果你想使用setter,你的Foo类应该是这样的:

public class Foo
{
    public Foo()
    {
        // Note uppercase on BGroup to access the property and 
        //   not its backing field.
        BGroup = new BoolGroup(); 
    }

    private BoolGroup bGroup;
    public BoolGroup BGroup
    {
        get{ return this.bGroup; }
        set
        { 
            this.bGroup = value;
            this.doSomething();
        }
    }
}

答案 2 :(得分:0)

您没有使用以下语句调用BGroup属性的setter:

this.Fubar.BGroup.A = true;

“this.Fubar.BGroup”调用getter(返回BoolGroup)并使用“.A = true”调用BoolGroup的A属性的setter。

答案 3 :(得分:0)

this.Fubar.BGroup.A = true;

正在设置Fubar.BGroup的属性A,它没有设置Fubar.BGroup。

答案 4 :(得分:0)

您的代码看起来很好。它没有触发的原因是因为你实际上并没有在任何地方设置Fubar.BGroup。您正在Form构造函数中设置Fubar.BGroup.A ....这不会触发doSomething方法。您需要执行以下操作:

this.Fubar.BGroup = new BGroup();

或在你的Foo构造函数内部执行:

public Foo()
{
    this.BGroup = new BGroup();
}
相关问题