将属性约束到给定类型的 属性
Constraint Attribute to property of given type
如标题中所述,我想知道是否有约束属性的方法,以便在将属性应用于错误的 属性 或方法时出现编译时错误(我会这样这些属性将仅适用于 属性).
例如:
[StringAttribute(..something)]
public string MyStringPropery { get; set; } //<-- ok pass compile time constraint
[StringAttribute(..something)]
public int MyIntProperty { get; set; } //<-- throw error at compile time for type missmatch (that attribute will apply only to string not int)
[StringAttribute(..something)]
public string SayHello () //<-- throw error at compile time, that attribute apply only to property not method
{
return "Hello!" ;
}
如果我可以限制我的属性,以便它们只能在实现特定接口(或从特定基础 class 继承)的 class 中使用,那么可选会很好。
无法在编译时检查 属性 的类型,因为您无权访问附加属性的成员。此外,编译器实际上不会实例化您的属性或 运行 代码。它只会将其添加到程序集元数据中。编译器 运行 是它的内置检查,您不能对其进行扩展。
但是可以在您的属性定义中限制属性:
[AttributeUsage(AttributeTargets.Property)]
public class StringAttribute : Attribute
{
//Attribute definition
}
如标题中所述,我想知道是否有约束属性的方法,以便在将属性应用于错误的 属性 或方法时出现编译时错误(我会这样这些属性将仅适用于 属性).
例如:
[StringAttribute(..something)]
public string MyStringPropery { get; set; } //<-- ok pass compile time constraint
[StringAttribute(..something)]
public int MyIntProperty { get; set; } //<-- throw error at compile time for type missmatch (that attribute will apply only to string not int)
[StringAttribute(..something)]
public string SayHello () //<-- throw error at compile time, that attribute apply only to property not method
{
return "Hello!" ;
}
如果我可以限制我的属性,以便它们只能在实现特定接口(或从特定基础 class 继承)的 class 中使用,那么可选会很好。
无法在编译时检查 属性 的类型,因为您无权访问附加属性的成员。此外,编译器实际上不会实例化您的属性或 运行 代码。它只会将其添加到程序集元数据中。编译器 运行 是它的内置检查,您不能对其进行扩展。
但是可以在您的属性定义中限制属性:
[AttributeUsage(AttributeTargets.Property)]
public class StringAttribute : Attribute
{
//Attribute definition
}