嵌入式學習資源—說說使用static和const關鍵字
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部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2653639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 說說iOS中的常用的關鍵字static ,class(僅限Swift關鍵字)iOSSwift
- java final和static關鍵字學習Java
- iOS常用關鍵字static、const、extern、defineiOS
- iOS中的static const extern關鍵字iOS
- 物聯網學習教程—const關鍵字
- JavaSE基礎知識學習-----Static關鍵字Java
- static關鍵字
- static關鍵字的使用總結
- 1_static關鍵字的使用
- const關鍵字
- Java 的 static 關鍵字Java
- JAVA static關鍵字理解Java
- java之static關鍵字Java
- static關鍵字的作用
- static關鍵字---"工具類"
- 初識static關鍵字
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- C++關鍵字(static/register/atuo/extern/volatile/const)釋疑 (轉)C++
- java中的static和final關鍵字Java
- Java基礎——final和static關鍵字Java
- java基礎----->Static 和 Final 關鍵字Java
- Java關鍵字static、final使用小結Java
- Java關鍵字final、static使用總結Java
- 【轉】C++ static關鍵字C++
- 物件導向-static關鍵字物件
- C++中static關鍵字C++
- static關鍵字作用總結
- C語言之static關鍵字C語言
- java中的static關鍵字Java
- 1688按關鍵字搜尋新品資料說明
- 深入理解Swift中static和class關鍵字Swift
- Java基礎-static關鍵字和單例模式Java單例模式
- FCS程式日誌的關鍵字說明
- c/c++ const關鍵字C++
- Docker 關鍵字說明及一鍵構建相關服務Docker
- java中static關鍵字的作用Java
- Java中的static關鍵字解析Java
- PHP 手冊 (類與物件) 學習筆記九:Static(靜態)關鍵字PHP物件筆記