C#关键字static如何使用,在什么情况下使用?

C#中static关键字如何使用,在什么情况下使用?

一个月以前在上java课程的时候,老师讲到了static的基础用法,但是后来忘了,昨天突然想到了,就查阅了大量的资料,发现有些资料讲的就特别啰嗦,所以就讲各种各样的说法试了一下,总结出了这篇含金量比较高的文章,希望会对您有一些帮助。

一、先来了解static的中文意思

在这里插入图片描述
从上图可以看出,static是静止的,不动的意思

二、在C#中的意思

​ static是静态的的意思,既然是静态的,就是不变的意思,而不变就是它不会因为类中实例化对象的不同而不同,它在类中永远只有一份就像中国人有许多,但是我们这么多人只有一个国家——中国。

static可以修饰类、字段、属性以及方法。标记为static的就不用创建实例来调用了,如果外部要对其进行调用,可以直接通过(类名.方法名)来调用,内部就可以直接通过方法名调用。

三、由static修饰的归属问题

​ 被static修饰的不管是变量还是方法,都属于类直接管理,所以类中所有的方法(静态和实例的方法)都可以调用他们。举个例子吧,就不如:一个公司的打印机,它是属于公司公共的物品,而不是说属于哪个部门哪个人的,公司里的所有人员(实例)都有权去使用这个公共的打印机。

例如:

 class Program1
    {
        static int i;
        static void main() {	//被static修饰的方法,被称为静态方法
            Console.WriteLine(i);
        }
        public  void Ak() {	//Ak是实例方法
            Console.WriteLine("aaaaa");
            main();//实例方法可以调用静态方法main();
        }
    }

四、static修饰的范围

1、类

static可以修饰类,使类成为静态类。这样在此类中只能定义静态的方法和静态的变量

(1)静态类和非静态类的区别

​ 静态类和非静态类最重要的区别在于静态类不能被实例化,也就是说不能使用new关键字创建静态类类型的变量。

​ 在声明一个类时使用static关键字,具有两方面的意义:第一:它防止程序员写代码来实例化该静态类;第二,它防止在类的内部声明任何实例字段或方法,也就是说静态类中的字段方法必须为静态的而不是实例的。

(2)静态类的特征

  • 静态类中只能包含静态成员,其他实例成员一律不行
    在这里插入图片描述
  • 静态类无法通过new关键字的方法实例化
    在这里插入图片描述
  • 静态类的本质,是一个抽象的密封类,所以不能作为基类用来继承
  • 不能包含实例构造函数
  • 如果一个类下的所有成员都需要被共享,就是供其他类使用,那么就可以把这个类定义为静态类

2、变量

static可以修饰变量,注意:这个变量只能是成员变量,而不能是局部变量

静态成员变量的特点:
  • 静态成员变量是属于类的,类被加载时初始化,并且有默认初始值(实例成员变量属于对象,在每个对象被创建时初始化,每个对象一份)
  • 存在优先于对象,被所有对象所共享,常驻内存

3、方法

static可以修饰方法,Main方法必须用static修饰,因为它是与程序共存亡的,是程序的入口和程序的大门

静态方法的特点:
  • 静态方法是不属于特定对象的方法
  • 静态方法可以直接访问静态成员(包括静态字段、静态方法)
  • 静态方法不可以直接访问实例成员,并且静态方法也不能直接调用实例方法

例子1:

 class Program1
    {
        int i;//正确,成员变量有默认初始值
        public void Bb(/*tatic string str */)//错误,形式参数不能使用static修饰
        {
           // int c;//错误,局部变量需要手动赋值,才能使用
            //static int a;//错误,局部变量不能使用static修饰
        }
    }

例子2:

 static class Program1
    {
        int i;//错误,静态类中只能定义静态成员变量
        public void Bb()//错误,静态类中只能定义静态成员方法
        {
        }
    }

4、构造函数

static可以修饰,使构造函数成为静态构造函数。并且不能在再使用其他修饰符,并且不能是实例构造函数

