本文共 2099 字,大约阅读时间需要 6 分钟。
基本知识:
static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。
下面我通过实例来掩饰一下:
首先需要建立一个C#控制台项目。(新建过程省略)如果被调用成员为非静态成员,那么它所属的类一定是非静态类。
namespace _1_被调用时必须先实例化的情况{ class Program { static void Main(string[] args) { ClassA a = new ClassA(); a.test();//如果不先实例化classA,无法调用test方法。 } }}
被调用的非静态类。
using System;namespace _1_被调用时必须先实例化的情况{ public class ClassA { public void test() { Console.WriteLine("我是非静态类ClassA中的方法test。"); Console.ReadKey(); } }}
解释:ClassA类为非静态类,其中的方法test()也为非静态方法,所以在main函数中调用时需要先实例化ClassA类。
namespace _2_被调用时不需要实例化的情况_被调用类为非静态类{ class Program { static void Main(string[] args) { ClassB.test(); } }}
调用非静态类中的静态方法
using System;namespace _2_被调用时不需要实例化的情况_被调用类为非静态类{ public class ClassB { public static void test() { Console.WriteLine("我是非静态类ClassB中的方法test。"); Console.ReadKey(); } }}
ClassB类为非静态类,但其中的方法test()为非静态方法,所以在mian函数中调用时不实例化ClassB类(而且不能实例化),直接调用其成员,语法为“类名.成员”。
namespace _3_被调用时不需要实例化的情况_被调用类为静态类{ class Program { static void Main(string[] args) { ClassC.test(); } }}
调用静态类中的静态方法
using System;namespace _3_被调用时不需要实例化的情况_被调用类为静态类{ public static class ClassC { public static void test() { Console.WriteLine("我是非静态类ClassC中的方法test。"); Console.ReadKey(); } }}
ClassC类为静态类,其中的方法也test()为非静态方法,所以在main函数中调用时不实例化classC类(而且不能实例化),直接调用其成员,语法为“类名.成员”。
static修饰的对象具有以下特点:
1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 3.使用方式上不依赖于实例对象。static 关键字的作用就是把类的成员变成类的相关,而不是实例相关,也就是说static修饰的成员是属于整个类的,而不是属于某个具体的对象。既然是全局唯一,那么就没有必要在去实例化后再用了。
转载地址:http://cthbb.baihongyu.com/