關於 Chapter 05 變數的更多內容分析

2021-07-11 10:18:33 字數 4478 閱讀 1433

5.1型別轉換

1.無論什麼型別,所有的資料都是一系列的位,即一組0和1。變數的含義是通過解釋這些資料的方式來傳達的。最簡單的示例是char型別,這種型別用乙個數字表示unicode字符集中的乙個字元。實際上,這個數字與ushort的儲存方式相同----他們都是儲存0~65535之間的數字。

2.一般情況下,不同型別的變數使用不同的模式來表達資料。這意味著,即使可以把一系列的位從一種型別的變數移動到另一種型別的變數中(也許他們占用的儲存空間相同,也許目標型別有足夠的儲存空間包含所有的源資料位),結果也可能與期望的不同。這並不是資料位從乙個變數到另乙個變數的一對一對映,而是需要對資料進行轉換。

5.1.1 隱式轉換

1.bool和string沒有隱式轉換

2.隱式轉換的規則:任何型別a,只要取值範圍完全包含在型別b的取值範圍內,就可以隱式轉換為型別b。

5.1.2 顯示轉換

1.關鍵字 checked和unchecked

5.1.3 使用convert命令進行顯示轉換

convert.toint32(val)

轉換的名稱略不同於c#型別名稱,例如,要轉換為int,應使用convert.toint32()。這是因為這些命令來自於.net framework的system命名空間,而不是c#本身。這樣他們就可以在除c#以外的其他.net相容語言中使用。

5.2 複雜的變數型別

5.2.1 列舉

有時希望變數提取的是乙個固定集合中的值,就可以使用列舉型別。

1.定義列舉

列舉可以使用enum關鍵字來定義:

enum typename : underluingtype

接著宣告這個新型別的變數:

typename varname;

並賦值:

varname=typename.value;

2.列舉使用乙個基本型別(underlying)來儲存。在預設情況下,該型別為int,可以是byte,short,ushort,int,uint,long和ulong。所以列舉和陣列一樣,資料型別只有一種的。

3.在預設情況下,每個只都會根據定義的順序(從0開始),自動賦給對應的基本型別值。這意味著value1的值是0,value2是2......。可以重寫這個賦值過程,使用=運算子。

4.還可以使用乙個值作為另乙個列舉的基礎值,為多個列舉指定相同的值。沒有賦值的任何值都會自動獲得乙個初始值,這裡使用的值是比最後乙個明確宣告的值大一的序列。

5.把列舉轉化為其他資料型別?

6.使用typeof()運算子,可以得到運算元型別。

5.2.2 結構

結構就是由幾個資料組成的資料結構,這些資料可能有不同的型別。

1.定義結構

使用struct關鍵字來定義

struct 

部分包含的變數的定義(成為結構的資料成員),其格式與往常一樣,每個成員的宣告都採用如下的形式:;如:

struct  mystruct

定義了這個結構型別之後,就可以定義新型別的變數,來使用這個結構:

mystruct mystr;

還可以通過句點字元訪問這個組合變數中的資料成員:

mystr.x=2;

mystr.y=2.3;

5.2.3 陣列

前面所有的型別都有乙個共同點:他們都只儲存乙個值(結構中儲存一組值)。有時,需要儲存許多資料,有時需要同時儲存型別相同的幾個值,而不是每個值都使用不同的變數。

陣列是乙個變數的下標列表,儲存在陣列型別的變數中。陣列有乙個基本型別,陣列的各個元素都是這種型別。

1.宣告陣列:

;其中可以是任何變數型別,包括本章前面介紹的列舉和結構型別。

初始化陣列有兩種方式。

1)可以以字面形式指定陣列的完整內容。需要提供乙個用逗號隔開的元素值列表,該列表放在花括號中如:

int  myintarray=;

2)也可以指定陣列的大小,再使用new關鍵字初始化陣列元素。需要使用下述語法:

int myintarray= new int[5];

notice:

這裡使用關鍵字new顯示的初始化陣列,用乙個常量定義其大小。這種方式會給所有的陣列元素都賦予同乙個預設值,對於數值型別來說,其預設值是0。也可以使用非常量變數來進行初始化,如:

int myintarray=new int [arraysize];

3)另外,還可以使用這兩種初始化方式的組合:

int myintarray=new int[5];

使用這種方式,陣列的大小必須與元素的個數相匹配。

如果使用變數定義其大小,該變數必須是乙個常量,必須用const關鍵字例如:

const int arraysize=5;

