Я хотел бы добавить атрибуты к свойствам класса, от которого я наследую (который я не могу редактировать, потому что он сгенерирован). Я попытался сделать это, переопределив их в дочернем классе с ключевым словом «new» и добавив атрибут.
Это, казалось, работало, пока я не заметил некоторые проблемы, которые это вызывало, когда размышлял над экземпляром ребенка, и заметил, что свойство не копировалось. Смотрите следующий пример:
namespace ConsoleApp
{
class Program
{
public class BaseClass
{
public string Name { get; set; }
}
public class ChildClass : BaseClass
{
[MyAttribute]
new public string Name { get; set; }
}
static void Main(string[] args)
{
var source = new ChildClass();
source.Name = "foo";
var target = new ChildClass();
var properties = typeof(BaseClass).GetProperties();
foreach(PropertyInfo property in properties)
{
var value = property.GetValue(source);
property.SetValue(target, value);
}
Console.WriteLine(target.Name); // Prints nothing
}
}
}
Если я проверяю исходный объект после того, как установил свойство «Имя», выясняется, что родительское и дочернее свойства «Имя» существуют для дочернего объекта, и что заполнен только дочерний объект (см. Изображение ниже). Я предполагаю, что свойство родителя в копии является копией, поскольку оно равно нулю в целевом объекте. Я предполагаю, что это все из-за использования (или неправильного использования) повторного выделения свойства с "новым".
Я предполагаю, что неправильно использую новое ключевое слово здесь, но есть ли другой способ добавить атрибут к свойству базового класса из дочернего класса без возможности редактировать родительский класс?