изменение производных значений класса из базового класса

Можно ли использовать метод в базовом классе для изменения свойств производного класса? Я думал что-то вроде этого:

public class baseclass
{
  public void changeProperties(string propertyName, string newValue)
  {
    try
    {
      this.propertyName = newValue;
    }
    catch
    {
      throw new NullReferenceException("Property doesn't exist!");
    }
  }
}

1 ответ

  1. Вы можете решить вашу проблему через отражение, потому thisчто тип ссылки будет равен фактическому типу, т. е. типу производного класса:

    Решение:

    public class baseclass
    {
        public void changeProperties(string propertyName, object newValue)
        {            
            var prop = GetType().GetProperty(propertyName);
            if (prop == null)
                throw new NullReferenceException("Property doesn't exist!");
            else
                prop.SetValue(this, newValue);
        }
    }
    

    Реализация:

    public class Test : baseclass
    {
        public int Age { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var test = new Test();
            test.changeProperties("Age", 2);
        }
    }