关于C#:如何正确定义常量

How to properly define constants

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Constants in Objective C

我正在设计一个控制器,我需要它里面的一些常量(本地的,只是针对那个控制器)。查看苹果提供的一些示例代码,我可以看到以下几行:

1
2
3
4
5
6
7
8
9
#import"Constants.h"

#define kTextFieldWidth 260.0

static NSString *kSectionTitleKey = @"sectionTitleKey";
static NSString *kSourceKey = @"sourceKey";
static NSString *kViewKey = @"viewKey";

const NSInteger kViewTag = 1;

有人能给我解释一下他们之间的区别吗?我应该使用哪种样式?它们是否取决于您分配给它们的对象/值的类型?表示用法:static NSString *表示字符串,#define表示浮点数,NSInteger表示整数?你如何做出选择?


define关键字是一个编译时指令,它使define'd值直接注入到代码中。它在整个程序和所有链接库中都是全局的。因此,您可以根据自己只为控制器创建一个常量的愿望将其从列表中删除。

静态变量和常量的主要区别在于静态变量在初始化后可以更改,而常量变量不能更改。如果您想在初始化后修改变量,那么应该使用static关键字。

希望有帮助。


正如Scott和Benzado指出的,这是定义常量值的最佳方法。但是,对于定义go,使用defines进行调试比较困难,因为在调试器中通常不容易看到扩展值。如果打算全局公开变量,则只需要向类的头文件添加一个外部声明。接下来要记住的是将const声明放在指针(*)之后,否则在大多数情况下,您会收到来自指针的丢弃限定符警告。