以下是演示我的问题的代码(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的设置部分。
由于
答案 0 :(得分:3)
在您的代码中,您永远不会设置BGroup。您正在设置A,这是BGroup的属性。
尝试类似
的内容this.Fubar.BGroup = new BoolGroup();
答案 1 :(得分:3)
你根本没有设置BGroup
。您最接近的事情是Fubar.BGroup.A = true
和bGroup = 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();
}