В C#я могу скрыть/изменить аксессов на подклассах?
-
22-09-2019 - |
Вопрос
Я даже не уверен, как называется этот принцип или как его искать, поэтому я искренне извиняюсь, если он был воспитан раньше, но лучший способ сделать это - с примером.
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);
}
}
Идея состоит в том, чтобы иметь любой объект, который экстремирует MyClass
иметь полностью доступное свойство ClassProperties
. Анкет Для этого объекта он будет выглядеть точно так же, как объект свойств, но за кулисами MyClass на самом деле вычисляет и изменяет результаты полей. Этот метод объявления, очевидно, неверен, так как я не могу получить доступ GetActualName()
а также SetActualName()
из SubProperties
определение. Как я бы достиг чего -то подобного?
Решение
Вы ищете что -то подобное?
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;
}
}
Вам необходимо передать ссылку на экземпляр MyClass в экземпляр подпропертизаторов, если вы хотите получить доступ к методам MyClass из подпроперти.
Другие советы
public virtual string Name { get; set; }