天天看點

模闆式程式設計和鈎子式程式設計

建立一個基類,裡面有些常用的方法,特别的是需要重載的方法讓外面其它繼承者重新定義方法,一個基類,用virtual 關鍵字定義一些需要重新定義的方法,外面的子類繼承基類,然後用override關鍵字重載需要的基類中的方法。

鈎子就是在基類中定義了一個virtual 函數,在外面沒有調用的時候,它不影響基類的行為,當建立子類對象的時候,通過這個函數會反作用影響基類的行為。

//Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Test_1

{

    class Program

    {

        static void Main(string[] args)

        {

            TestBase tb=new TestBase();

            tb.showInfo();

            TestBoy tboy = new TestBoy();

            tboy.showInfo();

            TestGirl tgirl = new TestGirl();

            tgirl.showInfo();

            Console.ReadKey();

        }

    }

}

// TestBase.cs

namespace Test_1

{

    public class TestBase

    {

        public void showInfo()

        {

            if (IsBoy())

            {

                Console.WriteLine(string.Format("I am a {0}", "man"));

            }

            else

            {

                Console.WriteLine(string.Format("I am a {0}", " girl"));

            }

        }

        public virtual bool IsBoy()

        {

            return true;

        }

    }

}

//TestGirl.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Test_1

{

    class TestGirl:TestBase

    {

        public override bool IsBoy()

        {

            return false;

        }

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Test_1

{

    class TestBoy:TestBase

    {

    }

}

c#