c#简单教程1

来源:互联网 发布:人体工学椅有用吗 知乎 编辑:程序博客网 时间:2024/06/11 12:22

在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C# 与 .Net 框架之间的关系。

.Net 框架(.Net Framework)

.Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序:

  • Windows 应用程序
  • Web 应用程序
  • Web 服务

.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。

.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件:

  • 公共语言运行库(Common Language Runtime - CLR)
  • .Net 框架类库(.Net Framework Class Library)
  • 公共语言规范(Common Language Specification)
  • 通用类型系统(Common Type System)
  • 元数据(Metadata)和组件(Assemblies)
  • Windows 窗体(Windows Forms)
  • ASP.Net 和 ASP.Net AJAX
  • ADO.Net
  • Windows 工作流基础(Windows Workflow Foundation - WF)
  • Windows 显示基础(Windows Presentation Foundation)
  • Windows 通信基础(Windows Communication Foundation - WCF)
  • LINQ

如需了解每个组件的详细信息,请参阅微软(Microsoft)的文档。

C# 的集成开发环境(Integrated Development Environment - IDE)

微软(Microsoft)提供了下列用于 C# 编程的开发工具:

  • Visual Studio 2010 (VS)
  • Visual C# 2010 Express (VCE)
  • Visual Web Developer

后面两个是免费使用的,可从微软官方网址下载。使用这些工具,您可以编写各种 C# 程序,从简单的命令行应用程序到更复杂的应用程序。您也可以使用基本的文本编辑器(比如 Notepad)编写 C# 源代码文件,并使用命令行编译器(.NET 框架的一部分)编译代码为组件。

Visual C# Express 和 Visual Web Developer Express 版本是 Visual Studio 的定制版本,且具有相同的外观和感观。它们保留 Visual Studio 的大部分功能。在本教程中,我们使用的是 Visual C# 2010 Express。

您可以从 Microsoft Visual Studio 上进行下载。它会自动安装在您的机器上。请注意,您需要一个可用的网络连接来完成速成版的安装。

在 Linux 或 Mac OS 上编写 C# 程序

虽然 .NET 框架是运行在 Windows 操作系统上,但是也有一些运行于其它操作系统上的版本可供选择。Mono 是 .NET 框架的一个开源版本,它包含了一个 C# 编译器,且可运行于多种操作系统上,比如各种版本的 Linux 和 Mac OS。如需了解更多详情,请访问 Go Mono。

Mono 的目的不仅仅是跨平台地运行微软 .NET 应用程序,而且也为 Linux 开发者提供了更好的开发工具。Mono 可运行在多种操作系统上,包括 Android、BSD、iOS、Linux、OS X、Windows、Solaris 和 UNIX。


C# 基本语法

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。

例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。

让我们来看看一个 Rectangle(矩形)类的实现,并借此讨论 C# 的基本语法:

