ABSTRACT CLASS與CLASS與INTERFACE的應用實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
ClassC obj1 = new ClassC();
obj1.fnTEST();//在 ClassC 中實作 Interface_1 的 Function
obj1.Print1();//在 ClassB 中實作 ClassB 的 abstract Function
obj1.OnlyInClassB();//在 ClassC 中實作 OnlyInClassB() 的 Function
/*
因為 ClassB 是抽象類別,所以不能 new 成員物件
*/
//ClassB obj2 = new ClassB();
ClassB obj2 = new ClassC();
((ClassC)obj2).OnlyInClassC();//在 ClassC 中實作 OnlyInClassC() 的 Function
Console.Read();
}
}
public interface Interface_1
{
void Print1();
}
public abstract class ClassB : Interface_1
{
/// <summary>
/// 抽象方法僅需宣告,不可以實作
/// 且 存取修飾詞只能設為 public
/// </summary>
public abstract void fnTEST();
/// <summary>
/// 因為 Implement Interface_1,故需實作 Interface_1 的 Function
/// </summary>
public void Print1()
{
Console.WriteLine("在 ClassB 中實作 Interface_1 的 Function");
}
public virtual void OnlyInClassB()
{
Console.WriteLine("在 ClassB 中實作 OnlyInClassB() 的 Function");
}
}
public class ClassC : ClassB
{
/// <summary>
/// 因為 ClassC 繼承抽象地 ClassB,故 ClassB 裡面有任何 abstract Function 都需要實作
/// </summary>
public override void fnTEST()
{
Console.WriteLine("在 ClassC 中實作 ClassB 的 abstract Function");
}
public override void OnlyInClassB()
{
Console.WriteLine("在 ClassC 中實作 OnlyInClassB() 的 Function");
}
}
}