我正在尝试更好地理解Attributes
的使用。
我理解:
Attributes
。现在我想做更多关于属性和好奇的事情:
DllImportAttribute
或STAThread
)如何执行这些功能?因为我们只使用这些属性并执行各自的功能。例如在DllImportAttribute
的帮助下,我只声明我的方法abc()
需要xyz.dll
并且加载了相应的DLL。我没有编写代码来搜索和加载DLL xyz.dll
。答案 0 :(得分:0)
真的没有神秘感......
属性实际上是与以下任何元素相关联的对象:Assembly
,Class
,Method
,Delegate
,Enum
,{{ 1}},Event
,Field
,Interface
和Property
。
它们可用于关联声明性信息并使用反射检索此类信息(在运行时)。换句话说,如果需要使用反射,您可以使用属性将其他信息注入可在运行时查询的程序集。
属性基本上只包含其名称和可选的参数列表。
来自MSDN Attributes (C#)
属性提供了一种强大的关联元数据的方法,或 声明性信息,包含代码(程序集,类型,方法, 属性,等等)。属性与a关联后 程序实体,可以在运行时使用a查询属性 技术称为反射。有关更多信息,请参阅反射 (C#)。
属性具有以下属性:
属性为程序添加元数据。元数据是关于程序中定义的类型的信息。所有.NET程序集都包含一个 指定的元数据集,用于描述类型和类型成员 在程序集中定义。您可以添加自定义属性以指定任何属性 需要的其他信息。有关更多信息,请参阅, 创建自定义属性(C#)。
您可以将一个或多个属性应用于整个程序集,模块或较小的程序元素,例如类和属性。
属性可以采用与方法和属性相同的方式接受参数。
您的程序可以检查自己的元数据或其他元数据 程序使用反射。有关更多信息,请参阅访问 使用反射属性(C#)。
如果您想要接收有关存储在属性中的元数据的信息,您需要执行类似这样的操作
<强>〔实施例强>
取自How do I read an attribute on a class at runtime?
Struct
并使用如下:
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
...
public static class AttributeExtensions
{
public static TValue GetAttributeValue<TAttribute, TValue>(
this Type type,
Func<TAttribute, TValue> valueSelector)
where TAttribute : Attribute
{
var att = type.GetCustomAttributes(
typeof(TAttribute), true
).FirstOrDefault() as TAttribute;
if (att != null)
{
return valueSelector(att);
}
return default(TValue);
}
}