我在一个用属性标记的基类中有一个属性,我想更改每个派生类中的一些属性。这样做的最佳方式是什么?
据我所知,我必须在我的基类中将属性定义为抽象,并覆盖每个基类中的属性,并重新定义所有属性。这似乎是多余的,我并不为此疯狂,因为我必须重复每个派生类中的公共属性。
这是我正在尝试做的简化示例。我想在派生类中更改MyAttribute
,但保持属性上的所有其他属性相同并在一个地方定义(即我不想不止一次重新定义XmlElement
)。这甚至可能吗?或者有更好的方法吗?或者我在这里完全滥用属性?
using System;
using System.Xml;
using System.Xml.Serialization;
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class MyAttribute : System.Attribute
{
public MyAttribute() {}
public string A { get; set; }
public string B { get; set; }
}
public abstract class BaseClass
{
public BaseClass() {}
[XmlElement("some_property")]
[MyAttribute(A = "Value1", B = "Value2")]
public string SomeProperty { get; set; }
}
public class FirstDerivedClass : BaseClass
{
//I want to change value B to something else
//in the MyAttribute attribute on property SomeProperty
}
public class SecondDerivedClass : BaseClass
{
//I want to change value B to yet another value
//in the MyAttribute attribute on property SomeProperty
}
答案 0 :(得分:0)
您可以使用GetCustomAttributes方法返回所有继承级别的所有属性,或仅返回已实现的类。不幸的是,这不允许您覆盖'AllowMultiple = false'属性。您可以创建一个调用GetCustomAttribute两次的方法,一次使用继承值,一次不使用。然后,您可以为继承的值提供非继承的值首选项。如果需要,我可以稍后发布样本。