代码之家  ›  专栏  ›  技术社区  ›  the_nuts

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

  •  0
  • the_nuts  · 技术社区  · 9 年前

    我有两个基本相同的应用程序,但有一些小的区别(不同的徽标、隐藏在Pro中的广告、不同的Facebook应用程序id用于登录流等)

    目前,我使用

    public const bool isProVersion = false;
    

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

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

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

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

    还有更好的选择吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Camilo Terevinto Chase R Lewis    9 年前

    扩展Jeroen Vannevel的评论,您确实应该使用预处理器指令。您应该使用 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)