C#中静态变量和方法有什么用处?

如题所述

1.静态变量\x0d\x0a\x0d\x0a在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。\x0d\x0a\x0d\x0a假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(定义一个实例),图书的数量应该加1。如果没有静态变量,我们需要将图书的数量保存在每本图书(实例)里,然而,这样的变量要在不同图书(实例)里重复存储,图书(实例)数量少的话,我们还能接受,如果图书(实例)数量较多的话,比如成千上万,我们无法想象这要造成多少资源(如内存、磁盘空间)的浪费,更让人无法忍受的是:因为图书(实例)的数量要保存在每本图书(实例)里,该值肯定是不同的。要使这些图书(实例)中保存的图书(实例)数量一致,我们必须在每增加一本新书(生成一个新实例)时,修改其他所有图书(实例)中保存的该值。Oh,MyGod!你会重新向往面向过程的程序设计方法,向往拥有全局变量的时代。但,这种局面不会出现,因为C#中为你准备好了另外一种变量类型:静态变量。它在类中类似全局变量,保存类的公共信息,所有该类的实例(对象)共享该值。\x0d\x0a\x0d\x0a静态变量的声明方式如下:\x0d\x0a\x0d\x0a[访问修饰符]static数据类型变量名;\x0d\x0a\x0d\x0a这里的访问修饰符跟类的其它成员一样,可以是public,protected,private或internal等。\x0d\x0a\x0d\x0a静态变量又如何使用呢?\x0d\x0a\x0d\x0a静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的。我们可以打个比方:在一个班级中,有些物品是个人的,我们想使用时,必须指出物品的所有者,比如说“王三的自行车”,在C#程序中我们可以使用:王三.自行车的格式。有些物品是大家共有的物品,不能以个人名义使用,而是用班级的名义使用,比如班集体出资买的篮球,只能说:“班级的篮球”,而不能说:“王三的篮球”。这绝对是不行的,这对其他人绝对是不公平的,我们可以联想到许多贪官污吏就是使用了不属于自己的东西,或以个人名义使用公家的东西而葬送了自己。\x0d\x0a\x0d\x0a说一句有用的就是:静态变量是用类名来引用它。即:类名.静态变量名;\x0d\x0a\x0d\x0a举个具体的例子如下:\x0d\x0a\x0d\x0ausingSystem;\x0d\x0a\x0d\x0aclassStaticVar\x0d\x0a{\x0d\x0apublicintx;\x0d\x0apublicstaticinty;\x0d\x0apublicvoidPrintInfo()\x0d\x0a{\x0d\x0aConsole.WriteLine("非静态变量x={0}",x);\x0d\x0aConsole.WriteLine("静态变量y={0}",y);\x0d\x0a}\x0d\x0a}\x0d\x0aclassTest\x0d\x0a{\x0d\x0astaticvoidMain(string[]args)\x0d\x0a{\x0d\x0aStaticVarstv=newStaticVar();\x0d\x0astv.x=10;\x0d\x0a//stv.y=20;//error;无法使用实例引用访问静态成员“StaticVar.y”;改用类型名来限定它\x0d\x0aStaticVar.y=20;\x0d\x0astv.PrintInfo();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a程序中被注释的部分:stv.y=20是使用实例引用静态变量,这将引发错误。\x0d\x0a\x0d\x0a另外,我想说一句,对于静态变量在声明时,如果没有给出初始值或使用前没有赋任何值的话,系统会给他们一个默认值:对于整型数据默认值为0;单精度数据为:0.0f;双精度数据为0.0;布尔型数据为False;引用型数据为null。\x0d\x0a\x0d\x0a2.静态方法\x0d\x0a\x0d\x0a静态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,由类名来调用。但要注意以下几点:\x0d\x0a\x0d\x0a静态方法只能访问类的静态成员,不能访问类的非静态成员;\x0d\x0a\x0d\x0a非静态方法可以访问类的静态成员,也可以访问类的非静态成员;\x0d\x0a\x0d\x0a静态方法不能使用实例来调用,只能使用类名来调用。这里用一个具体的例子来说明:\x0d\x0a\x0d\x0ausingSystem;\x0d\x0a\x0d\x0anamespaceTestStatic\x0d\x0a{\x0d\x0aclassStaticTest\x0d\x0a{\x0d\x0aintx;\x0d\x0astaticinty;\x0d\x0apublicStaticTest(inta,intb)\x0d\x0a{\x0d\x0ax=a;\x0d\x0ay=b;\x0d\x0a}\x0d\x0apublicvoidSimplePrint()\x0d\x0a{\x0d\x0aConsole.WriteLine("x="+x+",y="+y);\x0d\x0a}\x0d\x0apublicstaticvoidStaticPrint()\x0d\x0a{\x0d\x0aConsole.WriteLine("y={0}",y);\x0d\x0a//Console.WriteLine("x={0}",x);//静态方法中不能使用非静态成员\x0d\x0a}\x0d\x0a}\x0d\x0aclassTest\x0d\x0a{\x0d\x0astaticvoidMain(string[]args)\x0d\x0a{\x0d\x0aStaticTestst=newStaticTest(10,23);\x0d\x0ast.SimplePrint();\x0d\x0a//st.StaticPrint();//静态方法不能使用实例来调用\x0d\x0aStaticTest.StaticPrint();\x0d\x0a}\x0d\x0a}\x0d\x0a}
温馨提示:内容为网友见解,仅供参考
无其他回答

