博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于C#中派生类调用基类构造函数的理解

Posted on 2010-10-30 09:48  明天陪你去看海  阅读(791)  评论(0)    收藏  举报

2、  当基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时,会寻找无参的构造函数,如果没有则报错,另外无论调用派生类中的哪个构造函数都是寻找无参的那个基类构造函数,而非参数匹配。

代码
namespace ConsoleApplication8
{
public class MyBaseClass
{
//public MyBaseClass()
//{
// Console.WriteLine("我是基类带不参数的构造函数");
//}
public MyBaseClass(int i)
{
Console.WriteLine(
"我是基类带一个参数的构造函数");
}
}
public class MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine(
"我是子类无参构造函数");
}
public MyDerivedClass(int i)
{
Console.WriteLine(
"我是子类带一个参数的构造函数");
}
public MyDerivedClass(int i, int j)
{
Console.WriteLine(
"我是子类带二个参数的构造函数");
}
static void Main(string[] args)
{
MyDerivedClass myderivedclass
= new MyDerivedClass();
Console.Read();
}
}
}

上面的代码编译报错:错误 1 “ConsoleApplication8.MyBaseClass”不包含采用“0”参数的构造函数 。

 

代码
namespace ConsoleApplication8
{
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine(
"我是基类带不参数的构造函数");
}
public MyBaseClass(int i)
{
Console.WriteLine(
"我是基类带一个参数的构造函数");
}
}
public class MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine(
"我是子类无参构造函数");
}
public MyDerivedClass(int i)
{
Console.WriteLine(
"我是子类带一个参数的构造函数");
}
public MyDerivedClass(int i, int j)
{
Console.WriteLine(
"我是子类带二个参数的构造函数");
}
static void Main(string[] args)
{
MyDerivedClass myderivedclass
= new MyDerivedClass();
Console.Read();
}
}
}

 

这段代码输出结果是:

我是基类不带参数的构造函数

我是子类无参数构造函数

 

代码
namespace ConsoleApplication8
{
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine(
"我是基类带不参数的构造函数");
}
public MyBaseClass(int i)
{
Console.WriteLine(
"我是基类带一个参数的构造函数");
}
}
public class MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine(
"我是子类无参构造函数");
}
public MyDerivedClass(int i)
{
Console.WriteLine(
"我是子类带一个参数的构造函数");
}
public MyDerivedClass(int i, int j)
{
Console.WriteLine(
"我是子类带二个参数的构造函数");
}
static void Main(string[] args)
{
MyDerivedClass myderivedclass
= new MyDerivedClass(1);
Console.Read();
}
}
}

 

上面的代码的输出结果是

我是基类不带参数的构造函数

我是子类带一个参数的构造函数

3、  基类中编写了构造函数,则派生类中可以指定调用基类的某个构造函数,使用base关键字。

 

代码
namespace ConsoleApplication8
{
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine(
"我是基类不带参数的构造函数");
}
public MyBaseClass(int i)
{
Console.WriteLine(
"我是基类带一个参数的构造函数");
}
}
public class MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine(
"我是子类无参构造函数");
}
public MyDerivedClass(int i):base(i)
{
Console.WriteLine(
"我是子类带一个参数的构造函数");
}
public MyDerivedClass(int i, int j)
{
Console.WriteLine(
"我是子类带二个参数的构造函数");
}
static void Main(string[] args)
{
MyDerivedClass myderivedclass
= new MyDerivedClass(1);
Console.Read();
}
}
}

 

上面的代码输出

我是基类带一个参数的构造函数

我是子类带一个参数的构造函数