gpt4 book ai didi

c# - C#属性类的继承

转载 作者:太空狗 更新时间:2023-10-29 21:54:31 25 4
gpt4 key购买 nike

属性类的继承在 C# 中如何工作?澄清一下,我说的是属性类本身的继承(即 System.Attributes 的基类),而不是碰巧将它们作为属性的任何类。

出于某种原因,我似乎找不到任何关于此的内容(我的搜索总是出现其他含义)。

例如,如果有一个类 AttributeA 扩展 System.Attribute:

  1. 我是否必须使用 [AttributeUsage()] 单独标记 AttributeA 的子类。 (由于 System.AttributeUsage 的继承是 true,我想我不会。)

  2. AttributeAAttributeUsage 上的 AllowMultiple=false 是否会阻止我拥有多个 子类 AttributeA 表示属性?

编辑:

程序员只能阅读代码。

[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
class AttributeA
{ }

class AttributeB : AttributeA
{ }

class AttributeC : AttributeA
{ }

[AttributeB]
[AttributeC]
class Foo
{ }

这个有用吗?

最佳答案

(终于可以试试了。)

示例代码可以编译。我仍然喜欢有文档,尽管我认为 C# 就是 C# 并且它不会改变这一点。 (对吗?)

显然:

  1. 子类继承 AttributeUsage,正如预期的那样。
  2. AllowMultiple 引用(严格)原始类的属性,而不是子类。
  3. 此外,AttributeUsage 可以有效地“重新定义”。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
class AttributeA : Attribute
{ }

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
class AttributeB : AttributeA
{ }

class AttributeC : AttributeA
{ }

下面是可以的

[AttributeA]
[AttributeB]
[AttributeB]
[AttributeC]
class Foo
{ }

但这不是

[AttributeA]
[AttributeB]
[AttributeC]
[AttributeC]
class Foo
{ }

关于c# - C#属性类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com