类不需要实例化也能直接用
程序员文章站
2022-05-23 16:02:17
...
在我以前的意识中,我们需要用到某个类的时候,需要先实例化这个类,实例化出一个对象,然后在使用这个类里面的方法和属性,今天偶然的机会了解到,原来有些类是不需要实例化就可以直接用的——静态(static)类,同时我们可以直接使用静态类中的方法和属性。
类、字段、属性、方法等只要是被static修饰后,变为静态类、静态字段、静态属性、静态方法,此时,在其他的类中可以直接调用这些字段,属性,方法等。
基本知识:
static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。
演示:
下面我通过实例来掩饰一下:
首先需要建立一个C#控制台项目。(新建过程省略)
1、需要被实例化的类
如果被调用成员为非静态成员,那么它所属的类一定是非静态类。
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类。
2、不需要实例化的情况
1)被调用的成员为非静态类
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类(而且不能实例化),直接调用其成员,语法为“类名.成员”。
2)被调用类为静态类
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修饰的成员是属于整个类的,而不是属于某个具体的对象。既然是全局唯一,那么就没有必要在去实例化后再用了。
上一篇: PHP导入Excel数据
下一篇: 静态工厂解析两种配置文件
推荐阅读