黑马程序员技术交流社区

标题: C#为什么不支持在函数体内声明static变量 [打印本页]

作者: 土豆泥    时间: 2013-12-14 13:55
标题: C#为什么不支持在函数体内声明static变量
本帖最后由 土豆泥 于 2013-12-15 10:02 编辑

如题,不知道有没有人能解答一下,

作者: 王子斌    时间: 2013-12-14 14:37
使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。
static 修饰符可用于字段、方法、属性、运算符和构造函数,但不能用于索引器、析构函数和类型。
这是framework文档里的,
注意“属于类型本身”,我想,第一句应该可以说明一点问题。
作者: 梦想是否存在    时间: 2013-12-14 15:25
static的用法是:修饰字段、方法、属性、运算符和构造函数。
函数格式:修饰符 返回值类型(形参列表){}。在函数体外已经可以定义static了,再往里面定义一个岂不是画蛇添足?
作者: 丑男先生。    时间: 2013-12-14 15:36
因为机制的关系。
其实C#这个可以理解为是替代C++中宏的东西,那么定义宏当然不能在函数里定义了。
VB我不是很清楚,但是c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候。如果你在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个人看法可能是因为垃圾回收机制的问题
作者: yuanlianxi03    时间: 2013-12-14 21:24
C/C++可以在函数内部声明静态局部变量

我觉得C#的static不能用在函数里面的原因
C是面向过程思想(暂且这样说,别喷我,后面也是)的,C++是不完全面向对象思想的,这两种语言使用起来很灵活,C++保留很多C的语法特点,例如可以生静态局部变量,而静态局部变量在C/C++一般用来保存函数状态;C#是完全面向对象思想的语言,如果你在方法体内声明静态局部变量,这势必会导致一种混乱,在C#中,用面向对象的思想,应该把状态保存到对象中,因此,C#没有必要用静态局部变量来保存状态,用字段更清晰,且能避免混乱
作者: 陈行    时间: 2013-12-14 23:27
问题解决了记得改成已解决啊~这样可以加分
作者: 如远行客    时间: 2013-12-15 13:02
本帖最后由 如远行客 于 2013-12-15 13:07 编辑

static修饰的是类以及类的成员(字段,方法,属性这些),用static修饰的成员表示它是这一个类所有的,不属于某个特定的对象。在函数内部定义的变量不属于类及其成员,因此不能用static修饰。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2