C#中静态变量和方法有什么用处?
1.静态变量\\x0d\\x0a\\x0d\\x0a在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。\\x0d\\x0a\\x0d\\x0a假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(...

C#中静态方法是什么意思?静态成员呢?还有静态类?
静态方法用于表示类所具有的行为,而非其对象所具体的行为。例如: 学生分班这项任务,就是全体学生集体的事情,并并不是只是某个学生的事。静态方法通过在定义中使用static 关键字来声明,static关键字放在修饰符和方法返回的类型之前,格式: 【方法修饰】 static 返回值类型 方法名称(参数列表) ...

静态方法和非静态方法的区别是什么
首先,静态方法和静态成员变量在定义上,静态方法需要加上"static"修饰符。生命周期上,静态方法与静态变量属于类,自类装载后常驻内存,直到JVM关闭。而非静态方法依赖于实例对象,实例化后分配内存,对象消失后会被回收。效率上,静态方法由于不涉及实例化过程,使用起来通常更高效。然而,内存使用上,静态...

C#中什么情况下使用静态类
C#静态类和静态类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。让我们来看看静态类:类可以声明为static的,以指示它仅包含...

C#中static,public,private的意义是什么
static 静态的,。它可以用来修饰类,方法,变量,用static修饰的类,方法或者变量,访问它的时候就不要new创建一个实例,。如果是方法或者变量,,直接用 类名字点方法或者变量名就行了。,不如有一个人类people,里面有个用static修饰的name属性。。如果要在另一个类中访问这个属性,就这样 people...

C#里面静态方法和静态变量的一点问题?
实例方法必须在实例化一个具体对象之后才能访问,为了封装性,对象的成员变量不允许外部程序访问,只允许实例方法访问,也就是做代码访问权限隔离。这种机制对于面向对象思想指导下编程是必须的也是标准。但是我们往往有时候需要做一些数据处理,而这些处理即属于某个类但又具有通用性,而往往又具有一定代码量(...

C#中的静态变量和常量有什么具体的区别?请详细说一下,我看了概念总感觉...
static和const,都会导致编译器在生成时直接分配 如:static int x=1;const int y=1;则if (x=y)编译器将处理成if(1=1)区别在于使用方式:static变量通过类型应用,使用static变量不需要初始化类,而const变量必须在类被初始化以后才能被使用。即:static变量=类型应用 const变量=实例应用 ...

c#中几种函数的区别
1.公共静态函数,是类方法而不是实例方法,其它类可以访问该函数,访问该函数不需要实例化对象.2.对象实例的公共方法,其它对象可以访问此方法.3.私有静态方法,仅类内部使用,外部不访问.Public 公共成员 Private 私有成员 没有注明关键字.net预设为私有成员 有返回值的成员习惯称为函数。无返回值的成员...

C# 静态方法与非静态方法的比较
C#静态方法 1、C#静态方法属于类所有,类实例化前即可使用。2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而...

C#中static关键字的作用
1.static意思是静态,可以修饰类、字段、属性、方法 2.标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 3.static三种用法:4.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数:private void s(){...

相似回答
大家正在搜