類的繼承,大家試試看,想得是否和結果對得上。

virtual+override:

using System;
using System.Collections.Generic;
using System.Text;

namespace Leezile.LearningCS.Derived
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            Building bb 
= new Building();
            Building ba 
= new BuildingA();
            BuildingA aa 
= new BuildingA();
            bb.Calculate();
            ba.Calculate();
            aa.Calculate();
        }

    }

    
public class Building
    
{
        
public Building() //構造函數
        {
            Console.WriteLine(
"Create class Building");
        }

        
public virtual void Calculate() 
        
{
            Console.WriteLine(
"Building Calculate");
        }

    }

    
public class BuildingA:Building
    
{
        
public BuildingA() //構造函數
        {
            Console.WriteLine(
"Create class BuildingA");
        }

        
public override void Calculate()
        
{
            Console.WriteLine(
"BuildingA Calculate");
        }

    }

}

 結果: 

Create class Building
Create class Building
Create class BuildingA
Create class Building
Create class BuildingA
Building Calculate
BuildingA Calculate
BuildingA Calculate

 

abstract+override:

using System;
using System.Collections.Generic;
using System.Text;

namespace Leezile.LearningCS.Derived
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
//Building bb = new Building(); //抽象函數不能實例化
            Building ba = new BuildingA();
            BuildingA aa 
= new BuildingA();
            
//bb.Calculate();
            ba.Calculate();
            aa.Calculate();
        }

    }

    
public abstract class Building
    
{
        
public Building() //構造函數
        {
            Console.WriteLine(
"Create class Building");
        }

        
public abstract void Calculate();
    }

    
public class BuildingA : Building
    
{
        
public BuildingA() //構造函數
        {
            Console.WriteLine(
"Create class BuildingA");
        }

        
public override void Calculate()
        
{
            Console.WriteLine(
"BuildingA Calculate");
        }

    }

}

 

結果:

Create class Building
Create class BuildingA
Create class Building
Create class BuildingA
BuildingA Calculate
BuildingA Calculate

 

_+new:

using System;
using System.Collections.Generic;
using System.Text;

namespace Leezile.LearningCS.Derived
...
{
    
class Program
    ...
{
        
static void Main(string[] args)
        ...
{
            Building bb 
= new Building();
            Building ba 
= new BuildingA();
            BuildingA aa 
= new BuildingA();
            bb.Calculate();
            ba.Calculate();
            aa.Calculate();
        }

    }

    
public class Building
    ...
{
        
public Building() //構造函數
        ...{
            Console.WriteLine(
"Create class Building");
        }

        
public void Calculate() 
        ...
{
            Console.WriteLine(
"Building Calculate");
        }

    }

    
public class BuildingA:Building
    ...
{
        
public BuildingA() //構造函數
        ...{
            Console.WriteLine(
"Create class BuildingA");
        }

        
public new void Calculate() //這裏用不用new也是一樣,只是隱藏了基類的方法,但沒有顯式聲明
        ...{
            Console.WriteLine(
"BuildingA Calculate");
        }

    }

}

結果:

Create class Building
Create class Building
Create class BuildingA
Create class Building
Create class BuildingA
Building Calculate
Building Calculate
BuildingA Calculate
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章