Domanda

Io non sono nemmeno sicuro di quello che questo principio si chiama o come cercare per esso, quindi mi scuso sinceramente se è stato allevato in precedenza, ma il modo migliore per farlo è con un esempio.

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

L'idea è di avere un oggetto che crea un'istanza MyClass hanno un ClassProperties struttura completamente accessibile. A tale oggetto, essa apparirebbe esattamente come un oggetto di proprietà, ma dietro le quinte, MyClass è in realtà il calcolo e modificare i risultati dei campi. Questo metodo di dichiarazione è ovviamente sbagliato poiché non posso accedere GetActualName() e SetActualName() dall'interno la definizione SubProperties. Come faccio a ottenere qualcosa di simile?

È stato utile?

Soluzione

Sei alla ricerca di qualcosa di simile?

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

È necessario passare un riferimento a un'istanza di MyClass all'istanza sottoproprietà, se si desidera accedere ai metodi MyClass da sottoproprietà.

Altri suggerimenti

public virtual string Name { get; set; }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top