最近遇到一个类是这样定义的:
[BaseFacade()]
class CreatCHSetFacade:ContextBoundObject
{
}
请问类定义前的 [BaseFacade()] 是什么意思?做什么用的?
[BaseFacade()]
class CreatCHSetFacade:ContextBoundObject
{
}
请问类定义前的 [BaseFacade()] 是什么意思?做什么用的?
[AttributeUsage(AttributeTargets.Class)]
public class BaseFacadeAttribute : ProxyAttribute
{
}
这是一个反射吗?
http://www.cnblogs.com/luohuarenduli/archive/2007/05/14/746335.html这个不好讲,我的理解也不全面。单说下我的:
这个东西还真不好解释啊。大体上就是附加在类上的一种说明。你的理解是对的,它是用于反射的。
至于用途的嘛,很多。
1:可以给编译器用。
比如[obsolete]属性标签就表示这个类已经不推荐使用,有更好的方法实现。你在任何一个类上标记了这个属性标签之后,编译时会有警告。
比如[StructLayout]这个标签用于提供类在内存中的布局信息,这主要是用于调用外部dll之类的用途。
比如[Marshal]也是提供类似于StructLayout的信息用于说明具体的数据成员如何布局和列集。
2:可以给代码用。
比如,可以添加一些[Description]属性标签,在类中。然后你在程序中可以通过反射得到相关的信息。
比如:
public class Description : Attribute
{
public Description(string des) { DES = des; }
public string DES { get; set; }
}
[Description("A Class")]
public class TestA { }
[Description("B Class")]
public class TestB { }
public class Program
{
static void Main(string[] args)
{
TestA ta = new TestA();
TestB tb = new TestB(); var dA = ta.GetType().GetCustomAttributes(typeof(Description), false)[0] as Description;
var dB = tb.GetType().GetCustomAttributes(typeof(Description), false)[] as Description;
Console.WriteLine(dA.DES);
Console.WriteLine(dB.DES); Console.ReadKey();
}
}这段代码的输出将是:
A Class
B Class再多没法说了