2016-05-27 3 views
0

Возможно ли иметь метод в базовом классе для изменения свойств производного класса? Я что-то подобное мышление:Изменение значений производных классов из базового класса

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

Кажется, кодовый запах мне. Я бы предпочел, чтобы виртуальный метод в базовом классе сделал модификацию. Он может быть пустым в базовом классе и перегружен в любых производных классах, которые в нем нуждаются. –

+0

Если вы делаете что-то вроде реализации INotifyPropertyChanged, это довольно часто. Вместо свойстваName вы передаете свойство методу по ссылке. Хотя на втором взгляде, вы на самом деле пытаетесь переписать имя свойства. Вы не можете/не хотите этого делать. – Jonesopolis

ответ

0

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

Solution:

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); 
    } 
} 
Смежные вопросы