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

È stato utile?

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top