静态构造函数的特点:
  • 静态类可以有静态构造函数,也就是说静态类中的构造函数只能是静态的,并且不可继承
  • 静态构造函数没有访问修饰符,没有参数,只有一个static修饰符
  • 在非静态类中也可以有静态构造函数,并且,静态构造函数在,非静态类在实例化之前要被自动执行,并且速度要比实例化后调用的构造函数要快
  • 静态构造函数只执行一次

例子:

  class Program1
    {
       static Program1()//静态构造函数
        {
            Console.WriteLine("静态构造函数被执行");
        }
        public Program1()//非静态构造函数
        {
            Console.WriteLine("非态构造函数被执行");
        }
    }
//外部调用
  static void Main(string[] args)
        {
          
            Program1 p = new Program1();
            Console.ReadLine();
        }

输出结果:
在这里插入图片描述

五、static修饰的调用

1、在本类里调用由static修饰的方法和变量,可以直接使用

  class Program1
    {
        static int i;//定义静态成员变量
        static public void Bb()//定义静态成员方法
        {
            Console.WriteLine(i);
            main();
        }
        static void main()
        {
            Console.WriteLine("我是成员方法main");
        }
    }

2、在外部类中调用static修饰的方法和变量,需要(类名.方法名或变量名)

//本类中
  class Program1
    {
        static public int i;//定义静态成员变量
        static public void Bb()//定义静态成员方法
       	 {
            Console.WriteLine(i);
         }
        static public void main()
       	 {
            Console.WriteLine("我是成员方法main");
         }
    }
    //外部类调用
      class Program
    {
        static int i;
        static void Main(string[] args)
        {
            //直接类名.方法名或者变量名调用
            Console.WriteLine(Program1.i);
            Program1.main();
            Program1.Bb();
        }
        
    }

六、什么情况下使用static修饰

  • 当变量需要共享时,可以将变量定义为静态变量
  • 当方法需要被反复调用时,可以将方法定义为静态方法
  • 当一个类中包含的成员都是静态时,可以将类定义为静态类

本篇文章详细讲解了static修饰符的用法,希望对各位朋友有所帮助。也许有些朋友会觉得我总结的不太完善或者有不对的地方,还请各位朋友能够指点迷津,指出我的错误,不要让我恶性循环了,哈哈哈,就跟大家说到这里吧,我会不定时更新博文的,还请各位朋友能多多支持,谢谢大家!

  • 23
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C#static关键字可以用于修饰类、字段、方法、属性、构造函数等。它的作用是将其修饰的成员变为静态成员,即该成员不再与类的实例对象绑定,而是与类本身绑定。这意味着,无论创建多少个类的实例对象,静态成员只有一份,且可以通过类名直接访问。 在引用,Student类被定义为静态类,其的字段和方法也被定义为静态的。这意味着我们可以直接通过类名Student来访问其的静态方法Print(),而不需要创建Student类的实例对象。 在引用,Person类的字段和方法被定义为静态的,但是Person类本身并没有被定义为静态类。这意味着我们需要先创建Person类的实例对象,然后通过该实例对象来访问其的静态方法Print()。 下面是一个示例代码,演示了如何使用static关键字定义静态成员: ```csharp using System; class MyClass { public static int myStaticVar = 42; // 静态字段 public int myInstanceVar = 0; // 实例字段 public static void myStaticMethod() // 静态方法 { Console.WriteLine("This is a static method."); } public void myInstanceMethod() // 实例方法 { Console.WriteLine("This is an instance method."); } } class Program { static void Main(string[] args) { Console.WriteLine(MyClass.myStaticVar); // 直接访问静态字段 MyClass.myStaticMethod(); // 直接调用静态方法 MyClass obj1 = new MyClass(); MyClass obj2 = new MyClass(); obj1.myInstanceVar = 1; obj2.myInstanceVar = 2; Console.WriteLine(obj1.myInstanceVar); // 访问实例字段 Console.WriteLine(obj2.myInstanceVar); obj1.myInstanceMethod(); // 调用实例方法 obj2.myInstanceMethod(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

御弟謌謌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值