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

Mobile apps: is it a good practice to use a constant to distinguish the Free/Pro version?

我有两个应用程序,它们的功能基本相同,只有细微差别(不同的徽标、隐藏在 Pro 中的广告、不同的 Facebook 应用程序登录流程等)

目前,我使用

public const bool isProVersion = false;

我在编译之前切换它,它会根据它的值改变整个应用程序的行为。

唯一的问题是我的错误列表中有很多 "unreachable code detected" 通知。

这是有意为之的,因为在该版本中绝不能达到某些代码,但它看起来不是很干净。

我可以使用静态变量而不是常量,但这会使广告代码编译并 "reachable" 进入 Pro 版本,这是不需要的并且可能会降低性能。

有没有更好的选择?

扩展 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

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