移动应用程序:使用常量来区分 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)
我有两个应用程序,它们的功能基本相同,只有细微差别(不同的徽标、隐藏在 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)