gpt4 book ai didi

inheritance - 限制自定义属性以便它只能应用于 C# 中的特定类型?

转载 作者:行者123 更新时间:2023-12-04 01:58:18 24 4
gpt4 key购买 nike

我有一个自定义属性,它应用于类属性和类本身。现在所有必须应用我的自定义属性的类都派生自一个基类。

我如何限制我的自定义属性,以便它只能应用于那些必须从我的基类派生的类?我该怎么做?

最佳答案

该死,当我证明自己错了时,我讨厌它……如果您将属性定义为 ,它会起作用。 protected 基类的嵌套类型:

abstract class MyBase {
[AttributeUsage(AttributeTargets.Property)]
protected sealed class SpecialAttribute : Attribute {}
}

class ShouldBeValid : MyBase {
[Special]
public int Foo { get; set; }
}
class ShouldBeInvalid {
[Special] // type or namespace not found
[MyBase.Special] // inaccessible due to protection level
public int Bar{ get; set; }
}

(原答案)

你不能这样做 - 至少,在编译时不能。

属性可以被限制(例如)为“类”、“结构”、“方法”、“字段”等——但没有更细粒度的。

当然,由于属性本身不做任何事情(忽略 PostSharp),它们对其他类型是惰性的(并且对您的类型也是惰性的,除非您添加一些代码在运行时查看属性)。

您可以编写 FxCop 规则,但这似乎有点过分了。

但是,我想知道属性是否是最佳选择:

Now all the classes that must apply my custom attribute are derived from a single base class.



如果他们 必须应用您的自定义属性,可能是 abstract (或者也许只是 virtual )属性/方法会是更好的选择?
abstract class MyBase {
protected abstract string GetSomeMagicValue {get;}
}
class MyActualType : MyBase {
protected override string GetSomeMagicValue {get {return "Foo";}}
}

关于inheritance - 限制自定义属性以便它只能应用于 C# 中的特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021190/

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