怎么样?
答案是这样的
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");
}