Pergunta

Eu nem tenho certeza do que esse princípio é chamado ou como procurá -lo, então peço desculpas sinceramente se já foi criado antes, mas a melhor maneira de fazê -lo é com um exemplo.

class Properties
{
  public string Name { get; set; }
}

class MyClass
{
    class SubProperties: Properties
    {
        public override Name
        {
            get { return GetActualName(); }
            set { SetActualName(value); }
        }
    }

    public SubProperties ClassProperties;

    private string GetActualName()
    {
        return SomeFunction();
    }

    private void SetActualName(string s)
    {
        ClassProperties.Name = SomeOtherFunction(s);
    }
}

A idéia é ter algum objeto que instancie MyClass ter uma propriedade totalmente acessível ClassProperties. Para esse objeto, pareceria exatamente um objeto de propriedades, mas nos bastidores, a MyClass está realmente calculando e modificando os resultados dos campos. Este método de declaração está obviamente errado, pois não posso acessar GetActualName() e SetActualName() De dentro do SubProperties definição. Como eu conseguiria algo assim?

Foi útil?

Solução

Você está procurando algo parecido com isto?

abstract class Properties
{
    public abstract string Name { get; set; }
}

class MyClass
{
    private class SubProperties : Properties
    {
        private MyClass myClass;

        public SubProperties(MyClass myClass)
        {
            this.myClass = myClass;
        }

        public override Name
        {
            get { return this.myClass.GetActualName(); }
            set { this.myClass.SetActualName(value); }
        }
    }

    private string name;

    public MyClass
    {
        this.MyClassProperties = new SubProperties(this);
    }

    public Properties MyClassProperties { get; private set; }

    private string GetActualName()
    {
        return this.name;
    }

    private void SetActualName(string s)
    {
        this.name = s;
    }
}

Você precisa passar uma referência a uma instância do MyClass para a instância das subpropertidades se deseja acessar métodos myClass a partir de subproperturas.

Outras dicas

public virtual string Name { get; set; }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top