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

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 36 ::
收藏到网摘: 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#入门了,呵呵.