1 namespace Using_Static_Function 2 { 3 class Program 4 { 5 /// <summary> 6 /// 总结静态的方法调用的时候应该注意的问题; 静态的方法只能调用静态的成员变量或成员方法 7 /// </summary> 8 /// <param name="args"></param> 9 static void Main( string [] args) 10 { 11 Student.ShowName_1(); // 调用静态方法的方式 按原理来说应该是直接写静态方法名就可以的,但是因为这个静态的方法不是写在本类里面所以要用 类名来访问; 12 13 // 静态的方法调用非静态的方法另一种方式; 14 15 Student stu = new Student(); // 通过实例化对象的方式引用一个类对象的域; 16 stu.ShowName_2(); 17 } 18 } 19 20 /// <summary> 21 /// 总结:为什么静态的方法只能调用静态的方法 而不能调用非静态的方法? 22 /// 因为:类中的非静态成员,在每个类的实例中都会占有一定的存储空间, 23 /// 多个类也就有多个这样的同名的非静态成员的内存地址存在【地址不冲突 是因为 有个类似于应用程序域一样的概念将各个对象的区域隔开了,跟应用程序域很像,这里不研究】, 24 /// 程序也不知道到那个对象域里面去读取这个值(编译器也不是智能的也是按某种约定去检测执行代码),因为静态的东东是全局共享的,所以它的域就是整个应用程序,所以静态方法里面就可以访问静态的内容,它们在一个应用程序域里面, 25 /// 应用程序的进程关了静态的东东才会释放掉; 26 /// </summary> 27 public class Student 28 { 29 public static string Name { get ; set ; } // Static Property 30 31 public static string ShowName_1() // Static Function 32 { 33 return Student.Name; 34 // return this.Name; // 这种写法是错误的,this在静态的方法里面充当的并不是当前类对象的角色,而是应用程序级的; 35 36 } 37 38 public int Age { get ; set ; } // UnStatic Property 39 40 public string ShowName_2() // UnStatic Function 41 { 42 return ShowName_1(); // 【非静态的方法能够访问类中的任何成员,包括静态的成员属性或方法;】 43 44 } 45 46 public Student() 47 { 48 49 } 50 51 } 52 }