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

您所在的位置:网站首页 静态类型的变量需要通过关键字什么来声明 C#关键字static如何使用,在什么情况下使用?

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

2024-07-09 18:06| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3