C/C++ 支持. 在函数内部对变量加上static, 限定该变量的可见性仅限于此一个函数, 但生存期是整个程序的生存期. 在对该函数的多次调用期间其值被保留, 其内存空间分配在数据区. 跟在所有函数外部定义的变量在同一内存区域.
void foo()
{
static int n_calls = 0;
printf("you called foo %d times\n", ++n_calls);
}
foo();
foo();
得到的值是不一样的.
可惜, 这在C#中又不支持, 不仅是语言不支持, 而且CLR/IL也不支持, 这导致即使你用IL来写代码也无法做到这一点.
有一种观点认为这种用法是不好的软件工程实践, 但我认为它有自己的用处, 至少它把一个类的静态成员变量封装在了一个函数内部, 往往有这样的情况, 你向类中添加一个静态成员, 其目的仅仅是让它服务于其中一个静态成员函数, 但C#语言却强制你把它声明在更外围的范围内, 这样, 它对所有的成员函数就都是可见的了. 这是一种对静态成员在类内部层次上更小范围的一种数据隐藏.
C#版本升级, 看来没有要把它加入的意思, 语言设计者解释说这样实现起来很困难. 我站着说话不腰痛地说, 能有多困难, 我相信C++编译器比C#编译器难度要大出好几倍. 唉, 只是觉得没这个太可惜了.
阅读(2002) | 评论(0) | 转发(0) |