更改派生类中属性的值?

时间:2010-04-23 14:31:51

标签: c# inheritance attributes

我在一个用属性标记的基类中有一个属性,我想更改每个派生类中的一些属性。这样做的最佳方式是什么?

据我所知,我必须在我的基类中将属性定义为抽象,并覆盖每个基类中的属性,并重新定义所有属性。这似乎是多余的,我并不为此疯狂,因为我必须重复每个派生类中的公共属性。

这是我正在尝试做的简化示例。我想在派生类中更改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  
}

1 个答案:

答案 0 :(得分:0)

您可以使用GetCustomAttributes方法返回所有继承级别的所有属性,或仅返回已实现的类。不幸的是,这不允许您覆盖'AllowMultiple = false'属性。您可以创建一个调用GetCustomAttribute两次的方法,一次使用继承值,一次不使用。然后,您可以为继承的值提供非继承的值首选项。如果需要,我可以稍后发布样本。