天天看点

模板式编程和钩子式编程

创建一个基类,里面有些常用的方法,特别的是需要重载的方法让外面其它继承者重新定义方法,一个基类,用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#