第五章 类

来源:互联网 发布:中国经济史图书知乎 编辑:程序博客网 时间:2024/05/21 15:02

1、面向对象

面向对象主要有三个主要特征:封装、继承和多态。

1.1 封装

封装的目的是隐藏细节,使数据不会因为不慎被修改,易于代码理解和维护。

1.2 继承

继承的目的是代码重用,派生类继承基类的成员,可以修改继承的成员,也可以创建新的成员。

1.3 多态

多态的目的是接口重用,共享同一个接口,却能得到不同的实现。

 

2、静态成员

2.1 静态构造器

静态构造器不能被“显式”的调用,而是在“运行时”在首次访问类时自动调用静态构造器。“首次访问”包括调用普通构造器、调用静态方法或字段。由于不能显式的调用,所以不支持任何参数。

class Employee

{

    static Employee()

    {

        ... ...

    }

}

2.2 静态类

静态类使用static关键字修饰,静态类不能实例化,既然不能实例化,实例字段和方法也就没有意思,所以静态类中不能包含任何实例字段和方法。静态类的另一个特点是不可扩展,即不能从静态类派生其他类

class static SimpleMath

{

    static int Max(int x)

    {

        ... ...

    }

}

 

3、扩展方法

扩展方法的作用是在不改变类型结构为类型添加实例方法。创建扩展类和扩展方法,并将扩展类和扩展方法声明为static,扩展类的第一个参数为要扩展的类型,并在类型名前附加this关键字。

public static class DirectoryInfoExtension

{

    public static void CopyTo(this DirectoryInfo sourceDriectory, string target)

    {

        ... ...

    }

}

在使用扩展方法的代码中使用using指令导入扩展类型的命名空间。如果扩展方法与实例方法同名,则实例方法优先级更高。

 

4、封装数据

4.1 const

const字段在初始化后,其值不可以再修改,const字段自动称为静态字段,所有的实例共享同一个const字段。但是,不能将const字段显式的声明为static。

class ConveUnits

{

    public const float Value Max = 200;

    ... ...

}

4.2 readonly

readonly只能用于字段,被声明readonly的字段只能在构造器中修改更改,或者在声明时初始化。readonly可以是实例字段,也可以是静态字段。

class Employee

{

    public readonly int Id;

    ... ...

}

 

5、分部类
分部类的作用是将类或结构、接口或方法拆分到若干源文件中,每个源文件包含类或方法的一部分,再编译时将他们组合成一个完整的类。

5.1 定义分部类

声明分部类要使用partial关键字,并且每个类的访问性必须一致,即一个类为public其他类必须为public。

// File:Program1.cs

partial class Program

{

}

// File:Program2.cs

partial class Program

{

}

5.2 定义分部方法

分部类或结构可以包含分部方法。 类的一个部分包含方法的签名。 可以在同一部分或另一个部分中定义可选实现。 如果未提供该实现,则会在编译时删除方法以及对方法的所有调用。

// Definition in file1.cs   partial void onNameChanged();    // Implementation in file2.cs   partial void onNameChanged()   {     // method body   }  
  • 分部方法声明必须以上下文关键字 partial 开头,并且方法必须返回 void。

  • 分部方法可以有 ref 参数,但不能有 out 参数。

  • 分部方法为隐式 private 方法,因此不能为 virtual 方法。

  • 分部方法不能为 extern 方法,因为主体的存在确定了方法是在定义还是在实现。

  • 分部方法可以有 static 和 unsafe 修饰符。

  • 分部方法可以是泛型的。 约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。 参数和类型参数名称在实现声明和定义声明中不必相同。

  • 你可以为已定义并实现的分部方法生成委托,但不能为已经定义但未实现的分部方法生成委托。

原创粉丝点击