interface c # e resumo do aprendizado da classe abstrata

O exemplo a seguir define uma classe abstrata e uma interface.A classe abstrata define os atributos e métodos de um telefone celular, e a interface define um método para jogar.

Código da classe abstrata:

 //抽象类是一个父类+约束 父类是为了实现代码重用 约束是为了多态变化 单继承 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");
        }
    }

Código de interface:

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

 

Defina a classe do telefone móvel Xiaomi, herde a classe abstrata BasePhone e implemente a interface: 

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

Defina a classe do telefone celular da Apple, herde a classe abstrata BasePhone e implemente a interface: 

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

 

Instancie o objeto e chame o método:

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

Resultados de:

 

Os telefones celulares Apple e Xiaomi têm atributos e métodos comuns, como chamar (Chamar) e enviar mensagens de texto (SendMsg), mas seus sistemas operacionais são diferentes, portanto, o método do sistema operacional (Sistema) é definido como um método abstrato, na classe pai (BasePhone) não é implementado, a subclasse reescreve este método do sistema operacional.

Ao mesmo tempo, os telefones Apple e Xiaomi podem jogar jogos, portanto, o método de jogar (PlayGame) é definido na interface, e a classe que implementa a interface deve implementar cada método na interface. Dessa forma, os telefones celulares da Apple e da Xiaomi têm uma maneira de jogar.

A razão pela qual o método de jogo é definido na interface, não na classe abstrata. Esta é a consideração: além de telefones celulares que podem jogar, tablets e TVs também podem jogar, mas tablets e TVs não podem fazer chamadas ou enviar mensagens de texto.

 

Resumindo:

Uma classe abstrata pode ser entendida como uma classe pai + restrição.A classe pai é para reutilização de código, e a restrição é para mudanças polimórficas. As classes abstratas só podem ser herdadas individualmente. Para expressar o conceito de classe abstrata em inglês, ele pode ser expresso como 'é um', que significa o que é. Por exemplo, BasePhone no exemplo acima significa um telefone móvel.

As interfaces são puras restrições, dizendo aos outros quais funções estão disponíveis. Em inglês, o conceito de interface pode ser expresso como 'pode fazer', que significa o que pode ser feito.

No desenvolvimento real, primeiro considere o uso de interfaces e, se houver código que precise ser reutilizado, considere o uso de classes abstratas.

Acho que você gosta

Origin blog.csdn.net/liangmengbk/article/details/112735451
Recomendado
Clasificación