Вопрос

Вот код, демонстрирующий мою проблему (все в одном пространстве имен):

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

Мне никогда не удастся выполнить функцию doSomething(), а я очень этого хочу.Что я делаю не так?Все значения будут установлены правильно, но я, кажется, никогда не вникал в эту установленную часть BGroup.

Спасибо

Это было полезно?

Решение

Вы никогда не устанавливали BGroup совсем.Самое близкое, что вы делаете, это Fubar.BGroup.A = true и bGroup = new BoolGroup();.
Fubar.BGroup.A = true получает тот BGroup свойство и устанавливает A недвижимость на BoolGroup объект, он не устанавливает BGroup.
bGroup = new BoolGroup() устанавливает поле поддержки BGroup собственность, вот почему вы получаете это BoolGroup когда вы получаете BGroup, но он не проходит через установщик.

Если вы хотите использовать установщик, ваш Foo класс должен быть таким:

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

Другие советы

В своем коде вы никогда не устанавливаете BGroup.Вы устанавливаете A, который свойство компании БГрупп.

Попробуйте что-нибудь вроде

this.Fubar.BGroup = new BoolGroup();

Вы не вызываете установщик свойства BGroup с помощью этого оператора:

this.Fubar.BGroup.A = true;

«this.Fubar.BGroup» вызывает метод получения (возвращает BoolGroup), а с помощью «.A = true» вы вызываете метод установки свойства A BoolGroup.

this.Fubar.BGroup.A = true;

устанавливает свойство A Fubar.BGroup, а не Fubar.BGroup.

Ваш код выглядит нормально.Причина, по которой он не срабатывает, заключается в том, что вы фактически нигде не устанавливаете Fubar.BGroup.Вы устанавливаете Fubar.BGroup.A в конструкторе формы... это не запускает метод doSomething.Вам нужно сделать что-то вроде:

this.Fubar.BGroup = new BGroup();

или сделайте это внутри вашего конструктора Foo:

public Foo()
{
    this.BGroup = new BGroup();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top