怎么樣?
答案是這樣的
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 [email protected]"c:/program file/wom",這樣c#會把@后的所有字符都做為
所來的形式來處理,并且他還包含換行符。
好了,關于c#最基本的數據類型就是這些了?。ㄠ蓿孟裆倭它c什么,對對,我下面就要說
了?。?br>
上面是最基本的數據類型,下面我們來談談由這些基本的數據類型所構民的復全數據類型。
對于復合的數據類型,還是分兩類來簡述。
首先要說的還是值類型。在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");
}