Pregunta

Ni siquiera estoy seguro de cómo se llama este principio o cómo buscarlo, por lo que me disculpo sinceramente si se ha mencionado antes, pero la mejor manera de hacerlo es con un ejemplo.

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

La idea es tener algún objeto que instancie MyClass tener una propiedad totalmente accesible ClassProperties. Para ese objeto, se vería exactamente como un objeto de propiedades, pero detrás de escena, MyClass en realidad está calculando y modificando los resultados de los campos. Este método de declaración es obviamente incorrecto ya que no puedo acceder GetActualName() y SetActualName() desde dentro del SubProperties definición. ¿Cómo lograría algo como esto?

¿Fue útil?

Solución

¿Estás buscando algo como esto?

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

Debe aprobar una referencia a una instancia de MyClass a la instancia de subproperios si desea acceder a los métodos MyClass desde las subproperios.

Otros consejos

public virtual string Name { get; set; }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top