首 页IT知识库翔宇问吧收藏本站
当前位置:算搜IT乐园IT知识库C#专区C#基础

C#中静态变量与静态方法的使用

减小字体增大字体作者:suansuo.cn  来源:本站原创  发布时间:2013-10-23 20:28:02

1.静态变量

在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。

假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(定义一个实例),图书的数量应该加1。如果没有静态变量,我们需要将图书的数量保存在每本图书(实例)里,然而,这样的变量要在不同图书(实例)里重复存储,图书(实例)数量少的话,我们还能接受,如果图书(实例)数量较多的话,比如成千上万,我们无法想象这要造成多少资源(如内存、磁盘空间)的浪费,更让人无法忍受的是:因为图书(实例)的数量要保存在每本图书(实例)里,该值肯定是不同的。要使这些图书(实例)中保存的图书(实例)数量一致,我们必须在每增加一本新书(生成一个新实例)时,修改其他所有图书(实例)中保存的该值。Oh,My God!你会重新向往面向过程的程序设计方法,向往拥有全局变量的时代。但,这种局面不会出现,因为C#中为你准备好了另外一种变量类型:静态变量。它在类中类似全局变量,保存类的公共信息,所有该类的实例(对象)共享该值。

静态变量的声明方式如下:

[访问修饰符] static 数据类型 变量名;

这里的访问修饰符跟类的其它成员一样,可以是public,protected,private或internal等。

静态变量又如何使用呢?

静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的。我们可以打个比方:在一个班级中,有些物品是个人的,我们想使用时,必须指出物品的所有者,比如说“王三的自行车”,在C#程序中我们可以使用:王三.自行车的格式。有些物品是大家共有的物品,不能以个人名义使用,而是用班级的名义使用,比如班集体出资买的篮球,只能说:“班级的篮球”,而不能说:“王三的篮球”。这绝对是不行的,这对其他人绝对是不公平的,我们可以联想到许多贪官污吏就是使用了不属于自己的东西,或以个人名义使用公家的东西而葬送了自己。

说一句有用的就是:静态变量是用类名来引用它。即:类名.静态变量名;

举个具体的例子如下:

using System;

class StaticVar
{
    public int x;
    public static int y;
    public void PrintInfo()
    {
        Console.WriteLine("非静态变量x={0}",x);
        Console.WriteLine("静态变量y = {0}",y);
    }
}
class Test
{
    static void Main(string[] args)
    {
        StaticVar stv = new StaticVar();
        stv.x = 10;
        // stv.y = 20;
        //error;无法使用实例引用访问静态成员“StaticVar.y”;改用类型名来限定它
        StaticVar.y = 20;
        stv.PrintInfo();
    }
}

程序中被注释的部分:stv.y = 20是使用实例引用静态变量,这将引发如下图所示的错误。

静态变量的错误使用

运行结果如下所示:

静态变量

另外,我想说一句,对于静态变量在声明时,如果没有给出初始值或使用前没有赋任何值的话,系统会给他们一个默认值:对于整型数据默认值为0;单精度数据为:0.0f;双精度数据为0.0;布尔型数据为False;引用型数据为null。

2.静态方法

态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,由类名来调用。但要注意以下几点:

静态方法只能访问类的静态成员,不能访问类的非静态成员;

非静态方法可以访问类的静态成员,也可以访问类的非静态成员;

静态方法不能使用实例来调用,只能使用类名来调用。这里用一个具体的例子来说明:

using System;
namespace TestStatic
{
    class StaticTest
    {
        int x;
        static int y;
        public StaticTest(int a,int b)
        {
            x = a;
            y = b;
        }
        public void SimplePrint()
        {
            Console.WriteLine("x="+x+",y="+y);
        }
        public static void StaticPrint()
        {
            Console.WriteLine("y={0}",y);
            // Console.WriteLine("x={0}",x); //静态方法中不能使用非静态成员
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            StaticTest st = new StaticTest(10,23);
            st.SimplePrint();
            //st.StaticPrint(); //静态方法不能使用实例来调用
            StaticTest.StaticPrint();
        }
    }
}

程序运行结果如下:

静态变量与非静态变量 

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!
用户名:查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2020 suansuo.cn. All Rights Reserved.
科创板知识问答答案,科创板行情一般看道科创?_侧标股票网零售行业印花税怎么算,购销合同的印花税计税额是否含税_厕脏股票网影响股票发行价格的因素,为什么股票会有涨跌,股票涨与跌的根源是什么?_策寨股票网选股的六大指标,广东操盘手点评MACD指标实战技巧!(附选股公式)_册售股票网外资股票有哪些,外资爆买白马三只A股:刺激!还有哪些公司被盯上?_册了股票网资本市场线与证券市场线的联系,大佬们分析一下2020年的证券市场,预测一下2021年走势?_策并股票网筹码分布指标是陷阱,终于有人说出真相:这才是筹码分布的正确用法,简单实用_厕挑股票网全球股市实时走势,全网股市研判最牛狗哥回归,不多解释!_测顺股票网涨停板怎样买入,“涨停板买入法”!今日买入,涨停,非常好使的短线操盘方法!连续涨停后放巨量,A股市场:一旦“换手率”出现8大征兆,说明主力吸筹完毕,后市拉涨停在即涨停后横盘整理,中国股市:为何有的股票横盘后拉升10-20个点后就一路狂跌?擒牛指标公式网,精选指标——黑牛系统,精准高效识别持仓,亲测胜率92.4%国际资本市场名词解释,外国新闻史名词解释(超全)资本市场工具的概念,【读书笔记】资本(6)不变资本和可变资本商业银行名词解释重点,你可以说出不以 A 开头的银行吗?公司债券是货币市场工具吗,市场上的货币是如何多起来的?经济资本是监管部门规定的商业银行,商业银行市场风险资本计量-基金?如何通过k线图把握最佳买卖点,怎样在K线图上看出主力的建仓情况?一篇文章帮你搞清楚1分钟k线判断涨跌,中国股市:“开盘前后30分钟”判断涨跌,听听专家的分享三只松鼠股票基本面分析,你对于三只松鼠有什么看法?同花顺里面的黑线和黄线,月季,叶片上面有黄色的点,周围有黑色,对应位置背面也有黑色的斑,请问这是得了什么病?对倒放量洗盘分时图,这3种情况是主力在出货,千万别买进!(图解)如何看分时图高抛低吸,8种高抛低吸分时买卖战法,满仓被套者注意:这才是真正的技术!分时图下面的成交量颜色,但凡“分时图”出现以下特征,必须毫不犹豫清仓,走慢一秒都是深套!期货日内分时图技术精解,做期货黄金原油时怎么看K线,看K线有哪些技巧?印花税分为哪几种,印花税新变化一起来看看股票交易里面的印花税是什么,印花税征收的意义到底何在,为了达到什么控制目的?什么是印花税,税局:上年度印花税急升54%创新高股权转移的印花税怎么做账,香港公司成立后怎么进行股权转让?洗盘与出货分时图解,一个散户牛人的自信:通过这信号,就知道主力是在洗盘还是在出货