是否可以在 c# 中创建具有“隐藏”属性的自定义属性
本文关键字:隐藏 属性 自定义属性 创建 是否 | 更新日期: 2023-09-27 18:36:31
>通常,当您创建自定义属性类时,任何具有 getter 和 setter 的公共属性都会自动向在类上应用属性的人员公开,以便使用该属性的人员可以指定该属性的值。
我想要一个自定义属性类,它公开特定属性的 getter 和 setter,但不允许在创建时将此属性指定为属性的命名参数。 例:
[AttributeUsage(AttributeTargets.Class)]
class MyCustomAttribute : Attribute
{
public bool MyProperty
{
get { /* do something */ }
set { /* do something */ }
}
}
// The following line should be a compiler error, MyProperty should
// be hidden for attribute initialization!
[MyCustomAttribute(MyProperty=true)]
class MyClass
{
};
有什么办法可以做到这一点吗?
如果您
打算在代码中的其他地方使用它,但不希望其他人看到它,您可以简单地将属性(或只是属性 setter)internal
。
或者,如果要公开其他用户的属性,但只是禁止在声明性语法中设置它,则无法公开属性 setter,但如果需要,请提供不同的方法来设置值:
class MyCustomAttribute : Attribute
{
public bool MyProperty
{
get { /* do something */ }
}
public void SetMyProperty(bool value)
{
/* do something */
}
}
如果属性是公共的,则在应用属性时无法阻止分配该属性。正如 dtb 在评论中建议的那样,您可以改用 getter 和 setter 方法,但这可能对您没有帮助......
属性不会在运行时修改。当您使用反射从类或成员(或其他任何内容)检索属性时,您只会获得这些属性的副本,因此即使您修改了它们,下次检索它们时,您也会获得一个新的、未修改的副本。