C#インターフェースと抽象クラス学習の概要

次の例では、抽象クラスとインターフェイスを定義します。抽象クラスは携帯電話の属性とメソッドを定義し、インターフェイスはゲームをプレイするためのメソッドを定義します。

抽象クラスコード:

 //抽象类是一个父类+约束 父类是为了实现代码重用 约束是为了多态变化 单继承 is a 
    public abstract class BasePhone
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Branch { get; set; }

        public abstract void System();//约束下子类有这个方法 但又各不相同

        public void Call()
        {
            Console.WriteLine($"Use {this.GetType().Name} Call");
        }

        public void SendMsg()
        {
            Console.WriteLine($"Use {this.GetType().Name} SendMsg");
        }
    }

インターフェースコード:

  //接口就是一个约束 一个类可以实现多个接口 告诉别人一定有什么功能 can do
    public interface IExted
    {
        void PlayGame();
    }

 

Xiaomi携帯電話クラスを定義し、抽象クラスBasePhoneを継承し、インターフェイスを実装します。 

  public class Mi : BasePhone, IExted
    {
        public void PlayGame()
        {
            Console.WriteLine($"Use {this.GetType().Name} PlayGame");
        }

        public override void System()
        {
            Console.WriteLine($"{this.GetType().Name} System is Android ");
        }
    }

Apple携帯電話クラスを定義し、抽象クラスBasePhoneを継承して、インターフェイスを実装します。 

 public class iPhone : BasePhone, IExted
    {
        public void PlayGame()
        {
            Console.WriteLine($"Use {this.GetType().Name} PlayGame");
        }

        public override void System()
        {
            Console.WriteLine($"{this.GetType().Name} System is IOS ");
        }
    }

 

オブジェクトをインスタンス化し、メソッドを呼び出します。

  class Program
    {
        static void Main(string[] args)
        {
            iPhone iphone = new iPhone();
            iphone.System();
            iphone.Call();
            iphone.SendMsg();
            iphone.PlayGame();
            iphone.Id=1;

            Mi mi = new Mi();
            mi.System();
            mi.Call();

            Console.ReadLine();
        }
    }

結果:

 

Apple携帯電話とXiaomi携帯電話はどちらも、通話(Call)やテキストメッセージの送信(SendMsg)などの共通の属性とメソッドを持っていますが、オペレーティングシステムが異なるため、オペレーティングシステムメソッド(System)は抽象的なメソッドとして定義されています。親クラス(BasePhone)が実装されていない場合、サブクラスはオペレーティングシステムのこのメソッドを書き換えます。

同時に、Apple電話とXiaomi電話の両方がゲームをプレイできるため、ゲームをプレイするメソッド(PlayGame)はインターフェイスで定義され、インターフェイスを実装するクラスはインターフェイスで各メソッドを実装する必要があります。このように、Appleの携帯電話とXiaomiの携帯電話の両方にゲームをプレイする方法があります。

ゲームをプレイするメソッドが抽象クラスではなくインターフェースで定義されている理由。これが考慮事項です。ゲームをプレイできる携帯電話に加えて、タブレットやテレビもゲームをプレイできますが、タブレットやテレビは電話をかけたり、テキストメッセージを送信したりすることはできません。

 

総括する:

抽象クラスは、親クラス+制約として理解できます。親クラスはコードの再利用用であり、制約はポリモーフィックな変更用です。抽象クラスは単一の継承のみが可能です。抽象クラスの概念を英語で表現するために、それが何であるかを意味する「is a」として表現することができます。たとえば、上記の例のBasePhoneは携帯電話を意味します。

インターフェイスは純粋な制約であり、使用可能な機能を他の人に伝えます。英語では、インターフェースの概念は「できる」と表現できます。これは、何ができるかを意味します。

実際の開発では、最初にインターフェースの使用を検討し、再利用する必要のあるコードがある場合は、抽象クラスの使用を検討してください。

おすすめ

転載: blog.csdn.net/liangmengbk/article/details/112735451
おすすめ