移动应用程序:使用常量来区分Free/Pro版本是一个好的做法吗

本文关键字:一个 版本 Pro 应用程序 常量 Free 移动 | 更新日期: 2023-09-27 18:28:35

我有两个应用程序,它们基本上是一样的,只是略有不同(不同的徽标、隐藏在Pro中的广告、登录流的不同Facebook应用程序id等)

目前,我使用

public const bool isProVersion = false;

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

唯一的问题是,我的错误列表中有很多"检测到无法访问的代码"的通知。

这是有意的,因为某些代码在那个版本中永远不能访问,但它看起来不太干净。

我可以使用静态变量而不是常量,但这将使ad代码被编译并"可访问"到Pro版本中,这是不需要的,可能会降低性能。

还有更好的选择吗?

移动应用程序:使用常量来区分Free/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

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