我想将属性添加到我要从中继承的类的属性中(由于它已生成,因此我无法编辑)。我试图通过使用“ 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
}
}
}
如果在设置“名称”(Name)属性之后检查源对象,则该子对象上同时存在父级和子级的“名称”(Name)属性,并且仅填充了子级的对象(请参见下图)。我假设其中一个是父对象的属性,因为它在目标对象中为null。我认为这都是由于使用(或滥用)了用“ new”重新声明该属性。
我假设我在这里误用了new关键字,但是还有另一种方法可以从子类向基类的属性添加属性,而不能编辑父类? < / p>
答案 0 :(得分:0)
您可以阴影属性,但使用基本属性的值:
[MyAttribute]
new public string Name {
get => base.Name;
set => base.Name = value;
}