实用干货!C#初学者:静态变量和非静态变量的区别?C#开发工程师

/ 集美大学数学与信息学院C#开发工程师 / 2017-05-06

C#,C#基础,计算机语言,计算机软件技术

以下是汇鱼大学分享的C#语言学习中的静态变量和非静态变量的区别,为了帮助初学者更好的学习和掌握C#

非静态变量:

  非静态变量就是没有用static修饰符进行声明的,在类被实例化时创建,通过对象进行访问,同一个类的不同实例的同一非静态变量可以是不同的值

 

静态变量:

  静态类和静态变量使用 static 修饰符进行声明,在所属类被装载时创建,通过类进行访问调用其中的静态方法,所属类的所有实例的同一静态变量都是同一个值

 

  

  示例:

    using System;

      using System.Collections.Generic;

      using System.Text;  

    namespace Example01 {  

     class Program {  

     class Class1 {  

     public static String staticStr = "Class";

       public String notstaticStr = "Obj";

    }    

      static void Main(string[] args)   

    {    

          //静态变量通过类进行访问,该类所有实例的同一静态变量无法变化都是同一个值                       Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr);

        Class1 tmpObj1 = new Class1();

          tmpObj1.notstaticStr = "tmpObj1";

          Class1 tmpObj2 = new Class1(); 

          tmpObj2.notstaticStr = "tmpObj2";

        //非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值

          Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr);

          Console.WriteLine("tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr);

        Console.ReadLine();  

          }  

  C#基础概念之二,const 和 static readonly 区别?

 

  const

  用 const 修饰符声明的成员叫常量不可变化,是在编译期初始化并嵌入到客户端程序

 

  static readonly

  用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化

 

  示例:

 

  测试类:

    using System;

    using System.Collections.Generic;

    using System.Text;

    namespace Example02Lib { 

    public class Class1 {     

      public const String strConst = "Const";  

      public static readonly String strStaticReadonly = "StaticReadonly"; 

    public const String strConst = "Const Changed";  

    public static readonly String strStaticReadonly = "StaticReadonly Changed";    }  

  客户端代码:

    using System;

      using System.Collections.Generic;

      using System.Text;    using Example02Lib; 

     namespace Example02 {

      class Program { 

      static void Main(string[] args)

       {     //修改Example02中Class1的strConst初始值后,只编译Example02Lib项目  

                 //然后到资源管理器里把新编译的 Example02Lib.dll拷贝Example02.exe所在的目录,  执行Example02.exe     

                   //切不可在IDE里直接调试运行因为这会重新编译整个解决方案!!       

                   //可以看到strConst的输出没有改变,而strStaticReadonly的输出已经改变

                   //表明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运行时初始化的    

              Console.WriteLine("strConst : {0}", Class1.strConst);                                   Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly);           Console.ReadLine();   

           }  

  修改后的示例:

 

  测试类:

    using System;

      using System.Collections.Generic;

      using System.Text;

      namespace Example02Lib {  

      public class Class1 {    

       //public const String strConst = "Const";  

      //public static readonly String strStaticReadonly = "StaticReadonly";

        public const String strConst = "Const Changed";   

         public static readonly String strStaticReadonly = "StaticReadonly Changed";

        } 


汇鱼人才的分享就到这里了,想要知道更多,就关注汇鱼人才吧



公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