,但也不完全是。和所有
.NET语言(例如Visual Basic .NET和JScript .NET)一样,C#可以访问.NET类库。并没有一个仅属于C#的类库,.NET类库是所有语言共享的。 2. 基本类型 2.1 C#支持哪些标准类型? C#支持的基本类型和C++非常相似,包括int、long、float、double、char、string、数组(array)、结构体(struct)和类(class)等等。但是,别想得太好,这些类型的名字虽然相似,但某些细节可能有所不同。例如,C#中的long型数据是64位,而C++中long型数据的大小取决于所处的平台(通常在32位平台上是32位,在64位平台上是64位)。另外,在C++中类和结构体几乎是完全相同的,但在C#中则不是这样。
2.2 C#中所有的类型都是从一个共同的基类派生来的吗? 既是也不是。所有的类型都会被作为
object类(System.Object)的派生类来对待,但是如果要把值类型(例如int和float)的实例作为object派生类来处理,就必须通过所谓的“装箱(boxing)”过程将该实例转换成引用类型。从理论上来说,开发者可以完全忽略这个过程,让运行时来操心转换的细节。但是,这种隐式转换实际上会有一些副作用,可能会给粗心大意的开发者带来一些麻烦。 2.3 那么,我是否可以将值类型的实例传递给需要对象作为参数的方法呢? 是的,可以这样做。例如:
class CApplication
{
public static void Main()
{
int x = 25;
string s = "fred";
DisplayMe( x );
DisplayMe( s );
}
static void DisplayMe( object o )
{
System.Console.WriteLine( "You are {0}", o );
}
}
这段
程序的输出是:
You are 25
You are fred
2.4 值类型和引用类型之间有什么本质性的区别? C#将类型分为两种:值类型和引用类型。绝大多数固有类型(例如int和char)都是值类型,结构体也是值类型。引用类型则包括类、接口(interface)、数组和字符串(string)。这里的根本思想很简单:值类型的实例表现的是实际数据,并被保存在栈上;而引用类型的实例表现的则是指向数据的指针或者引用,并被保存在堆上。最令
C++开发者感到迷惑的就是:对于哪些类型作为值来表现、哪些类型作为引用来表现,C#已经预先确定了。而C++开发者往往希望由自己来做这样的决定。 例如,在
C++中,我们可以这样做: int x1 = 3; // x1 is a value on the stack
int *x2 =