您好,欢迎访问三七文档
面向对象程序设计–C#第九章定义类面向对象程序设计(C#)主要内容类定义相关语法类的定义构造函数与析构函数其它相关主题面向对象程序设计(C#)类的定义使用class关键字来定义类:class类名{//类的成员}面向对象程序设计(C#)类的成员(Member)的定义成员的访问限定符数据成员(字段)的定义函数成员(方法)的定义构造函数与析构函数的定义属性(方法)的定义面向对象程序设计(C#)类定义中可以使用的访问修饰符修饰符含义无或internal类只能在当前项目中访问public类可以在任何地方访问abstract或internalabstract类只能在当前项目访问,不能实例化,只能继承publicabstract类可以在任何地方访问,不能实例化,只能继承sealed或internalsealed类只能在当前项目中访问,不能派生,只能实例化publicsealed类可以在任何地方访问,不能派生,只能实例化面向对象程序设计(C#)成员访问(Accessibility)限定符public:Memberisaccessiblefromanycode;private:Memberisaccessibleonlyfromcodethatispartoftheclass(thedefaultifnokeywordisused);internal:Memberisaccessibleonlyfromcodewithintheproject(assembly)whereitisdefined;protected:Memberaccessibleonlyfromcodethatispartofeithertheclassoraderivedclass;Protectedinternal面向对象程序设计(C#)数据成员(Field)的定义class类名{访问限定符类型成员名;}其他修饰符:static、readonly、const、volatile面向对象程序设计(C#)Modifierstatic:表示类的静态字段,可通过定义它们的类来访问,不能用对象实例访问。readOnly:表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值。面向对象程序设计(C#)ModifierConst:指定字段或局部变量的值是常数,不能被修改Volatile:类型修饰符(typespecifier),被设计用来修饰被不同线程访问和修改的变量;面向对象程序设计(C#)数据成员(Field)的初始化在数据成员的定义语句中进行初始化;运行时初始化(类的新对象被创建时);可用于静态数据成员的初始化方法;在实例构造函数(Constructors)中初始化;(推荐)面向对象程序设计(C#)函数成员(Method)的定义class类名{访问限定符成员函数原型声明{函数体}}其他修饰符Static:只能通过类访问,无法通过对象实例访问;Virtual:方法可以重写Abstract:方法必须在非抽象的派生类中重写(只用于抽象类)override(sealed):方法重写了一个基类方法(如果方法被重写,就必须使用该关键字)Extern:方法定义放在其他地方面向对象程序设计(C#)构造函数与析构函数(ConstructorsandDestructors)构造函数与析构函数是类的两种特殊的函数成员,分别用于对象的初始化和清理。构造函数要求与所在的类同名,无返回值,如:面向对象程序设计(C#)构造函数与析构函数(ConstructorsandDestructors)构造函数允许重载,如果在代码中没有提供,编译器会自动添加一个默认的构造函数。而析构函数使用带有~前缀的类名来声明,无参无返回值。如:析构函数不允许重载。面向对象程序设计(C#)静态构造函数静态构造函数在以下情形下被自动调用:对应类的第一个实例被创建时;对应类的任何一个静态成员第一次被引用时。静态构造函数用于初始化类的静态成员。面向对象程序设计(C#)类的属性(Property)的定义class类名{访问限定符类型属性名{get{读取属性值部分函数体}set{设置属性值部分函数体}}属性实际上实现了OOP的封装性面向对象程序设计(C#)类的属性(Property)的定义只读/只写属性自动完成属性(C#3.0)面向对象程序设计(C#)类的属性(Property)的定义面向对象程序设计(C#)类的属性(Property)的定义面向对象程序设计(C#)比较OOP与非OOP面向对象程序设计(C#)比较OOP与非OOP面向对象程序设计(C#)类定义中的访问修饰符面向对象程序设计(C#)内部类与公共类在默认情况下,不加修饰符或显式使用internal关键字来定义内部类。内部类只允许被同一个项目中的代码访问。要让其他项目中的代码来访问,必须使用关键字public,即定义为公共类。面向对象程序设计(C#)类的继承-派生类的定义定义派生类的语法结构如下:class派生类名:基类名{//派生类特有的成员}C#不支持多重继承,即:在C#中,一个类至多只能有一个基类。面向对象程序设计(C#)基类成员在派生类中的可访问性在基类中的可访问性在派生类中的可访问性private(inaccessible)publicpublicprotectedprotected面向对象程序设计(C#)protected关键字protected关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。注意,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的。面向对象程序设计(C#)面向对象程序设计(C#)派生类对象的实例化为了实例化派生类,必须首先实例化它的基类部分。以此递推,最先被实例化的应该是System.Object类。从本质上看,要创建派生类的对象,首先应通过调用基类的构造函数完成对由基类继承而来的数据成员的初始化,然后再执行自身的构造函数完成本类扩展成员的初始化。面向对象程序设计(C#)面向对象程序设计(C#)派生类对象的实例化默认情形下,会依次调用以下构造函数1、System.Object.Object()2、MyBaseClass.MyBaseClass()3、MyDerivedClass的构造函数具体调用的重载版本取决于以何种方式来实例化MyDerivedClass(new语句)面向对象程序设计(C#)派生类对象的实例化如果希望被调用的不是基类的默认构造函数(即无参版本),则可以使用构造函数初始化器,它会先于所在的构造函数被执行,格式如下:publicDerivedClass(paramlist1):base(paramlist2){…}其中,base关键字用于指代当前实例对应的基类对象,从而调用基类的对应构造函数。面向对象程序设计(C#)派生类对象的实例化构造函数初始化器还可以使用this关键字,实现在调用指定的构造函数前,先调用其他非默认的构造函数。实际上默认的派生类构造函数等价于:publicMyDerivedClass():base(){}面向对象程序设计(C#)派生类对象的析构考虑一个当一个派生类对象将要被销毁时,其析构函数的调用顺序?面向对象程序设计(C#)VS2008中的OOP工具类视图类视图中的图标对象浏览器面向对象程序设计(C#)类视图(ClassView)查看应用程序中的类层次结构查看项目引用的程序集查找代码中的类型和成员重命名代码中的项面向对象程序设计(C#)类视图中的图标面向对象程序设计(C#)对象浏览器(ObjectBrowser)面向对象程序设计(C#)类图(ClassDiagrams)往项目中添加新类创建类图面向对象程序设计(C#)结构类型类与结构非常相似,但结构是值类型,类是引用类型。结构成员无法受保护,因为无法继承结构。
本文标题:精讲C#中的要点
链接地址:https://www.777doc.com/doc-4694423 .html