建议156:利用特性为应用程序提供多个版本
基于如下理由,需要为应用程序提供多个版本:
- 应用程序有体验版和完整功能版。
- 应用程序在迭代过程中需要屏蔽一些不成熟的功能。
假设我们的应用程序共有两类功能:第一类功能属于单机版,而第二类的完整版还提供了在线功能。那么,在功能上,需要定制两个属性“ONLINE”和“OFFLINE”。在体验版中,我们只开放“OFFLINE”功能。要实现此目的,不应该提供两套应用程序,而应该通过最小设置。为一个应用程序输出两个发布版本。这一切,可以通过.NET中的特性(Attribute)来实现。
class MyService { [Conditional("ONLINE")] public void Testing() { Console.WriteLine("完整功能版"); } [Conditional("OFFLINE")] [Conditional("ONLINE")] public void GetInfoFromNet() { Console.WriteLine("单机功能版"); } } class Program { static void Main(string[] args) { MyService service=new MyService(); service.Testing(); service.GetInfoFromNet(); } }
要实现两个不同的功能,需要在程序入口这个文件最开头定义:
#define ONLINE
//#define OFFLINE
这条编译符号一定要在文件的最开头。同时,该定义只对本文件有效。如果要想定义全局编译符号,则必须在项目属性中定义。如图:
如果想定义多个全局宏定义,则用逗号隔开,如“OFFLINE,ONLINE”。
如果要发布所有功能,就输入条件编译符号#define ONLINE,代码运行如下:
完整版功能
单机版功能
如果要发布离线版功能,就用#define OFFLINE。运行如下:
单机版功能
转自:《编写高质量代码改善C#程序的157个建议》陆敏技