int myintarray=new int[arraysize];

2.foreach迴圈

foreach(in )

這個迴圈會迭代每個元素,依次把每個元素放在變數中,且不存在訪問非法的危險。使用這種方法和標準的for迴圈的主要區別是foreach迴圈對陣列內容進行唯讀訪問,所以不能改變任何元素的值。

3.多維陣列

1)二位陣列的宣告:

[,]  ;

多維陣列只需要更多的逗號:

[,,,]  ;

2)宣告和初始化

double[,]  hillheight=new double[3,4];

還可以使用字面值進行初始賦值,這裡使用巢狀的花括號用逗號隔開,如:

double[,]  hillheight=,,};

4.陣列的陣列(變長陣列)

可以使用變長陣列,其中每行都有不同的元素個數。為此,需要這樣乙個陣列,其中的每個元素都是另乙個陣列。也可以有陣列的陣列的陣列,或更複雜的陣列。但是,注意這些陣列必須有相同的基本型別。

1)宣告陣列的陣列(變長陣列),其語法要在陣列的宣告中指定多個方括號對,例如:

int jaggedintarray;

2)初始化

有兩種方式:可以初始化包含其他陣列的陣列(稱之子陣列)然後依次初始化子陣列:

jaggedintarray=new int[2];

jaggedintarray[0]=new int[3];

jaggedintarray[1]=new int[4];

也可以使用上述字面值賦值的一種改進形式:

jaggedintarray=new int[3],new int,new int};

也可以簡化,把陣列的初始化和宣告放在同一行上,如:

int jaggedintarray=,new int,new int};

3)使用foreach迭代時,通常需要巢狀該迴圈,迴圈該陣列本身和每個子陣列。因為陣列jaggedintarray包含的是int元素,而不是int元素。

5.3 字串的處理

1.string型別變數可以看作是char變數的唯讀陣列,如:

string mystring=」 a  string」;

char mychar=mystring[4];

2.但是,不能用這種方式為各個字元變數賦值。為了獲得乙個可寫的char陣列,可以使用下面的**,其中使用了陣列變數的tochararray()命令:

string mystring=」 a  string」;

char mychars=mystring.tochatarray();

接著就可以用標準方式處理char陣列。也可以在foreach迴圈中使用字串。

3.mystring.length;

4.mystring.tolower();       mystring.toupper();

5..trim()

1)可以使用.trim()刪除輸入內容前面.trimstart()的和後面的空格.trimend()。

2)也可以使用該命令刪除指定的字元,只要在乙個char陣列中指定這些字元即可,如:

char trimchars=;

string userresponse=console.readline();

userresponse=userresponse.trim(trimchars);

if(userresponse==」y」)

6..padleft()和.padright()

1)可以在字串的左邊或者右邊新增空格

mystring=」aligned」;

mystring=mystring.padleft(10,);

2)也可以新增指定的字元到字串上,這需要乙個char,如:

mystring=」aligned」;

mystring=mystring.padleft(10,』-』); //這將會在mystring開頭加上3個』-』。

7..split()

1)可以把string轉換為string陣列,把它的指定的位置分隔開。這些位置採用char陣列的形式。如:

string mystring =「this is a test.」

char separator=;

string mywords=mystring.split(separator);

notice:

在使用split()時,刪除了分隔符。

chapter05 Spring對事務的支援

一 spring 對事物支援所採用的策略 1.spring 統一各種事物的程式設計方式 aop事務的含義 事務當作乙個切面,動態地織入到目標物件,形成乙個 物件。二 spring 的事務機制 spring 支援宣告式事務。spring 使用事務服務 和事務管理器 如hibernatetransact...

chapter 2 變數 變數的命名

晚了一天,但在這博主還是祝能看到此篇部落格的同學 端午安康,平安喜樂 這兩天朋友來,玩嗨了 大駝峰 printmyname 小駝峰 printmyname 匈牙利 print my name 以上三種,不能說誰好誰壞,全憑個人習慣 喜好,在就國內的整個計算機語言大環境來說 我猜的 現在來看好像是 小...

變數被用於更複雜的

第二,這也許是最重要的規則,讓你的識別符號名稱實際上描述它們是什麼。這是沒有經驗的程式設計師進行變數名稱盡可能短的典型,是為了節省打字或因為他們圖的意義是顯而易見的。這是幾乎總是錯誤的。理想的情況下,應命名的變數的一種方式,可以幫助那些不知道你的 並能找出盡快。3個月後,當你看著你的節目,你會忘記它...