走進C#(我的C#學習之旅) 之四(3)
最後更新:2017-02-28
來源:互聯網
上載者:User
怎麼樣?
答案是這樣的
s1 is A string
s2 is A string
s1 is now Anothing string
s2 is now string
看到這個結果大家感覺怎麼樣!我是很感到意外的。因為根據原來的C實現字串的方式,
在這裡面作為一個指標來說,s1與s2應該指向相同的地址。
另外對於字串處理還有另一個問題,如下例:
要構建如下一個串:"C:\PROGRAM FILE\WOM",我想大家明白我的意思了吧!
就是說在這裡有 \ 但是 \ 是做為逸出字元來用的。
(嗯,很簡單)這樣就行了呀:"C:\\PROGRAM FILE\\WOM",完全正確。而C#又提供了另一
種方式來解決這樣的問題。其實是引入了一個@:
上面的可以這樣寫 string a=@"C:\PROGRAM FILE\WOM",這樣C#會把@後的所有字元都做為
所來的形式來處理,並且他還包含分行符號。
好了,關於C#最基本的資料類型就是這些了!(噢,好像少了點什麼,對對,我下面就要說
了!)
上面是最基本的資料類型,下面我們來談談由這些基本的資料類型所構民的複全資料類型。
對於複合的資料類型,還是分兩類來簡述。
首先要說的還是實值型別。在C#提供了兩種複合的實值型別,結構與枚舉。
對於這兩種類型大家是不是很熟悉呀?但是大家不要大意,在C#中這兩種類型已經有了不小
的變化。
還是看個例子呀,還是例子比較能說明問題。
定義了如下的一個結構:
public struct Subscriber
{
public long lngSubscriberID;
public string strFirstName;
public string strMiddleName;
public string strLastName;
public decimal decBalance;
}
是不是和原來的結構有了很大的不同!在C#中結構其實就是一個特殊的類。
再看一下結構的使用:
Subscriber Subscriber1;
Subscriber Subscriber2;
Subscriber1=new Subscriber();
Subscriber1.strFilstName="John";
Subscriber1.strMiddleName="Q";
Subscriber1.strLastName="Public";
Subscriber1.decBalance=100;
Subscriber2=Subscriber1;
這裡定義了兩個結構:Subscriber1,Subscriber2。
然後用new運算子,對Subscriber1進行了初始化。關於初始化在這裡多說一句。對於結構可
以不用new運算子來進行始化。因為在定義的同時就已經進行了一次初始化,所有欄位的默
認值為0。但是這方式還有一個弊端,那就是沒辦法進行兩個結構變數的複製。
再下面的代碼就是實現了對新結構的賦值。而最後一行,就是我所說的結構間的複製。
那麼結構有什麼好處呢。我想最主要的一點就是體現在函數的傳遞中,可以把多個變數打到
一個結構變數中進行傳遞。
前面說過了,結構是一個特殊的類,他們倆最主要的不同就是結構不支援繼承。
好了,說了這麼多,下面來看看枚舉。
還是通過一個例子來看看枚舉。
public enum TimeOfDay
{
Morning=0,
Afternoon=1,
Evening=2
}
class EnumExample
{
public static int Main()
{
WriteGreeting(TimeOfDay.Morning);
return 0;
}
static void WriteGreeting(TimeOfDay timeOfDay)
{
switch(timeOfDay)
{
case TimeOfDay.Morning:
Console.WriteLine("Good morning!");
break;
case TimeOfDay.Afternoon:
Console.WriteLine("Good afternoon!");
break;
case TimeOfDay.Evening:
Console.WriteLine("Good evening!");
break;
default:
Console.WriteLine("Helo!");
break;
}
}
}
對於這個枚舉我想大家一目瞭然了吧!對於枚舉我私人認為呀,就是有點像常數,都是用名
字來打替資料嗎!
對於複合的實值型別就說到這,下面再看看複合的參考型別(數組、類、介面、委託)。
我首推的當然是大家最熟悉的,那就是數組:
由於在C#中限制了對指標的使用,所以對C#數組的使用也產生了影響。
首先還是看看例子:
int[] a;
int[] a = new int[32]
a[0]=35;
a[31]=322;
int[] b;
b=new int[32];
string[] c={"a","b","c"};
string[] d=new string[]{"a","b","c"};
對於上面的例子,說明了幾個要注意的問題。
(1)在C#中數組的起始下標還是為0的。
(2)對數組的初始化要使用new運算子。
(3)在C#中也可以動態定義數組。
(4)對於數組的初始化支援和JAVA一樣的{}方式。
(5)在數組的初始化中這種方式是決不不允許的
int len=3;
string d=new string[len]{"a","b","c"};
對應的解決方式:可以這麼寫:const int len=3;
也就是說不可以給變數來設定數組的長度。
(6)還忘了的一個就是數組定義要使用[]。
(7)再有一點不允許的使用方式如下:
string[] e=new string[3]{"a","b","c","d"};
下面再看個例子:
string[] d=new string[]{"Linda","Lily","Adidas"};
int ff=d.Length; //取資料長度
int ee=d.GetLength(0); //取出指定資料維的長度
Array.Sort(d); //對數組排序
Array.Reverse(d); //把數組反序
由於數組在C#中表示為一種特殊的類型,所以它們有自己的一些方法。這些方法為我們使用數組提供了很大的方便。
上面這些都是對一維數組的使用,同樣C#也是支援多維陣列的。下面來看看多維陣列吧。
還是通過一個例子來認識一下多維陣列的定義和操作。
int[,] a=new int[,]{{1,2,3},{1,2,3},{4,5,6}};
int[,,] b;
int[,,] b=new int[,,]{10,20,30};
string[][] aryLists=new string[3][];
aryLists[0]=new string[]{"a","b","c"};
aryLists[1]=new string[]{"d","e","f"};
aryLists[2]=new string[]{"g","h","i"};
int i;
for(i=0;i<aryLists.GetLength(0);i++)
{
int j;
for(j=0;j<aryLists[i].GetLength(0);j++)
{
Console.Write(aryLists[i][j] + ",");
}
Console.Write("\n");
}