C#类的继承,构造函数实现及其调用顺序

类层层派生,在实例化的时候构造函数的调用顺序是怎样的? --从顶层基类开始向子类方向顺序调用无参构造.
默认构造(无参构造)和带参构造什么时候调用?--默认将从顶层父类的默认构造一直调用到当前类的默认构造.
下面是示例:
/*--===------------------------------------------===---
作者:许明会
日期:类的派生和构造函数间的关系,调用层次及实现
日期:2008年1月18日 17:30:43
若希望类能够有派生类,必须为其实现默认构造函数.
若类没有实现带参构造,编译器将自动创建默认构造函数.
若类实现了带参构造,则编译器不会自动生成默认构造.
--===------------------------------------------===---
*/

using System;

namespace xumh
{
    
public class MyClass
    
{
        
public MyClass()
        
{            
            Console.WriteLine(
"MyClass:默认构造函数");
        }

        
public MyClass(int a, int b)
        
{
            Console.WriteLine(
"MyClass带参构造:a={0}, b={1}.", a, b);
        }

    }

    
    
public class MyClass2 : MyClass
    
{
        
public MyClass2()
        
{
            Console.WriteLine(
"MyClass2:默认构造函数");
        }

        
public MyClass2(int a, int b)
        
{
            Console.WriteLine(
"MyClass2带参构造:a={0}, b={1}.", a, b);
        }

    }


    
public class MyClass3 : MyClass2
    
{

        
public MyClass3()
        
{
            Console.WriteLine(
"MyClass3:默认构造函数");
        }

        
public MyClass3(int a, int b)
        
{
            Console.WriteLine(
"MyClass3带参构造:a={0}, b={1}.", a, b);
        }

    }


    
public class runMyApp
    
{
        
static void Main()
        
{
            MyClass3 my 
= new MyClass3(3,4);
        }

    }

}

/*--===------------------------------------------===---
输出如下:
MyClass:默认构造函数
MyClass2:默认构造函数
MyClass3带参构造:a=3, b=4.
--===------------------------------------------===---
*/

 

 

 

7.写出程序的输出结果

public abstract class A
{
 
public A()
 {
 Console.WriteLine(
'A');
 }
 
public virtual void Fun()
 {
 Console.WriteLine(
"A.Fun()");
 }
}

public class B: A
{
 
public B()
 {
 Console.WriteLine(
'B');
 }

 
public new void Fun()
 {
 Console.WriteLine(
"B.Fun()");
 }

 
public static void Main()
 {
 A a =
new B(); //这里输出 A B
 a.Fun();
 }
}

A
 B
A.Fun()

 

 

posted @ 2010-03-07 12:14  KiNg.JiOnG  阅读(684)  评论(0编辑  收藏  举报
查看博客访问人数(点击):