1. 程式人生 > >抽象類、介面、委託

抽象類、介面、委託

抽象類:提供了部分功能的實現,不能被例項化的類,

              除了不能被例項化和含有抽象方法,其餘使用和正常類使用一樣。 特點:不能被例項化              抽象類裡面可以包含抽象方法,這個方法子類必須實現,而且本類不能使用              子類要實現抽象方法必須使用關鍵字override。
//抽象類 不能被例項化
    public abstract class NPC
    {
        //抽象類裡面可以包含抽象方法:子類必須實現的方法,但是本類不能使用
        public abstract void Say();
    }
    public class Yihao : NPC
    {
        //要實現抽象方法必須要使用重寫的override
        public override void Say()
        {
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            NPC npc = new Yihao();

            Console.ReadKey();
        }
    }


介面:同樣不能被例項化,包含的方法必須在繼承該介面的類上實現,一個類可以繼承多個介面,           C#通過介面實現多繼承的問題。 特點:不能被例項化            介面的方法必須實現             介面中不能寫public,因為介面中的方法預設都是public             介面可以被繼承             介面中也可以實現多型
 //抽象類 不能被例項化
    public abstract class NPC
    {
        //抽象類裡面可以包含抽象方法:子類必須實現的方法,但是本類不能使用
        public abstract void Say();
    }

    //介面 接口裡面不能寫變數,只能寫方法,接口裡面的方法必須實現
    public interface Enemy
    {
        //不能加public,因為介面中所有的方法都是public
        void GetHit();
    }
    //介面是可以繼承的
    public interface Boss : Enemy
    {
        void Skill();
    }

    public class Yihao : NPC,Enemy,Boss
    {
        //要實現抽象方法必須要使用重寫的override
        public override void Say()
        {
        }
        //實現介面
        public void GetHit()
        {
        }

        public void Skill()
        {
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Yihao yh = new Yihao();
            NPC npc = yh;
            //介面也可以實現多型
            Boss boss = yh;
            boss.GetHit();
            boss.Skill();


            Console.ReadKey();
        }
    }

委託:int是儲存整數的變數型別,float是儲存浮點數的變數型別           委託是儲存方法的變數型別 特點: public delegate void Func(int a); 引數型別和數量要一致         委託裡面可以儲存多個方法,當我們儲存多個方法的時候,會一次呼叫所有方法
public class Person
    {
        //建立一個委託型別 要求:返回值為void,有一個引數為int型別的方法
        //public delegate void(int a) Func;
        //注意:這裡的a是隨意取的名稱,重要的引數的型別和數量int a
        //()裡面是寫的是儲存的方法名
        public delegate void Func(int a);
        //通過剛才建立的委託型別,宣告一個委託
        public Func func;

        public Person()
        {
            //Say(2);

            //讓func儲存Say方法
            //第一種
            //func = new Func(Say);
            //我們以後可以直接用委託呼叫方法
            //第二種 func儲存了一個Say方法
            func += Say;
            func += Eat;
            func(2);
            //委託裡面可以儲存多個方法,當我們儲存多個方法的時候,會一次呼叫所有方法
            //func -=Eat;
            //委託解決的是回掉問題
        }
        public void Say(int a)
        {
            Console.WriteLine("11111111111111");
        }
        public void Eat(int b)
        {
            Console.WriteLine("22222222222222");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();

            Console.ReadKey();
        }
    }