En C#, ¿puedo ocultar/modificar accesorios en subclases?
-
22-09-2019 - |
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?
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; }