随笔分类 -  C#编程指南

23.C#编程指南-嵌套类型
摘要:在类或结构内部定义的类型称为嵌套类型。 例如:class Container{ class Nested { Nested() { } }}不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。 在上面的示例中,Nested 对外部类型是不可访问的,但可以设置为 public,如下所示:class Container{ public class Nested { Nested() { } }}嵌套类型... 阅读全文

posted @ 2012-05-20 11:18 YeChun 阅读(305) 评论(0) 推荐(0)

22.C#编程指南-对象和集合初始值设定项
摘要:使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。View Code private class Cat{ // Auto-implemented properties. public int Age { get; set; } public string Name { get; set; }}Cat cat = new Cat { Age = 10, Name = "Fluffy" };集合初始值设定项使用集合初始值设定项可以在初始化一个实现了 IEnumerable 的集合类时指定一个或多个元素初始值设定项。 元素初始值设 阅读全文

posted @ 2012-05-20 11:09 YeChun 阅读(424) 评论(0) 推荐(0)

21.C#编程指南-析构函数
摘要:析构函数用于析构类的实例。不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。例如,下面是类 Car 的析构函数的声明:View Code class Car{ ~Car() // destructor { // cleanup statements... }}该析构函数隐式地对对象的基类调用 Finalize。 这样,前面的析构函数代码被隐式地转换为以下代码:View Code protected override void Finalize... 阅读全文

posted @ 2012-05-20 09:55 YeChun 阅读(208) 评论(0) 推荐(0)

20.C#编程指南-构造函数
摘要:使用构造函数任何时候,只要创建类或结构,就会调用它的构造函数。如果您没有为对象提供构造函数,则默认情况下C#将创建一个构造函数,该构造函数实例化对象,并将成员变量设置为默认值表中列出的默认值。静态类和结构也可以有构造函数。如果您为对象提供了构造函数,C#将不会创建默认构造函数(不带参数的构造函数)。类和 structs 都可以定义具有参数的构造函数。 带参数的构造函数必须通过 new 语句或 base 语句来调用。 类和 structs 还可以定义多个构造函数,并且二者均不需要定义默认构造函数。 例如:View Code public class Employee{ public int... 阅读全文

posted @ 2012-05-19 23:20 YeChun 阅读(273) 评论(0) 推荐(0)

19.C#编程指南-方法
摘要:在示例中,数组 arr 为引用类型,在未使用 ref 参数的情况下传递给方法。 在此情况下,将向方法传递指向 arr 的引用的一个副本。 输出显示方法有可能更改数组元素的内容,在这种情况下,从 1 改为 888。 但是,在 Change 方法内使用 new 运算符来分配新的内存部分,将使变量 pArray 引用新的数组。 因此,这之后的任何更改都不会影响原始数组 arr(它是在 Main 内创建的)。 实际上,本示例中创建了两个数组,一个在 Main 内,一个在 Change 方法内。View Code class PassingRefByVal { static void Change... 阅读全文

posted @ 2012-05-19 21:36 YeChun 阅读(173) 评论(0) 推荐(0)

18.C#编程指南-字段
摘要:常量是在编译时已知并在程序的生存期内不发生更改的不可变值。常量使用const修饰符进行声明。只有C#内置类型(System.Object除外)可以声明为const。用户定义的类型(包括类、结构和数组)不能为const。请使用readonly修饰符创建在运行时初始化一次即不可再更改的类、结构或数组。C#不支持const方法、属性或事件。常量必须在声明时初始化。因为常量值对该类型的所有实例是相同的,所以常量被当作static字段一样访问。不使用static关键字声明常量。 阅读全文

posted @ 2012-05-19 17:57 YeChun 阅读(158) 评论(0) 推荐(0)

17.C#编程指南-访问修饰符
摘要:public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。private 只有同一类或结构中的代码可以访问该类型或成员。protected 只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员。internal 同一程序何中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。protected internal 受保护内部可访问性级别的意思是受保护“或”内部,而不是受保护“和”内部。 换句话说,可以从同一程序集内的任何类(包括派生类)中访问受保护的内部成员。 若要限制为只有同一程序集内的派生类可以访问,请将类本身... 阅读全文

posted @ 2012-05-19 17:29 YeChun 阅读(818) 评论(0) 推荐(0)

16.C#编程指南-静态类和静态类成员
摘要:静态类和非静态类基本相同,但存在一个区别:静态类不能实例化。静态类的主要特性:仅包含静态成员。无法实例化。是密封的。不能包含实例构造函数。非静态类可以包含静态的方法、字段、属性或事件。 即使没有创建类的实例,也可以调用该类中的静态成员。 始终通过类名而不是实例名称访问静态成员。 无论对一个类创建多少个实例,它的静态成员都只有一个副本。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。更常见的做法是声明具有一些静态成员的非静态类,而不是将整个类声明为静态类。 静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必须在所有 阅读全文

posted @ 2012-05-19 16:27 YeChun 阅读(224) 评论(0) 推荐(0)

15.C#编程指南-抽象类、密封类及类成员
摘要:使用abstract关键字可以创建必须在派生类中实现的不完整的类和类成员。使用sealed关键字可以防止继承以前标记为virtual的类或某些类成员。抽象类通过在类定义前面放置关键字 abstract,可以将类声明为抽象类。例如:public abstract class A{ // Class members here.}抽象类不能实例化。 抽象类的用途是提供多个派生类可共享的基类的公共定义。 例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。抽象类也可以定义抽象方法。 方法是将关键字 abstract 添加到方法的返回类型的前面... 阅读全文

posted @ 2012-05-19 16:08 YeChun 阅读(235) 评论(0) 推荐(0)

14.C#编程指南-多态性
摘要:View Code public class Shape{ // A few example members public int X { get; private set; } public int Y { get; private set; } public int Height { get; set; } public int Width { get; set; } // Virtual method public virtual void Draw() { Console.WriteLine("Performing base... 阅读全文

posted @ 2012-05-16 23:28 YeChun 阅读(284) 评论(0) 推荐(0)

13.C#编程指南-继承
摘要:继承(加上封装和多态性)是面向对象的编程的三个主要特性(也称为“支柱”)之一。继承用于创建可重用、扩展和修改在其他类中定义的行为的新类。其成员被继承的类称为“基类”,继承这些成员的类称为“派生类”。派生类只能有一个直接基类。但是,继承是可传递的。如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。定义一个类从其他类派生时,派生类隐式获得基类的除构造函数和析构函数以外的所有成员。因此,派生类可以重用基类中的代码而无需重定实现这些代码。可以在派生类中添加更多成员。派生类以这种方式扩展基类的功能。下图演 阅读全文

posted @ 2012-05-16 17:38 YeChun 阅读(226) 评论(0) 推荐(0)

12.C#编程指南-结构
摘要:结构是使用 struct 关键字定义的,例如:public struct PostalAddress{ // Fields, properties, methods and events go here...}结构与类共享大多数相同的语法,但结构比类受到的限制更多:在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。结构不能声明默认构造函数(没有参数的构造函数)或析构函数。结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。 在使用值类型的集合(如 Dictionary<string, myStruct 阅读全文

posted @ 2012-05-14 22:47 YeChun 阅读(178) 评论(0) 推荐(0)

11.C#编程指南-对象
摘要:类或结构定义的作用类似于蓝图,指定该类型可以进行哪些操作。从本质上说,对象是按照此蓝图分配和配置的内存块。程序可以创建同一个类的多个对象。对象也称为实例,可以存储在命名变量中,也可以存储在数组或集合中。使用这些变量来调用对象方法及访问对象公共属性的代码称为客户端代码。对象标识与值相等性在比较两个对象是否相等时,首先必须明确您是想知道两个变量是否表示内存中的同一对象,还是想知道这两个对象的一个或多个字段的值是否相等。如果您要对值进行比较,则必须考虑这两个对象是值类型(结构)的实例还是引用类型(类、委托、数组)的实例。若要确定两个类实例是否引用内存中的同一位置(意味着它们具有相同的标识),可使用静 阅读全文

posted @ 2012-05-14 18:34 YeChun 阅读(188) 评论(0) 推荐(0)

10.C#编程指定-类
摘要:“类”是一种构造,通过使用该构造,您可以将其他类型的变量、方法和事件组合在一起,从而创建自己的自定义类型。 类就像一个蓝图, 它定义类型的数据和行为。 如果类没有声明为静态类,客户端代码就可以创建赋给变量的“对象”或“实例”,从而使用该类。 在对变量的所有引用都超出范围之前,该变量始终保持在内存中。 所有引用都超出范围时,CLR 将标记该变量以供垃圾回收。 如果类声明为静态类,则内存中只存在一个副本,并且客户端代码只能通过该类自身而不是“实例变量”访问该类。创建对象Customer object1 = new Customer();创建类的实例后,将向程序员传递回对该对象的引用。在前面的示例中 阅读全文

posted @ 2012-05-14 17:38 YeChun 阅读(250) 评论(0) 推荐(0)

9.C#编程指南-类和结构
摘要:类和结构是.NET Framework中的常规类型系统的两种基本构造。两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等。类是一种“引用类型”。创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映到另一个变量中,因为两者引用同一数据。结构是一种“值类型”。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。因此,新变量和原始变量包含同一数据的两个不同的副本。对一个副本的更改不影响另一个副本。封装“封 阅读全文

posted @ 2012-05-14 11:09 YeChun 阅读(291) 评论(0) 推荐(0)

8.C#编程指南-索引器
摘要:索引器允许类或结构的实例像数组一样进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。View Code class SampleCollection<T>{ // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer, which will allow client code // to use [] notation on the class instance itself. // (See line 2 of ... 阅读全文

posted @ 2012-05-03 23:26 YeChun 阅读(1114) 评论(0) 推荐(0)

7.C#编程指南-枚举类型
摘要:枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。 例如,假设您必须定义一个变量,该变量的值表示一周中的一天。 该变量只能存储七个有意义的值。 若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的。enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 默认情况下,枚举中每个元素的基础 阅读全文

posted @ 2012-05-03 17:31 YeChun 阅读(220) 评论(0) 推荐(0)

6.C#编程指南-接口
摘要:接口描述的是可属于任何类或结构的一组相关功能。接口使用interface关键字进行定义,如下面的示例所示。interface IEquatable<T>{ bool Equals(T obj);}接口可由方法、属性、事件、索引器或这四类成员类型的任意组合构。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。它不能包含静态成员。接口成员是自动公开的,且不能包含任何访问修饰符。类或结构实现接口时,该类或结构将为该接口定义的所有成员提供实现。接口本身不提供类或结构能够以继承基类功能的方式继承的任何功能。但是,如果基类实现接口,派生类将继承该实现。派生的类被认为是隐式地实现接口 阅读全文

posted @ 2012-05-03 17:09 YeChun 阅读(214) 评论(0) 推荐(0)

5.C#编程指南-属性
摘要:属性是这样的成员:它提供灵活的机制来读取、编写或计算某个私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。在本示例中,TimePeriod类存储一个时间段。在内部,类以秒为单位存储时间,但客户端使用名为Hours的属性能够以小时为单位指定时间。Hours属性的访问器执行小时和秒之间的转换。View Code class TimePeriod{ private double seconds; public double Hours { get { return s... 阅读全文

posted @ 2012-04-15 22:32 YeChun 阅读(288) 评论(0) 推荐(0)

4.C#编程指南-匿名函数
摘要:匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。共有两种匿名函数:1.Lambda表达式2.匿名方法C#委托的发展View Code class Test{ delegate void TestDelegate(string s); static void M(string s) { Console.WriteLine(s); } static void Main(string[] args) { TestDelegate te... 阅读全文

posted @ 2012-04-15 18:19 YeChun 阅读(23042) 评论(0) 推荐(3)

导航