ottenere e impostare le questioni
Domanda
Ecco il codice che dimostra il mio problema (tutto nello stesso spazio dei nomi):
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()
{
....
}
Non potrò mai arrivare a doSomething () e voglio davvero. Che cosa sto facendo di sbagliato? I valori saranno tutti vengono impostati correttamente, ma non ho mai sembrano avere in quella parte del set di BGroup.
Grazie
Soluzione
Non si può mai imposta BGroup
a tutti. Le cose si fanno più vicini sono Fubar.BGroup.A = true
e bGroup = new BoolGroup();
.
Fubar.BGroup.A = true
si la proprietà BGroup
, e imposta la proprietà A
sull'oggetto BoolGroup
, non imposta il BGroup
.
bGroup = new BoolGroup()
imposta il campo sostegno della proprietà BGroup
, ed è per questo che si ottiene quando si arriva BoolGroup
BGroup
, ma non passa attraverso il setter.
Se si desidera utilizzare il setter, la classe Foo
dovrebbe essere simile a questo:
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();
}
}
}
Altri suggerimenti
Nel codice, non si è mai impostazione BGroup. Si sta impostando A, che è un proprietà di BGroup.
Provare qualcosa di simile
this.Fubar.BGroup = new BoolGroup();
Non sta chiamando il setter della proprietà BGroup con questa dichiarazione:
this.Fubar.BGroup.A = true;
"this.Fubar.BGroup" chiama il getter (restituisce una BoolGroup) e con ".A = true" si sta chiamando il palleggiatore della Una proprietà di BoolGroup.
this.Fubar.BGroup.A = true;
è l'impostazione della proprietà A di Fubar.BGroup, non è l'impostazione Fubar.BGroup.
Il tuo codice sembra a posto. Il motivo non sta provocando è perché non si è in realtà imposta Fubar.BGroup ovunque. Si sta impostando Fubar.BGroup.A nel costruttore Form .... questo non attiverà il metodo doSomething. Hai bisogno di fare qualcosa di simile:
this.Fubar.BGroup = new BGroup();
o farlo internamente nel costruttore Foo:
public Foo()
{
this.BGroup = new BGroup();
}