Effective C# Item 24: Prefer Declarative to Imperative Programming
声明式编程是一种简洁的程序行为描述方式。声明式编程让我们可以通过使用声明来达到定义程序行为的目的。在C#或者其它的编程语言中,命令式编程是最为常见的:我们通过编写方法来定义程序的行为。我们可以通过C#中的属性来使用声明式编程。我们可以为类,方法,属性和数据成员声明属性,在运行时.Net会自动为我们添加这些声明的行为。这种声明方法比命令式编程更简单,也更容易理解。
让我们从一个简单的例子开始。当我们编写第一个ASP.Net的Web Service时,设计器会自动生成下面一段代码:
[WebMethod]
public string HelloWorld()

{
return "Hello World";
}在HelloWorld()方法上有一个[WebMethod]方法。它声明了HelloWorld是一个Web Service方法。在运行时,ASP.Net会对此属性作出响应,创建WSDL(Web服务描述语言)文档。另外我们还可以通过ASP.Net动态创建的HTML页在IE中测试我们的Web服务。上述这些动作都表现在WebMethod属性中。我们通过声明这种属性,就可以在运行时获得所期望的支持。使用这种属性可以提高我们的编程效率并减少可能发生的错误。
在ASP.Net运行时使用反射来检测类中的WebMethod。ASP.Net可以在运行时自动添加所需的代码将这些方法转变为WebMethod。
[WebMethod]属性只是.Net类库中定义的大量属性中的一个。这些属性可以帮助我们更快的完成编程工作。例如有些属性可以帮助我们创建序列化类型[Serializable],还有可以控制条件编译[Conditional]。我们应当更多的使用这些属性,而不是自己编写代码来达到目的。
如果预定义的属性不能满足我们的要求,我们也可以通过自定义属性和反射机制来创建我们自己的声明式编程结构。举例来说,我们希望创建一个可以设置默认排序的属性,通过使用这个属性,我们可以将该类中的某个属性设定为默认的排序比较项。下例中是我们希望达到的自定义属性的效果:


}