0

这是演示我的问题的代码(都在同一个命名空间中):

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()
{
    ....
}

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

谢谢

4

5 回答 5

3

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

尝试类似的东西

this.Fubar.BGroup = new BoolGroup();
于 2009-09-28T16:20:45.770 回答
3

你从来没有设置BGroup过。你做的最接近的事情是Fubar.BGroup.A = truebGroup = new BoolGroup();
Fubar.BGroup.A = true 获取BGroup属性,并在对象上设置属性ABoolGroup它不设置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();
        }
    }
}
于 2009-09-28T16:22:45.967 回答
0

您没有使用以下语句调用 BGroup 属性的设置器:

this.Fubar.BGroup.A = true;

“this.Fubar.BGroup”调用getter(返回一个BoolGroup),而“.A = true”则调用BoolGroup的A属性的setter。

于 2009-09-28T16:23:52.117 回答
0
this.Fubar.BGroup.A = true;

正在设置 Fubar.BGroup 的属性 A,而不是设置 Fubar.BGroup。

于 2009-09-28T16:24:01.877 回答
0

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

this.Fubar.BGroup = new BGroup();

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

public Foo()
{
    this.BGroup = new BGroup();
}
于 2009-09-28T16:24:15.170 回答