C# 笔记2:面向对象

22,一个疑问:

函数和方法的区别是什么,联系是什么?
 
答:c语言等语言里叫函数,面向对象编程,函数写到类里边就叫做方法,函数可以直接调用,对象中的方法一般都有指针this指向它,但是有时一些方法实在不需要写到类里边,所以面向对象的语言有了静态方法。
(一般说是基本上没什么区别,是一样的东西)
 
23,面向对象的概述:
在面向对象过程中,算法与数据结构被看作是一个整体,称作对象。
对象=算法+数据结构,程序=对象+对象+……
 
面向对象的编程方式具有的特点:
①:封装;类是属性和方法的集合。
②:继承;
③:多态性;不同的类进行同一操作可以有不同的行为。
 
24,关于类声明时常见的几个修饰符:
new:仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。
public:不限制对类的访问;
protected:只能从其所在类和所在类的子类(派生类)进行访问;
internal:只有其所在类才能访问;
private:只有NET中的应用程序或库才能访问;
abstract:抽象类,不允许建立类的实例;
sealed:密封类,不允许被继承。
 
25,构造函数和析构函数:
①对象 的生命周期从构造函数开始,以析构函数结束。如果一个类含有构造函数,在实例化该类的对象时就会调用,如果含有析构函数,则会在销毁对象时调用。构造函数的名字和类名相同,析构函数和构造函数的名字相同。但析构函数要在名字前加一个波浪号~。当退出含有该对象的成员时,析构函数将自动释放这个对象所占用的内存空间。
②一个类中只能有一个析构函数,并且无法调用析构函数,它是被自动调用的。
 
26,类和对象的关系:
类是一种抽象的数据类型,具相同,相似结构,操作和约束规则的对象组成的集合。
对象是类的实例。
 
27, 类的继承
protected,只有子类(派生类)才能访问protected成员,基类和外部代码都不能访问protected成员。
基类还可以定义为抽象类。抽象类不能直接实例化,要使用抽象类就必须继承这个类,然后再实例化。
 
28,类的多态
①多态使得子类的实例可以直接赋予基类的变量(这里不需要进行强制类型转换),然后直接就可以通过这个变量调用子类的方法。
②C#中,类的多态性是通过在子类中重载基类的虚方法或函数成员来实现的。
③还可以使用新的派生成员替换基类的成员,这时需要使用new关键字。如果基类定义了一个新方法,字段或属性,则new关键字用于在子类中创建该方法,字段或属性的新定义。new关键字放置在要替换的类成员的返回类型之前。
 
29,对于多态要注意的:
①virtual修饰符不能与private,static,abstract或者override修饰符同时使用;
②override修饰符不能与new static或者virtual修饰符同时使用,并且重写方法只能用于重写基类中 的虚方法。
③C#中,继承,虚方法和重写方法组合在一起才能实现多态性。
 
30,有关接口
①类和结构可以像类继承基类或结构一样从接口继承,但是可以继承多个接口。
②当类和结构继承接口时,它继承成员定义但不继承实现。若要实现接口成员,类中的对应成员必须是公共的,非静态的,并且与接口成员具有相同的名称和签名。
 
31,抽象类与抽象方法
如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。
 
32,抽象类
抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别如下:
□抽象类不能直接实例化;
□抽象类中可以包含抽象成员,但非抽象类中不可以。
□抽象类不能被密封。
□抽象方法必须在抽象类中。
 
33,抽象类和接口的区别:
①它们的派生类只能继承一个基类,即只能直接继承一个抽象类,但可以继承任意多个接口。
②抽象类中可以定义成员的实现,但接口中不可以;
③抽象类中可以包含字段、构造函数、析构函数、静态成员或者变量等,接口中不可以。
④抽象类中的成员可以是私有的、受保护的、内部的或者受保护的内部成员,但接口中的成员必须是公共的。
□抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类。
 
34,
在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能从派生类中重写。
由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用。
原文地址:https://www.cnblogs.com/yanhan/p/2730441.html