永发信息网

c# global variable VS local variable

答案:2  悬赏:0  手机版
解决时间 2021-11-23 22:35
  • 提问者网友:临风不自傲
  • 2021-11-23 06:01
c# global variable VS local variable
最佳答案
  • 五星知识达人网友:持酒劝斜阳
  • 2021-11-23 06:52
定义变量应优先依据变量使用的场合 而不应考虑其他多余的东西
严格说C#不存在全局变量 或许你指示的是类的实例成员字段或静态成员字段 以区分于方法内的局部变量
定义变量应该依据最小上下文的原则 以降低代码耦合度
最小上下文指的就是:你可能使用一个变量的最小作用域
比如:一个for循环的循环变量 for(int i=0... 你通常只期待在循环体内部用到它
所以你会把它定义在for的括号内 而不是在for之前定义 这就是i的最小作用域
如果令一个表示状态的变量 比如 bool isStart; 你可能会跨越多个方法来使用它或者修改它 那么它的作用域就扩大到类的实例 所以你会把它定义在class之下 成为一个所谓的global variable
问题来了:上面那个i是不是可以定义成全局的?当然没问题...但是别的方法内也用到i怎么办?跨越了本身作用域的变量通常会带来很多问题,比如语义模糊 意外的值篡改 或者失去线程安全特性,随着代码量扩大问题会凸显的越发严重。 总之这是一种不推荐的代码书写方式。

总之 两种定义并谈不上什么优缺点 大体上能用局部就用局部 局部变量满足不了你(或者变量传递不方便)就定义到外面。
对于运行速度:局部变量分配在栈内存 全局变量 对于实例成员分配在托管堆 对于静态成员分配在一个特殊的内存区间 因为.net的安全性需要 所有变量每次声明时都会被初始化 所以也没有明显的运行速度和效率的差别(取this指针偏移和栈顶指针偏移的区别...)追答如果只在这一个地方用到的话是可以的——但是从上下文来看 常量不太可能是只有一个地方用到 当然声明成全局变量更有意义追问你好!的确就只有一个地方用到常量,我试了把他变成local variable,可以运行。可是rxinstruction却需要一个初始值,为什呢?追答前面提到了 一切变量在声明时需要初始化。当它作为类的成员时,即使不主动初始化,.net也会为他自动初始化为0或null。而作为局部变量,在使用前必须手动初始化为一个值才可以。追问这样啊,那我给它什么初始值合适呢?或者设定初始值要遵循什么规律呢?追答没有任何通用的规律 按照你的上下文需要赋值即可 一般需要你强制初始化的原因是“变量没有赋值(写入)就进行使用(读取)” 如果你实在没头绪,那么就赋值null或者0好了...直到代码出现逻辑错误 或你知道应该怎么做为止
全部回答
  • 1楼网友:过活
  • 2021-11-23 07:54
面向对象编程不推荐是用全局变量~~因为会使程序耦合度增加,不利于后期维护。
global的就是全局的 作用域比较广 开始写代码的时候会感觉有点方便 但是后面就乱套了..
local的作用域小但是比较灵活 ,不会增加程序的耦合度追问那对运行速度有什么影响么?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