个人现在弄了C#不到1年。。很多东西不是很明白。。
比如说全局变量和局部变量效率方面有多少差异。。一个全局=几个局部
还有一些类似的问题。。
想问下各位大大。。我想知道这些东西该学学什么。。看看什么书

解决方案 »

  1.   

    人现在弄了C#不到1年。。很多东西不是很明白。。 
    比如说全局变量和局部变量效率方面有多少差异。。一个全局=几个局部 
    还有一些类似的问题。。 
    想问下各位大大。。我想知道这些东西该学学什么。。看看什么书1:严格地说:在C#中没有全局变量。
    如果说需要有类似效果的东西,那么就是:公有的,静态变量应该可以算是全局变量。但在使用这个全局变量时仍然需要引用这个命名空间。2:就数据成员而言全局变量与局部变量在效率上本身没有任何差异。
    一般地来说,全局变量是存储在数据段中,在进程被加载后地址是静态的;
    局部变量是动态的在存储在栈中的,随着函数的调用和返回生成和消失,在他们的生存时间内,他们的地址也是静态的;
    所以从这个效率上一炕头他们是基本上没有区别的。不过这并不是说你调用任何成员都没有效率上的区别。
    简单地说,调用值类型的对象,你可以直接通过我上面说的静态地址可以得到对象的值;而调用引用类型的对象,你得到的只是它的一个“指针”,需要通过这个指针,找到实际对象的内存位置查找数据。
    比如:
    public void TestFunc()
    {
        int i=1;
        string s="abc";
    }
    这段代码中i是值类型,它直接存在于栈中;而s是引用类型,它的引用位于栈中,访问时通过这个引用找到堆中的某一块内存表示它的值“ABC”。
    从这点的效率上来说肯定是i>s,但产生这个的原因并不是由于全局与局部变量的区别。当然,对于OO来说,虚函数,重载肯定会影响效率上的变化,但这些都是函数成员了而非数据成员。具体的内容,我觉得可以参考一下《Essencial C#》,呵呵……
    其实我没有仔细看过这本书,我是看过《Essencial C++》,但就最终的面向对象的编译器和内存设计而言,C#与C++应当差不多的。
      

  2.   

    你这是一个什么概念?什么叫用完了?什么叫恢复初始值?
    我的理解中,除了对象刚刚生成的那一次,叫初始值,事实上这个初始值只是一个可以接受的起始状态罢了。
    第一次初始化变量之后的任何变化应该都是受程序逻辑的影响,在它允许的各个状态中迁移,除非这个程序停止不存在说“用完”的情况。举个例子:
    有一个工厂类,该工厂类内部有一个静态成员用于计数,表示一共生成了多少个相应工厂的类对象。
    pbulic class XXFactory
    {
       private static int count =0;
       public XX CreateObject()
       {
          count++;
          return new XX();
       }
       public void Reset()
       {
           count = 0;
       }
    }
    对这个类中的count来说,它的初始值就是0。它也表示了一个合法的状态:工厂没有创建任何一个对象。
    在CreateObject方法中,每创建一个新对象,Count++,表示有新的对象的生成了。
    而在Reset方法,工厂类重新复位,Count=0。
    无论是哪一种操作,除非程序终止,没有Count++“用完了”的时候。
      

  3.   

    楼主如果学了1年C#还问这样的问题,貌似确实看书看少了网上有本 你必须知道的.NET 电子书,楼主可以看看
      

  4.   

    我建议别贪多吧,把《C# 高级编程》第4版之类的前面讲语法部分的看完,看仔细一点。有不明白的多查资料,多问再说。
    书再多没看明白也没用。其实Essencial C#不错,C#高级编程也不错,还有本.NET组件程序设计也不错,关键是你要能看进去,看明白。
    老实说,即使有一些垃圾书,他也有精华,有价值的东西就看你能不能发现了。