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#
入门了
,
呵呵
.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69914734/viewspace-2653639/ ,如需转载,请注明出处,否则将追究法律责任。