Kann ich in C#Zubehör in Unterklassen verbergen/ändern?
-
22-09-2019 - |
Frage
Ich bin mir nicht einmal sicher, wie dieses Prinzip genannt wird oder wie ich danach suchen soll. Deshalb entschuldige ich mich aufrichtig, wenn es schon einmal angesprochen wurde, aber der beste Weg, dies zu tun, ist ein Beispiel.
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);
}
}
Die Idee ist, ein Objekt zu haben, das es instanziiert MyClass
eine voll zugängliche Eigenschaft haben ClassProperties
. Für dieses Objekt würde es genau wie ein Eigenschaftenobjekt aussehen, aber hinter den Kulissen berechnet und modifiziert Myclass die Ergebnisse der Felder. Diese Erklärungsmethode ist offensichtlich falsch, da ich nicht zugreifen kann GetActualName()
und SetActualName()
von innerhalb der SubProperties
Definition. Wie würde ich so etwas erreichen?
Lösung
Suchen Sie so etwas?
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;
}
}
Sie müssen einen Verweis auf eine MyClass -Instanz an die Subproperties -Instanz weitergeben, wenn Sie von Subproperties aus Myclassmethoden zugreifen möchten.
Andere Tipps
public virtual string Name { get; set; }