Em C#, posso ocultar/modificar acessadores em subclasses?
-
22-09-2019 - |
Pergunta
Eu nem tenho certeza do que esse princípio é chamado ou como procurá -lo, então peço desculpas sinceramente se já foi criado antes, mas a melhor maneira de fazê -lo é com um exemplo.
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);
}
}
A idéia é ter algum objeto que instancie MyClass
ter uma propriedade totalmente acessível ClassProperties
. Para esse objeto, pareceria exatamente um objeto de propriedades, mas nos bastidores, a MyClass está realmente calculando e modificando os resultados dos campos. Este método de declaração está obviamente errado, pois não posso acessar GetActualName()
e SetActualName()
De dentro do SubProperties
definição. Como eu conseguiria algo assim?
Solução
Você está procurando algo parecido com isto?
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;
}
}
Você precisa passar uma referência a uma instância do MyClass para a instância das subpropertidades se deseja acessar métodos myClass a partir de subproperturas.
Outras dicas
public virtual string Name { get; set; }