2009-09-28 11 views
0

Voici le code qui montre mon problème (tous dans le même espace de noms):obtenir et définir les questions

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 seront toutes définies correctement, mais je ne semble jamais entrer dans cette partie de BGroup.

Merci

+1

Quelle langue parlez-vous? –

+2

vous obtiendrez plus de gens à regarder si vous mettez la langue dans les balises, je suppose C#? –

+0

Définitivement C#. Quelle autre langue a toutes les choses que nous voyons utilisées ici? – Joren

Répondre

3

Vous jamais mis BGroup du tout. Les choses les plus proches que vous faites sont Fubar.BGroup.A = true et bGroup = new BoolGroup();.
Fubar.BGroup.A = trueobtient 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, c'est pourquoi vous obtenez ce BoolGroup lorsque vous obtenez BGroup, mais il ne passe pas par le setter.

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

Toutes les réponses ont résolu le problème, mais celui-ci m'a expliqué le mieux. Merci à tous. – EatATaco

3

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

Essayez quelque chose comme

this.Fubar.BGroup = new BoolGroup(); 
0

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

this.Fubar.BGroup.A = true; 

« ce .Fubar.BGroup "appelle getter (retourne un BoolGroup) et avec" .A = true "vous appelez le setter de la propriété A de BoolGroup.

0
this.Fubar.BGroup.A = true; 

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

0

Votre code a l'air bien. La raison pour laquelle il ne se déclenche pas est que vous ne définissez pas Fubar.BGroup n'importe où. Vous définissez Fubar.BGroup.A dans le constructeur Form .... cela ne déclenchera 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(); 
} 
+0

Votre première suggestion est bien, mais votre deuxième suggestion est fondamentalement la même que ce qu'il fait déjà. Voulez-vous dire 'this.BGroup = new BGroup();' – Joren

+0

Désolé, c'était censé être la propriété et non le domaine privé que j'assignais. Je vais mettre à jour. – James