• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > c# static的全部用法收集整理

c# static的全部用法收集整理

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了c站,欲情 c max,c语言,crh2c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
static的全部用法 
    要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量:
    int a;
    string s;
    其实就是:
    auto int a;
    auto string s;
    而static变量的声明是:
    static int a;
    static string s;
    这样似乎可以更有利于理解auto和static是一对成对的关键字吧,就像private,protected,public一样;
    对于static的不理解,其实就是对于auto的不理解,因为它是更一般的;有的东西你天天在用,但未必就代表你真正了解它;auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配,离开其作用域的时候被释放;而static就是不auto,变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期;所以,像这样的例子:
    void func()
    {
        int a;
        static int b;
    }
    每一次调用该函数,变量a都是新的,因为它是在进入函数体的时候被分配,退出函数体的时候被释放,所以多个线程调用该函数,都会拥有各自独立的变量a,因为它总是要被重新分配的;而变量b不管你是否使用该函数,在程序初始化时就被分配的了,或者在第一次执行到它的声明的时候分配(不同的编译器可能不同),所以多个线程调用该函数的时候,总是访问同一个变量b,这也是在多线程编程中必须注意的!

static的全部用法:
1.类的静态成员:
class A
{
private:
    static int s_;
};
    在cpp中必须对它进行初始化:
int A::s_ = 0;// 注意,这里没有static的修饰!
    类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;
    类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,你可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数;

2.类的静态函数:
class A
{
private:
    static void func(int );
};
    实现的时候也不需要static的修饰,因为static是声明性关键字;
类的静态函数是在该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数:void A::func(int);
    静态成员函数可以继承和覆盖,但无法是虚函数;

3.只在cpp内有效的全局变量:
    在cpp文件的全局范围内声明:
    static int g_ = 0;
    这个变量的含义是在该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;
    如果不使用static声明全局变量:
    int g_ = 0;
    那么将无法保证这个变量不被别的cpp共享,也无法保证一定能被别的cpp共享,因为要让多个cpp共享一个全局变量,应将它声明为extern(外部)的;也有可能编译会报告变量被重复定义;总之不建议这样的写法,不明确这个全局变量的用法;
    如果在一个头文件中声明:
    static int g_vaule = 0;
    那么会为每个包含该头文件的cpp都创建一个全局变量,但他们都是独立的;所以也不建议这样的写法,一样不明确需要怎样使用这个变量,因为只是创建了一组同名而不同作用域的变量;
    这里顺便说一下如何声明所有cpp可共享的全局变量,在头文件里声明为extern的:
    extern int g_;     // 注意,不要初始化值!
    然后在其中任何一个包含该头文件的cpp中初始化(一次)就好:
    int g_ = 0;     // 初始化一样不要extern修饰,因为extern也是声明性关键字;
    然后所有包含该头文件的cpp文件都可以用g_这个名字访问相同的一个变量;

4.只在cpp内有效的全局函数:
    在cpp内声明:
    static void func();
    函数的实现不需要static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;道理和如果不使用static会引起的问题和第3点一样;不要在头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则在cpp内部声明需要加上static修饰;在C语言中这点由为重要! </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#开发微信 二维码鼠标滑动 图像显示隐藏效果(推荐)
  • C#开发微信 二维码鼠标滑动 图像显示隐藏效果(推荐)
  • C#.net 微信公众账号接口开发
  • C#实现把图片下载到服务器代码
  • C#将DataTable转化为List<T>
  • C#中OpenFileDialog和PictrueBox的用法分析
  • c#网站WebConfig中域名引用示例介绍
  • C#中的switch case使用介绍
  • C#随机生成不重复字符串的两个不错方法
  • C# 判断两张图片是否一致的快速方法

相关文章

  • 2017-05-11.Net读取Excel 返回DataTable实例代码
  • 2017-05-11Json.net 常用使用小结(推荐)
  • 2017-05-11《解剖PetShop》之四:PetShop之ASP.NET缓存
  • 2017-05-11ASP.NET中实现jQuery Validation-Engine的Ajax验证
  • 2018-08-20.NET CORE动态调用泛型方法详解
  • 2017-05-11asp.net Grid 导出Excel实现程序代码
  • 2018-08-20浅谈Asp.net Mvc之Action如何传多个参数的方法
  • 2017-05-11删除DataTable重复列,只删除其中的一列重复行的解决方法
  • 2017-05-11浅析Repeater控件的使用 (原样导出和动态显示/隐藏Repeater中的列)
  • 2017-05-11简单Web service 身份验证解决方案

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ASP.NET 2.0 程序安全的基础知识
    • .net 添加Cookie的4种方法
    • asp.net Linq to Xml学习笔记
    • C#调用C++版本dll时的类型转换需要注意的问题小结
    • Chrome内核下由ashx输出的js代码不起作用的解决方法
    • WebAPI 实现前后端分离的示例
    • Javascript调用Webservice的多种方法
    • asp.net mvc路由篇 如何找到 IHttpHandler方法介绍
    • asp.net 自制的单选、多选列表实现代码
    • GridView使用学习总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有