Frage

Hier ist der Code, der mein Problem (alle im gleichen Namensraum) zeigt:

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

Ich werde nie zu doSomething get () und ich möchte wirklich. Was mache ich falsch? Die Werte werden alle richtig fertig, aber ich glaube, nie in dem der Satz Teil bgroup zu erhalten.

Danke

War es hilfreich?

Lösung

Sie überhaupt nicht eingestellt BGroup. Die nächsten Dinge, die Sie tun, sind Fubar.BGroup.A = true und bGroup = new BoolGroup();.
Fubar.BGroup.A = true wird die BGroup Eigenschaft und setzt die A Eigenschaft auf dem BoolGroup Objekt, es ist nicht die BGroup nicht gesetzt.
bGroup = new BoolGroup() setzt das dahinter liegende Feld der BGroup Eigenschaft, weshalb Sie diese BoolGroup erhalten, wenn Sie BGroup bekommen, aber es geht nicht durch den Setter.

Wenn Sie die Setter verwenden möchten, Ihre Foo Klasse wie folgt sein sollte:

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

Andere Tipps

In Ihrem Code, sie ist nie bgroup Einstellung. Sie Einstellung A, die eine Eigenschaft von bgroup.

Versuchen Sie so etwas wie

this.Fubar.BGroup = new BoolGroup();

Sie rufen nicht die Setter der bgroup Eigenschaft mit dieser Aussage:

this.Fubar.BGroup.A = true;

"this.Fubar.BGroup" ruft die Getter (liefert eine BoolGroup) und mit ".Ein = true" können Sie die Setter der A-Eigenschaft BoolGroup anrufen.

this.Fubar.BGroup.A = true;

ist die Eigenschaft A von Fubar.BGroup Einstellung, es ist Fubar.BGroup nicht einstellen.

Der Code sieht gut aus. Der Grund ist es nicht auslöst, weil Sie nicht tatsächlich überall Einstellung Fubar.BGroup. Sie sind Fubar.BGroup.A im Formularkonstruktor Einstellung .... dies wird die doSomething Methode nicht auslösen. Sie tun müssen, um so etwas wie:

this.Fubar.BGroup = new BGroup();

oder tut es intern in Ihrem Foo-Konstruktor:

public Foo()
{
    this.BGroup = new BGroup();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top