In C #, posso nascondere / modificare di accesso in sottoclassi?
-
22-09-2019 - |
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?
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; }