类不需要实例化也能直接用


  在我以前的意识中,我们需要用到某个类的时候,需要先实例化这个类,实例化出一个对象,然后在使用这个类里面的方法和属性,今天偶然的机会了解到,原来有些类是不需要实例化就可以直接用的——静态(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修饰的成员是属于整个类的,而不是属于某个具体的对象。既然是全局唯一,那么就没有必要在去实例化后再用了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aiming66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值