C# 集合(Collection)
集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。
各种集合类和它们的用法下面是各种常用的 System.Collection 命名空间的类。点击下面的链接查看细节。
类描述和用法动态数组(ArrayList)它代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。哈希表(Hashtable)它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。排序列表(S ...
C# 运算符重载
您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。例如,请看下面的函数:
public static Box operator+ (Box b, Box c){ Box box = new Box(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; return box;}
上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象。
运算符重载的实现下面的程序演示了完整的实现:
实例
using System;
namespace OperatorOvlApplication{ class Box { ...
C# 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:
算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符
本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。
算术运算符下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符描述实例+把两个操作数相加 A + B 将得到 30-从第一个操作数中减去第二个操作数 A - B 将得到 -10*把两个操作数相乘 A * B 将得到 200/分子除以分母 B / A 将得到 2%取模运算符,整除后的余数 B % A 将得到 0++自增运算符,整数值增加 1 A++ 将得到 11–自减运算符,整数值减少 1 A– 将得到 9
实例请看下面的实例,了解 C# 中所有可用的算术运算符:
实例
using System;
namespace OperatorsAppl{ class Program { static void Main(string[] args) ...
C# 继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
基类和派生类一个类可以继承自另一个类,被称为基类(父类)和派生类(子类)。C# 不支持类的多重继承,但支持接口的多重继承,一个类可以实现多个接口。概括来说:一个类可以继承多个接口,但只能继承自一个类。C# 中创建派生类的语法如下:
<访问修饰符> class <基类>{ …}class <派生类> : <基类>{ …}
派生类会继承基类的成员(字段、方法、属性等),除非它们被明确地标记为私有(private)。派生类可以通过关键字base来调用基类的构造函数和方法。实例cl ...
C# 结构体(Struct)
在 C# 中,结构体(struct)是一种值类型(value type),用于组织和存储相关数据。在 C# 中,结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。结构体是用来代表一个记录,假设您想跟踪图书馆中书的动态,您可能想跟踪每本书的以下属性:
TitleAuthorSubjectBook ID
定义结构体为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式声明 Book 结构:
struct Books{ public string title; public string author; public string subject; public int book_id;};
下面的程序演示了结构的用法:
实例
using System;using System.Text; struct Books{ public string title; public stri ...
C# 索引器(Indexer)索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符 [ ] 来访问该类的的成员。语法一维索引器的语法如下:
element-type this[int index]{ // get 访问器 get { // 返回 index 指定的值 }
// set 访问器 set { // 设置 index 指定的值 }}
索引器(Indexer)的用途索引器的行为的声明在某种程度上类似于属性(property)。就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。定义一个属性(property)包括提供属性名称。索引 ...
C# 类(Class)
当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。
类的定义类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式:
class class_name{ // member variables variable1; variable2; … variableN; // member methods method1(parameter_list) { // method body } method2(parameter_list) { // method body } … methodN(parameter_list) { ...
C# 类型转换在 C# 中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。C# 中的类型转换可以分为两种:隐式类型转换和显式类型转换(也称为强制类型转换)。隐式类型转换隐式转换是不需要编写代码来指定的转换,编译器会自动进行。隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从 int 到 long,从 float 到 double 等。从小的整数类型转换为大的整数类型,从派生类转换为基类。将一个 byte 类型的变量赋值给 int 类型的变量,编译器会自动将 byte 类型转换为 int 类型,不需要显示转换。实例byte b = 10;int i = b; // 隐式转换,不需要显式转换
将一个整数赋值给一个长整数,或者将一个浮点数赋值给一个双精度浮点数,这种转换不会导致数据丢失:实例int intValue = 42;long longValue = intValue; // 隐式转 ...
C# 程序结构在我们学习 C# 编程语言的基础构件块之前,让我们先看一下 C# 的最小的程序结构,以便作为接下来章节的参考。C# Hello World 实例一个 C# 程序主要包括以下部分:
命名空间声明(Namespace declaration)一个 classClass 方法Class 属性一个 Main 方法语句(Statements)& 表达式(Expressions)注释
C# 文件的后缀为 .cs。以下创建一个 test.cs 文件,文件包含了可以打印出 “Hello World” 的简单代码:test.cs 文件代码:using System;namespace HelloWorldApplication{ class HelloWorld { static void Main(string[] args) { /* 我的第一个 C# 程序*/ Console.WriteLine(“Hello World”); Console.ReadKey(); } ...
C# 环境在这一章中,我们将讨论创建 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)元数据(M ...