c#学习笔记二 构造函数
2008-03-26 08:03
337 查看
a. 如果一个类没有显式的提供构造函数,编译器会提供一个无参数的构造函数,格式是:
public <类名>:base(){}
我们把这个由编译器提供的构造函数,成为默认构造函数。
b. 如果提供了显式的构造函数,那么编译器就不会提供默认构造函数
c. 基类的构造函数必须且总是最先调用,如果子类定义了自己的构造函数而没有声明父类构造函数调用的方式,
编译器会调用无参数构造函数。
d.子类的构造函数访问修饰符可以与父类不同(而virtual函数在override时访问修饰符必须一致)。
根据以上三点可以推断:
(1) 构造函数是不会继承的。
假设:父类提供了有参数的构造函数,子类不提供构造函数。
根据 a 编译器提供默认的构造函数,并且调用父类的无参数构造函数。
根据 b 父类没有无参数构造函数
编译不能通过。
解决:方法一 子类提供构造函数,并且首先调用父类的有参数构造函数。
方法二 父类提供无参数构造函数
(2) 如果一个类提供的所有构造函数(无论有无参数)完全是private的,那么这个类是不能继承的。
因为private限定的函数除在类内部可以使用外,在别的任何地方是不能使用的。根据 c 不难知道编译是不能通过的。
(3) 只要满足c 同一个类自己的构造函数之间可以互相调用。
public <类名>:base(){}
我们把这个由编译器提供的构造函数,成为默认构造函数。
b. 如果提供了显式的构造函数,那么编译器就不会提供默认构造函数
c. 基类的构造函数必须且总是最先调用,如果子类定义了自己的构造函数而没有声明父类构造函数调用的方式,
编译器会调用无参数构造函数。
d.子类的构造函数访问修饰符可以与父类不同(而virtual函数在override时访问修饰符必须一致)。
根据以上三点可以推断:
(1) 构造函数是不会继承的。
假设:父类提供了有参数的构造函数,子类不提供构造函数。
根据 a 编译器提供默认的构造函数,并且调用父类的无参数构造函数。
根据 b 父类没有无参数构造函数
编译不能通过。
解决:方法一 子类提供构造函数,并且首先调用父类的有参数构造函数。
方法二 父类提供无参数构造函数
(2) 如果一个类提供的所有构造函数(无论有无参数)完全是private的,那么这个类是不能继承的。
因为private限定的函数除在类内部可以使用外,在别的任何地方是不能使用的。根据 c 不难知道编译是不能通过的。
(3) 只要满足c 同一个类自己的构造函数之间可以互相调用。
相关文章推荐
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- 【C#学习笔记】类构造函数使用
- c# 学习笔记 静态构造函数
- (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数
- C#学习笔记005-构造函数
- 【C#学习笔记】构造函数重载,构造函数相互调用,静态构造函数
- CLR Via C# 学习笔记(4) 方法 构造函数
- C#2005 .NET3.0高级编程学习笔记————类的函数成员(构造函数,只读字段)
- CLR Via C# 学习笔记(4) 方法 构造函数
- 黑马程序员之C#学习笔记:关于C#构造函数
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- C#学习笔记整理_深入剖析构造函数、析构函数
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- c#学习笔记二:构造函数执行顺序
- c#学习笔记-构造函数和析构函数
- CLR Via C# 学习笔记(4) 方法 构造函数
- (原创)c#学习笔记09--定义类03--构造函数和析构函数
- 【C#学习笔记】类构造函数使用
- 2013/08/15 C# WPF 学习笔记
- C# OpenCV学习笔记五之图像轮廓