C#Doorstep1基础概念篇
--值类型
--引用类型
--装箱和拆箱
.NET技术是微软公司推出的一个全新概念,它代表了一个集合、一个环境和一个可以作为平台支持下一代Internet的可编程结构。
.NET平台包括.NET框架和.NET开发工具等组成部分。.NET框架(Framework)是整个开发平台的基础,包括公共语言运行库和.NET类库。.NET开发工具包括Visual Studio.NET集成开发环境和.NET编程语言。
公共语言运行库CLR(Common Language Runtime)是 .NET Framework 的基础。可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。
Visual Basic.NET |
C# |
托管C++ |
J# |
其他语言 | |
公共语言规范(CLS) | |||||
ASP.NET/Web应用/Web服务 |
Window窗体应用 | ||||
ADO.NET与XML | |||||
.NET框架基础类库 | |||||
公共语言运行时 | |||||
操作系统 | |||||
n .NET Framework 类库是一个与公共语言运行库紧密集成的可重用的类型集合。
n 可使用 .NET Framework 开发下列类型的应用程序和服务:
n 控制台应用程序。
n Windows GUI 应用程序(Windows 窗体)。
n ASP.NET 应用程序。
n XML Web services。
n Windows 服务。
主要用于开发三类程序:控制台程序、Windows程序和ASP.NET程序。C#程序的扩展名为.CS,通过编译器CSC.EXE编译成可执行文件。
下面开始我们的Hello World!
打开Visual Studio2005——〉文件|新建|项目——〉Visual C#控制台应用程序CsharpConsoleApplication1
以下自动生成的程序代码:
//Program.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpConsoleApplication1
{
class Program
{
static void
{
}
}
}
(1)using表示程序引用的库,以下的System,System.Collections.Generic和System.Text为控制台应用程序默引用的库,这几个库由.NET Framework 2.0中提供。
(2)程序将以新建项目时填入的项目名称自动创建一个命名空间,即namespace,命名空间可以控制类,变量等的作用域,以后将会讲到。类似于java中包的概念。
(3)class是类的意思,C#是一门面向对象的语言,所有的程序都由类构成。项目创建的时候,Visual Studio 2005将会自动创建这个Program类。关于面向对象的概念以后将会讲到。
(4)任何一个可执行的程序中都包含一个Main函数,Main函数是程序的入口。程序启动时,将执行Main函数中的代码。
我们在static void Main(string[] args)函数体中添加 Console.WriteLine("Hello World!");然后F7生成解决方案,再F5或Ctrl+F5执行,即可在控制台中输出Hello World!
5.命名空间namespace
命名空间就像在文件系统中一个文件夹容纳多个文件一样,可以看作某些类的一个容器。通过把类放入命名空间可以把相关的类组织起来,并且可以避免命名冲突。命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法)。
按数据的存储方式划分,有值类型和引用类型。
值类型
各种值类型总是含有相应该类型的一个值。 每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在相同的内存位置。C#的值类型可以归类如下:
简单类型(Simple types )
枚举类型(Enumeration types)
结构类型(struct types)
//简单类型
C# 类型 .NET Framework 类型
bool System.Boolean
1Byte 8bit布尔型变量 逻辑值为true或者false,默认值为false
byte System.Byte
1Byte 8bit无符号整数无符号的字节,数值范围是0~255,默认值为0
sbyte System.SByte
1Byte 8bit有符号整数带符号的字节,数值范围是-128~127,默认值为0
short System.Int16
2Byte 16bit有符号整数,数值范围是-32768~32767;默认值为0
ushort System.UInt16
2Byte 16bit无符号整数,数值范围是0~65535;默认值为0
int System.Int32
4Byte 32bit有符号整数,数值范围是-2147483648~2147483647;默认值为0
uint System.UInt32
4Byte 32bit无符号整数,数值范围是0~4294967295;默认值为0
long System.Int64
8Byte 64bit有符号整数,数值范围是-9223372036854775808~9223372036854775807;默认值为0
ulong System.UInt64
8Byte 64bit无符号整数,数值范围是0~18446744073709551615;默认值为0
float System.Single
4Byte 32bit单精度的浮点类型,数值范围是±1.5e-45~±3.4e38;默认值为
double System.Double
8Byte 64bit双精度的浮点类型,数值范围是±1.5e-324~±1.7e308;默认值为0.0d
decimal System.Decimal
16Byte 128bit十进制数不遵守四舍五入规则的十进制数,28个有效数字,
通常用于财务方面的计算,数值范围是±1.0e-28~±7.9×10e28;默认值为
char System.Char
2Byte 16bit 无符号Unicode字符,数值范围是所有UNICODE,默认值为’\
string System.String
指向字符串对象的引用,默认值为null
object System.Object
指向类实例的引用,默认值为null
注:C#中声明数据后一定要赋初值才能保证类型安全。
引用类型
和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的引用。在C#中引用类型主要包括object类型、类、接口、string类型、数组,以及委托。这里先介绍一下object,其他内容在后续的章节中介绍。
//引用类型
引用类型的变量又称为对象,可存储对实际数据的引用。本节介绍以下用于声明引用类型的关键字:
· class
与 C++ 不同,C# 中仅允许单个继承。也就是说,类只能从一个基类继承实现。但是,一个类可以实现一个以上的接口。
一个类可包含下列成员的声明:
构造函数 析构函数 常数 字段 方法 属性 索引器 运算符 事件 委托 类 接口 结构
只有嵌套类允许访问级别 protected 和 private。
接口只包含方法、委托或事件的签名,它是一个完全抽象的成员集合,它不是类,与基类有着本质的区别。方法的实现是在实现接口的类中完成的
接口可以是命名空间或类的成员,并且可以包含下列成员的签名: 方法 属性 索引器 事件
一个接口可从一个或多个基接口继承。
当基类型列表包含基类和接口时,基类必须是列表中的第一项。
实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问。
· delegate
委托类型声明的格式如下:
public delegate void TestDelegate(string message);
delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
委托是事件的基础。
通过将委托与命名方法或匿名方法关联,可以实例化委托。
以下为内置引用类型:
· object
object 类型在 .NET Framework 中是 Object 的别名。在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。可以将任何类型的值赋给 object 类型的变量。将值类型的变量转换为对象的过程称为“装箱”(Boxed)。将对象类型的变量转换为值类型的过程称为“取消装箱”。
· string
string 类型表示零或更多 Unicode 字符组成的序列。string 是 .NET Framework 中 String 的别名。
尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观。
装箱和拆箱
<1>装箱操作
给一个值装箱指隐式地把任何值类型转换成类型对象。当一个值类型被装箱时,一个对象实例就被分配,且值类型的值被复制给新的对象。
例如:int fun=2008;
Object ofun=fun;
第二行暗示一个装箱操作,fun整形变量的值被复制给ofun对象。现在整形变量和对象变量同事存在于栈中,但对象的值则保留在堆中。
<2>拆箱操作
和装箱相比,拆箱是显式操作—必须告诉编译器,你想从对象中抽取出哪一种值类型。当执行拆箱操作时,C#检测所请求的值类型实际上存储在对象实例中,经过成功的校验,该值被拆箱.
例如:int fun=2008;
Object ofun=fun;
int nfun=(int) ofun; //一个拆箱操作
ArrayList array = new ArrayList();
array.Add(1);//执行一次装箱
int i = (int)array[0];//执行一次拆箱
评论