永发信息网

c# global variable VS local variable

答案:2  悬赏:0  手机版
解决时间 2021-11-23 22:35
c# global variable VS local variable
最佳答案
定义变量应优先依据变量使用的场合 而不应考虑其他多余的东西
严格说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好了...直到代码出现逻辑错误 或你知道应该怎么做为止
全部回答
面向对象编程不推荐是用全局变量~~因为会使程序耦合度增加,不利于后期维护。
global的就是全局的 作用域比较广 开始写代码的时候会感觉有点方便 但是后面就乱套了..
local的作用域小但是比较灵活 ,不会增加程序的耦合度追问那对运行速度有什么影响么?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
1991年农历10月30日出生的,男,求个幸运数字
304拉丝不锈圆管口颈16*6米多少钱一米?
大锅台灶里面柴火灶口冒烟是什么原因
腹部造口者可做俯卧撑吗?
人一天站立多长时间就超负荷了?
广州征牌日用品有限公司怎么样?
为什么n=2开始
捷仕卫浴Gessi怎么样,现在市面上买的人多吗
为什么越到夏天我越是手脚冰凉
某人体检结果中显示其甘油三酯指标为0.52 mmo
懂字换偏旁组新字
启继承王位后,世袭制代替了什么制
老面肥怎么用啊
怎么可以查到美版手机激活时间 型号、NKWC2L
什么是dcs系统?都有哪些比较知名的品牌?
推荐资讯
欠贷款钱,一起诉夫妻双方马上就会被冻结个人
将每组8个 字组成四个词 哺输铺辅 开入育导
利达华的感烟探测器的接线方法
哈尔滨轴承质保期是多少
斯诺克比赛中什么情况下会出现自由球
人类由信息封闭时代进入大众传播时代的标志是
石锅怎么清洗?如何清洗最好,最能延长石锅的
冒险岛里的黑妖苗苗到哪里去打?
跑滴滴白天生意好还是夜里生意好
淄博卓创资讯有限公司的信息编辑市场分析工作
自家酱牛肉怎么做好吃
一米八毛一方该多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?