正确理解静态Static关键字
与其他语言不通,C#没有全局变量和全局函数的感念,C#的所有字段和方法都出现在一个类的上下文中,在C#中与全局字段或函数等价的就是静态字段或方法。“全局字段或方法”与“C#的静态字段或方法”没有功能上的差别,只是静态字段和静态方法可以加上“访问修饰符”如Private,从而可以对访问进行限制,提供更好的封装。
首先来看静态字段
直接在类名之后访问静态字段如(ClassName.StaticField)在类的所有实例中都共享静态字段的存储位置,静态字段是全局的。打个比方我们有一套5元人民币的模具(最好还是不要有),这个模具就是类,用这个模具印出来的纸币就是实例,虽然这些纸币基本相同,但是他的编号肯定不同,(如果编号相同,基本可以肯定是假币,假币的制造模具和真币的模具是两个不同的类)。每张纸币(实例)的编号就可以理解是模具(类)中的静态字段,因为Static决定了它所修饰的字段是全局的。静态字段属于类本身,而不属于类构造出的实例。
静态方法
直接在类名之后访问静态方法如(ClassName.StaticMethod)当然这种访问方式不需要一个实例,由于静态方法不是通过一个具体的实例访问的,所以在静态方法内使用this是无效的。
静态构造器
静态构造器设计为对类(不是类实例)进行初始化的一种方式。在运行时访问类时自动调用静态构造器。
例如
Class Emp
{
static Emp
{
ID= Rand(1,100);
}
public static int ID = 112;
}
我们在首次使用Emp.ID时,ID的值是不是112,而是1到100的随机数。
静态类
如果一个类中仅有方法,没有实例字段,那我们就没有必要使用这个类的实例,这种类最好设计为静态类。所以静态类不能被实例化。既然我们不想要这个类的实例,这个静态类的内部也不应该有实例字段或方法。而且静态类不能被扩展。在C#1.0中不能声明静态类,是通过私有构造器实现的。
单例模式的目的是为了在程序中提供类的唯一实例,而且仅提供唯一的访问点。静态不需要实例,仅提供一个全局功能。使用单例可以继承,实现接口,而静态类不能。静态方法不能访问类中的实例字段,因为静态方法不是通过实例来访问的。而单例中的方法却可以访问那个唯一实例中的实例字段。静态方法在执行后,会释放掉它所创建的所有对象。而单例中的方法却可以保留。静态字段仅是提供全局的功能,大家共享同一内存位置。访问单例中的字段是类的唯一实例中的字段,大家只能访问这个实例的字段。
正确理解静态Static关键字的更多相关文章
- Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)
Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...
- java中的静态static关键字
类的静态成员函数不能访问非静态的成员函数以及非静态的成员变量, 但是反过来却是成立的. 即:非静态成员函数可以访问静态成员函数和静态成员变量. 这个可以从静态成员的特点来解释,因为静态成员属于类,因此 ...
- Java静态static关键字
static关键字既可以修饰成员变量,也可以修改成员方法,修饰的成员变量和成员方法可以直接通过类名调用,也可以通过对象调用(其实即使是通过对象调用,也会被翻译成类名调用),建议通过类名调用. 成员方法 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_13_静态static关键字修饰成员方法
static关键字 用来修饰方法的情况 任何使用这个静态方法呢? 可以直接通过对象名称的方式进行调用. 更好的写法是通过类名称进行调用. 分别定义成员变量和静态变量 静态方法里面不能用this
- 静态static关键字修饰成员方法和静态static的内存图
当 static 修饰成员方法时,该方法称为类方法 .静态方法在声明中有 static ,建议使用类名来调用,而不需要 创建类的对象.调用方式非常简单 ~类方法:使用 static关键字修饰的成员方法 ...
- 静态static关键字概述和静态static关键字修饰成员变量
static关键字 概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_12_静态static关键字修饰成员变量
创建一个学生类 定义成员变量,无参构造,全参构造.成员变量的getter和setter 所在教室必须是一样的,定义所在教室 下面来创建两个学生 只给one的room赋值了.two的教室并没有赋值.都输 ...
- Java 静态static 关键字作用
静态的方法1.可以通过类名打点访问2.不能使用this关键字3.不能访问非静态的属性和方法 /* * 静态的方法: * 1.属于类的方法,可以通过类名打点访问 * 2.方法中不能使用this关键字 * ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_11_静态static关键字概述
static静态关键字的基本含义 红色教室都划掉 一份数据分给三个人用,而不是三个人相同的数据,三个对象写三遍没有必要. 只写一遍教室,写在学生的类当中.这样还就可以省内存.如果要换教室的话 ,只需要 ...
随机推荐
- Jsp技术总结
这节我们总结一下Jsp的相关技术. 1. 什么是JSP JSP即Java Server Pages,它和servlet技术一样,都是sun公司定义的一种用于开发动态web资源的技术.该技术的最大特点在 ...
- Python之Django--ORM连表操作
一对多 class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Mo ...
- Inno Setup使用技巧
一.关于Inno Setup如何在安装时播放音乐 方法(1): 在脚本编译里的[Code]与[Files]段处添加以下代码: [Code] Function mciSendString(lpszCom ...
- asp.net“服务器应用程序不可用” 解决方法
服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的“刷新”按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误消息可在 We ...
- select选择框内容左右移动添加删除栏(升级)
先看一下之前的版本(10年前的作品了) 新版增加了拖动事件(双向及本列),双击左右自动移动,修正了算法性能更好: 也更新了如果姓名长度太长显示变形问题
- 2014 Hangjs 见闻流水账第一天
前言 6月21日~6月22日, 第一次跑远门去参加一个大会(广州 -> 杭州),本来打算,在火车的回来的路上,把这两天的东西记录一下,不过,火车上的环境实在恶劣,同时也高估了自己的专注力,所以, ...
- AngularJS Eclipse——新手入门【翻译+整理】
原文地址 本文介绍如何安装和配置 AngularJS Eclipse.AngularJS Eclipse 插件是基于强大的 JavaScript 推断引擎(javascript inference e ...
- Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- HLS视频点播&直播初探
前端可选的视频直播协议大致只有两种: RTMP(Real Time Messaging Protocol) HLS(HTTP Live Streaming) 其中RTMP是Adobe开发的协议,无法在 ...
- android sudio 打包资料汇总
.http://blog.csdn.net/fengyuzhengfan/article/details/43876489 混淆2.http://my.oschina.net/fallenpanda/ ...