主要问题集中在程序是如何对内存操作的。
讨论1:
注:All为long型变量。
写法1:
long CountValue = 0;
CountValue = All - (long)StartPostion;
写法2:
long CountValue = All - (long)StartPostion;
讨论2:
写法1:
public string f1()
{
string re="asdf";
return re;
}
写法2:
public string f2()
{
return "asdf";
}
在CLR中是一样的,
在CLR中运行,分为堆和栈,值类型在栈中分配内存,而对象在堆中分配内存并将对象的引用(其实就是指针)赋予前面所说的栈中。
讨论1:
写法1:CountValue变量在栈中申请一个long类型的空间,并将0赋给它。然后再讲计算结果赋给它,内存没有发生什么变化
写法2:CountValue变量在栈中申请一个long类型的空间,直接将结果赋给它。
分析:两者在CLR上运行是没有区别的,但有一个编码原则:在声明变量的同时,对变量进行初始化。所以写法2是比较好的。
讨论2:
写法1:string类型是引用类型,所以在堆中初始化一个为"asdf"的string对象,然后把引用赋给re,并return引用。
写法2:直接初始价string对象,return引用
分析:两者在CLR上运行是没有区别的,但有一个编码原则:不要定义不必要的变量。不必要的意思是:对代码没有帮助,并且不能带来可阅读性的改善。所以在这里推荐写法2。如果代码非常复杂,可以用写法1的形式,来改善可阅读性,但是变量名用有意义的名字,就不要写re什么的了。
在此感谢大大!
补充问下关于CLR的知识在那里能学到?看《clr via C#》这本书怎么样?
@黑色圣光: 非常推荐这本书,但书有些难度。太难的地方可以跳着看,看完后面的内容再来看。
都一样