C#特性Attribute的实际应用之:为应用程序提供多个版本

简介:

基于如下的几个理由,需要为应用程序提供多个版本:

1:应用程序有体验版和完整功能版;

2:应用程序测试过程中需要完成一些自动化的操作;

1:提供体验版

关于第一点,所谓体验版也就是完整版的一个缩小版。即出于某种理由,不对用户开放应用程序的全部功能。

假设我的应用程序共有两类功能。第一类功能属于单机版,而完整版还提供在线功能。那么,在功能上,我需要定制两个属性"ONLINE"和"OFFLINE"。在体验版中,我只开放"OFFLINE"功能。

要实现此目的,我不想提供两套应用程序,而是想通过最小设置,就能为一个应用程序输出两个发布版本。这个时候,就需要.NET中的特性Attribute了。

首先,我们模拟离线和在线两个功能:

 

复制代码
ExpandedBlockStart.gif 代码
 
  
class MyService

{

[Conditional(
" OFFLINE " )]

[Conditional(
" ONLINE " )]

public static void Testing() { System.Windows.Forms.MessageBox.Show( " offline game... " ); }



[Conditional(
" ONLINE " )]

public static void GetInfoFromNet() { System.Windows.Forms.MessageBox.Show( " online game... " ); }

}
复制代码

程序入口:

复制代码
ExpandedBlockStart.gif 代码
 
  
private void button1_Click( object sender, EventArgs e)

{

MyService.Testing();

}



private void button2_Click( object sender, EventArgs e)

{

MyService.GetInfoFromNet();

}

复制代码

要实现两个不同的功能,则需要在程序入口这个文件中定义:

 

复制代码
 
 
#define ONLINE

// #define OFFLINE



using System;

using System.Collections.Generic;

using System.ComponentModel;
复制代码

1.1:全局宏定义

记住,这个定义一定要在文件的最开头处。同时,该定义只对本文件有效,如果想定义全局,必须在项目属性中定义,如下:

113010_0124_CAttribute1.jpg

如果想定义多个全局宏定义,则用逗号隔开,如"LUMINJI,HUCHANGJUN"。

接下来的问题,就比较简单了,如果要发布全功能,就#define ONLINE,如果要发布离线版功能,就注释掉#define ONLINE然后定义OFFLINE就行了。

2:为测试过程提供自动化操作

在测试UI的时候,需要操作各类文本框、列表等控件。举个简单的例子来说,一个登录窗口,需要输入用户名和密码。如果每次我测试的时候,都要让我自己来输入,势必影响效率。这个时候,就可以让Attribute来发挥作用了。

在如下示例中,在登录窗口的Load事件中,我们为用户名和密码赋值,并模拟点击Click事件。

复制代码
ExpandedBlockStart.gif 代码
 
  
#define TESTAUTO



using System;



……

public Form1()

{

InitializeComponent();

this .Load += delegate

{

TestAuto();

};

}



[Conditional(
" TESTAUTO " )]

private void TestAuto()

{

Thread t
= new Thread((ThreadStart) delegate

{

Thread.Sleep(
1000 );

this .Invoke((MethodInvoker) delegate

{

this .textBox1.Text = " luminji " ;

this .textBox2.Text = " 123 " ;

button3_Click(
this , null );

});

Thread.Sleep(
1000 );

});

t.IsBackground
= true ;

t.Start();

}


复制代码

记住,在提交代码的时候,可以注释掉TESTAUTO宏定义,这样,既不会影响到最终的版本,也能让自己在本机得到最大的自由度。从另一个角度来说,整个项目组可提前协调好,可以让这些测试方法共有。

3:关于测试多说一点:

提供一个思路:这个特性也可以让我们从程序员的角度来完成部分测试用例的编写及测试。


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2010/11/30/1891692.html,如需转载请自行联系原作者

相关文章
|
13天前
|
编译器 C# Android开发
震惊!Uno Platform 与 C# 最新特性的完美融合,你不可不知的跨平台开发秘籍!
Uno Platform 是一个强大的跨平台应用开发框架,支持 Windows、macOS、iOS、Android 和 WebAssembly,采用 C# 和 XAML 进行编程。C# 作为其核心语言,持续推出新特性,如可空引用类型、异步流、记录类型和顶级语句等,极大地提升了开发效率。要在 Uno Platform 中使用最新 C# 特性,需确保开发环境支持相应版本,并正确配置编译器选项。通过示例展示了如何在 Uno Platform 中应用可空引用类型、异步流、记录类型及顶级语句等功能,帮助开发者更好地构建高效、优质的跨平台应用。
135 59
|
4天前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
12 2
|
13天前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
43 8
|
22天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
23 8
|
1月前
|
C#
C# 一分钟浅谈:循环结构 for 和 while 的应用
【9月更文挑战第1天】循环结构是编程中的基础概念,C# 中常用的 `for` 和 `while` 循环允许重复执行代码直至满足特定条件。`for` 循环基于计数,适用于已知循环次数的情况;`while` 循环基于条件,适用于未知循环次数的情况;`do-while` 循环则至少执行一次循环体。本文详细介绍了这些循环的语法和示例,并探讨了常见问题及其解决方法,如循环条件和更新表达式的错误设置。通过综合应用示例(如计算阶乘和斐波那契数列),帮助读者更好地理解和掌握循环结构的使用方法。正确使用循环可以提高程序的效率和可读性。
48 2
|
2月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
61 0
|
5月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
169 3
|
5月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
181 3
|
10天前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
24 2
|
14天前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue<T>`和`ConcurrentDictionary<TKey, TValue>`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
26 1