移动应用程序:使用常量来区分Free / Pro版本是一种好习惯吗?

时间:2015-12-31 01:24:31

标签: c# windows-phone mobile-application

我有两个基本相同的应用程序,差异很小(不同的徽标,Pro中隐藏的广告,登录流程的不同Facebook应用ID等)。

目前,我使用

public const bool isProVersion = false;

我在编译之前切换,并根据其值更改整个应用行为。

唯一的问题是我的错误列表中有很多“无法检测到的代码”注意事项。

这是预期的,因为在该版本中永远不能访问某些代码,但它看起来不是很干净。

我可以使用静态变量而不是常量,但这会使广告代码编译并“可访问”到专业版中,这是不需要的,可能会降低性能。

还有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

扩展Jeroen Vannevel的评论,你真的应该使用预处理器指令。您应该使用ISPROVERSION指令和两个编译配置,一个定义ISPROVERSION(专业配置)和一个不定义(免费配置)。

所以,而不是这样做:

if (YourClassName.isProVersion)
{
    // user has paid, yey!
    SomeClass.LoadAds(false);
}
else
{
    // user didn't pay, scr** them!
    SomeClass.LoadAds(true);
}

你会做这样的事情:

#if ISPROVERSION
    // user has paid, yey!
    SomeClass.LoadAds(false);
#else
    // user didn't pay, scr** them!
    SomeClass.LoadAds(true);
#endif

这样,如果使用专业版配置进行构建,#else语句中的代码甚至不会被编译。
在此处阅读有关定义预处理程序指令的更多信息:/define (C# Compiler Options)