Question

Voici le code qui montre mon problème (tous dans le même espace):

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

Je ne pourrai jamais se rendre à doSomething () et je veux vraiment. Qu'est-ce que je fais mal? Les valeurs auront tous réglées correctement, mais je ne semblent jamais entrer dans ce que la partie jeu de Bgroup.

Merci

Était-ce utile?

La solution

Vous ne définissez BGroup du tout. Les plus proches que vous faites sont Fubar.BGroup.A = true et bGroup = new BoolGroup();.
Fubar.BGroup.A = true obtient la propriété BGroup et définit la propriété A sur l'objet BoolGroup, il ne définit pas la BGroup.
bGroup = new BoolGroup() définit le champ de support de la propriété BGroup, ce qui explique pourquoi vous obtenez ce BoolGroup quand vous obtenez BGroup, mais il ne passe pas par le poseur.

Si vous voulez utiliser le setter, votre classe Foo devrait ressembler à ceci:

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();
        }
    }
}

Autres conseils

Dans votre code, vous configurez jamais Bgroup. Vous configurez A, qui est une propriété de Bgroup.

Essayez quelque chose comme

this.Fubar.BGroup = new BoolGroup();

Vous n'êtes pas appeler le poseur de la propriété Bgroup avec cette déclaration:

this.Fubar.BGroup.A = true;

"this.Fubar.BGroup" appelle le getter (retourne un BoolGroup) et ".A = true" que vous appelez le poseur de la Une propriété de BoolGroup.

this.Fubar.BGroup.A = true;

est définissant la propriété A Fubar.BGroup, ce n'est pas mise Fubar.BGroup.

Votre code semble bien. La raison pour laquelle il ne déclenche pas parce que vous n'êtes pas réellement Fubar.BGroup partout définissez. Vous définissez Fubar.BGroup.A dans le constructeur de formulaire .... cela ne déclenche pas la méthode doSomething. Vous devez faire quelque chose comme:

this.Fubar.BGroup = new BGroup();

ou le faire en interne dans votre constructeur Foo:

public Foo()
{
    this.BGroup = new BGroup();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top