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");
        }
    }
}

results matching ""

    No results matching ""