龙空技术网

C#语法要点之类

甜橙很酸 227

前言:

此时咱们对“虚方法必须在派生类中重写抽象方法不需要重写”大概比较注意,你们都想要知道一些“虚方法必须在派生类中重写抽象方法不需要重写”的相关文章。那么小编同时在网上汇集了一些对于“虚方法必须在派生类中重写抽象方法不需要重写””的相关文章,希望咱们能喜欢,看官们快快来了解一下吧!

要精通.NET编程,首先要学好C#语言。学好一门编程语言的有效方法之一是深入理解语言的要点。

配置文件中使用静态字段或静态属性

静态变量是在静态变量所属类初次使用时被初始化的,当静态字段被初始化后,之后每次调用获得的值都是初始化时赋给静态字段的值,除非在这个过程中显示地给静态字段赋值。而静态属性的某些行为类似于静态方法。

例:

运行上述代码,输出结果如下:

由输出结果可以得出:上面的用法中,静态字段每次调用获得的值都是同一个,即初始化时所赋的值;而调用静态属性每次获得的值都是不同的,每次调用都执行一次get方法。

虚方法中不要含有业务逻辑

使用virtual修饰符修饰类的方法,那么这个方法就可以在派生类中重写,如果原来的方法包含业务逻辑,派生类重写这个方法后,由于派生类将父类中的虚方法完全覆盖,导致虚方法中的业务逻辑永远不会被执行。

指定构造器

为了避免因缺少可供访问的默认构造器而造成错误,要在派生类构造器的头部显示指定要运行哪一个基类构造器。

对比virtual与abstract

为支持重写,基类中必须为要在子类中重写的成员之前添加virtual修饰符,子类成员要标记为override。

使用abstract定义抽象方法。抽象方法没有具体实现,必须在子类方法中实现抽象方法。

虚方法是可以有具体实现的,不过具体实现会在子类的重载中被覆盖。

默认初始值

字段或属性默认初始值随类型的不同而不同。

bool默认初始值为false,对象类型默认初始值为null,int类型为0,float和double为0.0,char为\0。

readonly

readonly只能用于字段,它指明被其修饰的字段只能在构造函数中修改,或在声明时指定。但对于数组来说情况稍有不同,使用此修饰符修饰数组,那么不允许使用new运算符创建同一个数组的新实例,但可以修改数组中的元素,即使这样的操作不是在构造函数中进行的。

构造函数的调用问题

如果实例化一个子类,那么子类的构造函数及其父类的构造函数的调用过程是怎么样的呢?调用具有怎样的层次关系?如果父类有几个重载的构造函数而子类未指定构造函数,那么将调用父类的哪一个构造函数呢?

对于继承中涉及到的构造函数的调用问题是比较复杂的。

首先,父类的构造函数先于子类的构造函数被调用。

其次,如果父类和子类都没有自定义构造函数,那么调用的都是默认的构造函数。

例:

//实例化

Child c = new Child();

输出:

若在Child 中指定调用父类的构造函数:

输出:

结论:从中可看出父类构造函数先于子类构造函数被调用,若子类构造函数不指定调用哪一个,一般会根据参数自动匹配。

静态类和静态成员

1)静态类是密封的,因此不可被继承。

2)静态类不能包含实例构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

3)静态方法和属性只能访问静态字段和静态事件。

4)静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。

5)静态构造函数有以下特点:

静态构造函数既没有访问修饰符,也没有参数。

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。

无法直接调用静态构造函数。

在程序中,用户无法控制何时执行静态构造函数。

静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。

可访问性

非嵌套类型:不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。 这些类型的默认可访问性是 internal。

嵌套类型:嵌套类型的可访问性取决于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。 但是,嵌套类型的可访问域不能超出包含类型的可访问域。

可访问性列表

注:

1)访问修饰符internal:只有在同一程序集的文件中,内部类型或成员才是可访问的。

2)访问修饰符protected internal:访问仅限于从包含类派生的当前程序集或类型。

尽量使用属性而不是字段

可以对属性进行更灵活的控制,所以应尽量使用属性,例如下面的代码:

接口中的属性

在接口中定义属性,若只包含Get块,那么接口的实现类中也只能包含Get块。

例如:

以上列举了一些笔者认为比较重要的语法,希望对大家的学习有帮助

标签: #虚方法必须在派生类中重写抽象方法不需要重写