当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 说说使用static和const关键字

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 说说使用static和const关键字


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 54 ::
收藏到网摘: n/a



static和const两个关键字,好像都是跟静态有关,初学时易于混淆不算,实际用的时候也是能不用就不用,反正用这两个关键字的机会也少,而且不用也可以,呵呵,这种想法也不是我一个人有的,几乎所有人这么做时也不是想了想才决定的,此事无关风月,关乎天性,呵呵.
首先一定要弄清楚的是,static关键字修饰的成员虽然叫静态成员,却并非是不可改的,如果有这个误解,千万要从此忘记.static关键字被用来声明一个跟对象无关的类型成员,这个说法好像不容易理解,举个例子:
public class Class1()
{
public static x = 1;
public y = 2;
public Class1()
{
}
}
public class Class2()
{
Class1 myClass1 = new Class1();
myClass1.x = 2; //不可以!x为静态成员,不能以Class1的实例对象引用
myClass1.y = 3; //可以
Class1.x = 2; //可以
Class1.y = 3; //不可以,y不是静态成员,只能以Class1的实例对象来引用
}

从上面代码片断可以看到,使用static修饰的字段,只能用类名来引用,而不能通过类实例化了的对象来应用,那么这么做有什么用处?用处是明显的,举上面的例子来说,不管Class1类实例化了多少个对象,这些对象的x字段的值都是一样的,而且对x字段值的修改,会体现在所有该类型的对象中.如在Class2类的代码中对Class1类再实例化一个对象myClass2,则myClass1和myClass2对象的x成员的值都是相同的,如果Class1.x的值改为10,则myClass1.x和myClass2.x的值都是10.
C#是一种完全面向对象化的语言,所有的字段都包含在对象中,所以没有像C++或者VB里那样的全局变量存在,这里,使用static关键字修饰的字段起到了一个全局变量的作用.

另外,static关键字除了修饰变量,也修饰方法,属性,事件等,除了使用static关键字修饰的方法, 只能通过类型名称来调用.这样,对于需要频繁使用的方法,使用static关键字修饰能够节省内存,因为该方法不会被频繁初始化.
const关键字用于定义一个常量值,而且变量必须在声明时赋值,用const关键字定义的这个值是不允许修改的,例:
const int CAPACITY;
CAPACITY = 4; //不可以!必须在声明时赋值
const int DEFAULT_CAPACITY = 4;
string[] paramArr = new string[DEFAULT_CAPACITY];
DEFAULT_CAPACITY = 2; //不可以!此为常量值不可改

有人要说了,定义一个不能修改的值有意义么?当然有意义了啊,定义一个常量值常常用于初始化一个复杂对象的属性值,这个值被不慎修改的话,有可能造成该复杂对象出现问题,
举个浅显的例子,如上面代码所示,一个字符串数组使用DEFAULT_CAPACITY常量初始话一个有4个元素的对象paramArr,从对象名可以猜的出来它是用来接受参数变量的,假如不慎对DEFAULT_CAPACITY误操作修改成了2,那么就有两个参数值丢失了,从而可能造成不可预料的结果,所以一个常量值是有用处的.
说道定义的变量不容修改的问题,不得不说起C#中还有一个readonly关键字,也是使用在字段上定义不容修改的值,但是const和readonly有几个区别,
区别1) 在语法上,const定义的字段只能在字段声明时初始化,而readonly字段既可以在声明时初始化,也可以在构造函数中初始化,根据不同的初始化,readonly定义的字段可能会得到不同的值.
区别2) 在编译时,因为const字段在声明时即初始化,所以是编译时常数,而readonly字段虽然是只读的,其值却可能要等到一个对象初始化后才能知晓,所以可以是运行时常数(但readonly字段如在声明时初始化仍是编译时常数).
区别3) 在使用时,const字段不能用static关键字修饰,但readonly可以.
说说这两个关键字,作为好好练习编程基本功的开始,把这些关键字都会用了,我就可以说我C#入门了,呵呵.