属性上的Inherited
bool属性是指什么?
这是否意味着如果我使用属性AbcAtribute
定义我的类(具有Inherited = true
),并且如果我从该类继承另一个类,那么派生类也将具有相同的属性适用于它?
使用代码示例澄清此问题,请想象以下内容:
[AttributeUsage(AttributeTargets.Class, Inherited = true)]
public class Random: Attribute
{ /* attribute logic here */ }
[Random]
class Mother
{ }
class Child : Mother
{ }
Child
是否也应用了Random
属性?
答案 0 :(得分:105)
当Inherited = true(默认值)时,表示您创建的属性可以由属性修饰的类的子类继承。
所以 - 如果你用[AttributeUsage(Inherited = true)]创建MyUberAttribute
[AttributeUsage (Inherited = True)]
MyUberAttribute : Attribute
{
string _SpecialName;
public string SpecialName
{
get { return _SpecialName; }
set { _SpecialName = value; }
}
}
然后通过装饰超类来使用属性......
[MyUberAttribute(SpecialName = "Bob")]
class MySuperClass
{
public void DoInterestingStuf () { ... }
}
如果我们创建MySuperClass的子类,它将具有此属性...
class MySubClass : MySuperClass
{
...
}
然后实例化MySubClass的实例......
MySubClass MySubClassInstance = new MySubClass();
然后测试它是否具有属性......
MySubClassInstance< ---现在将MyUberAttribute与“Bob”作为SpecialName值。
答案 1 :(得分:14)
是的,这正是它的含义。 Attribute
[AttributeUsage(Inherited=true)]
public class FooAttribute : System.Attribute
{
private string name;
public FooAttribute(string name)
{
this.name = name;
}
public override string ToString() { return this.name; }
}
[Foo("hello")]
public class BaseClass {}
public class SubClass : BaseClass {}
// outputs "hello"
Console.WriteLine(typeof(SubClass).GetCustomAttributes(true).First());
答案 2 :(得分:1)
默认情况下启用属性继承。
您可以通过以下方式更改此行为:
[AttributeUsage (Inherited = False)]