virtual+override:
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 BuildingA
Create class Building
Create class BuildingA
Building Calculate
BuildingA Calculate
BuildingA Calculate
abstract+override:
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 BuildingA
Create class Building
Create class BuildingA
BuildingA Calculate
BuildingA Calculate
_+new:
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 BuildingA
Create class Building
Create class BuildingA
Building Calculate
Building Calculate
BuildingA Calculate