using System;namespace RectangleApplication{    class Rectangle    {        // 成员变量        double length;        double width;        public void Acceptdetails()        {            length = 4.5;                width = 3.5;        }        public double GetArea()        {            return length * width;        }        public void Display()        {            Console.WriteLine("Length: {0}", length);            Console.WriteLine("Width: {0}", width);            Console.WriteLine("Area: {0}", GetArea());        }    }        class ExecuteRectangle    {        static void Main(string[] args)        {            Rectangle r = new Rectangle();            r.Acceptdetails();            r.Display();            Console.ReadLine();        }    }}

C# 数据类型

在 C# 中,变量分为以下几种类型:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

值类型(Value types)

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。

值类型直接包含数据。比如 int、char、float,它们分别存储数字、字母、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

下表列出了 C# 2010 中可用的值类型:

类型描述范围默认值bool布尔值True 或 FalseFalsebyte8 位无符号整数0 到 2550char16 位 Unicode 字符U +0000 到 U +ffff'\0'decimal128 位精确的十进制值,28-29 有效位数(-7.9 x 1028 到 7.9 x 1028) / 100 到 280.0Mdouble64 位双精度浮点型(+/-)5.0 x 10-324 到 (+/-)1.7 x 103080.0Dfloat32 位单精度浮点型-3.4 x 1038 到 + 3.4 x 10380.0Fint32 位有符号整数类型-2,147,483,648 到 2,147,483,6470long64 位有符号整数类型-923,372,036,854,775,808 到 9,223,372,036,854,775,8070Lsbyte8 位有符号整数类型-128 到 1270short16 位有符号整数类型-32,768 到 32,7670uint32 位无符号整数类型0 到 4,294,967,2950ulong64 位无符号整数类型0 到 18,446,744,073,709,551,6150ushort16 位无符号整数类型0 到 65,5350

如需得到一个类型或一个变量在特定平台上的准确尺寸,可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。下面举例获取任何机器上 int 类型的存储尺寸:

namespace DataTypeApplication{   class Program   {      static void Main(string[] args)      {         Console.WriteLine("Size of int: {0}", sizeof(int));         Console.ReadLine();      }   }}

当上面的代码被编译和执行时,它会产生下列结果:

Size of int: 4

引用类型(Reference types)

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:objectdynamic 和 string

对象(Object)类型

对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱

object obj;obj = 100; // 这是装箱

动态(Dynamic)类型

您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。

声明动态类型的语法:

dynamic <variable_name> = value;

例如:

dynamic d = 20;

动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

字符串(String)类型

字符串(String)类型 允许您给变量分配任何字符串值。字符串(String)类型是 System.String 类的别名。它是从对象(Object)类型派生的。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。

例如:

String str = "runoob.com";

一个 @引号字符串:

@"runoob.com";

C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:

string str = @"C:\Windows";

等价于:

string str = "C:\\Windows";

@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。

string str = @"<script type=""text/javascript"">    <!--    --></script>";

用户自定义引用类型有:class、interface 或 delegate。我们将在以后的章节中讨论这些类型。

指针类型(Pointer types)

指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。

声明指针类型的语法:

type* identifier;

例如:

char* cptr;int* iptr;

关于装箱和拆箱

装箱:值类型转换为对象类型, 实例:

int val = 8;object obj = val;//整型数据转换为了对象类型(装箱)

拆箱:之前由值类型转换而来的对象类型再转回值类型, 实例:

int val = 8;object obj = val;//先装箱int nval = intobj;//再拆箱

只有装过箱的数据才能拆箱

C# 类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:

  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

下面的实例显示了一个显式的类型转换:

namespace TypeConversionApplication{    class ExplicitConversion    {        static void Main(string[] args)        {            double d = 5673.74;            int i;            // 强制转换 double 为 int            i = (int)d;            Console.WriteLine(i);            Console.ReadKey();                    }    }}

当上面的代码被编译和执行时,它会产生下列结果:

5673

C# 类型转换方法

C# 提供了下列内置的类型转换方法:

序号方法 & 描述1ToBoolean
如果可能的话,把类型转换为布尔型。2ToByte
把类型转换为字节类型。3ToChar
如果可能的话,把类型转换为单个 Unicode 字符类型。4ToDateTime
把类型(整数或字符串类型)转换为 日期-时间 结构。5ToDecimal
把浮点型或整数类型转换为十进制类型。6ToDouble
把类型转换为双精度浮点型。7ToInt16
把类型转换为 16 位整数类型。8ToInt32
把类型转换为 32 位整数类型。9ToInt64
把类型转换为 64 位整数类型。10ToSbyte
把类型转换为有符号字节类型。11ToSingle
把类型转换为小浮点数类型。12ToString
把类型转换为字符串类型。13ToType
把类型转换为指定类型。14ToUInt16
把类型转换为 16 位无符号整数类型。15ToUInt32
把类型转换为 32 位无符号整数类型。16ToUInt64
把类型转换为 64 位无符号整数类型。

下面的实例把不同值的类型转换为字符串类型:

namespace TypeConversionApplication{    class StringConversion    {        static void Main(string[] args)        {            int i = 75;            float f = 53.005f;            double d = 2345.7652;            bool b = true;            Console.WriteLine(i.ToString());            Console.WriteLine(f.ToString());            Console.WriteLine(d.ToString());            Console.WriteLine(b.ToString());            Console.ReadKey();                    }    }}

当上面的代码被编译和执行时,它会产生下列结果:

7553.0052345.7652True