Interfaz c # y resumen de aprendizaje de la clase abstracta

El siguiente ejemplo define una clase abstracta y una interfaz La clase abstracta define los atributos y métodos de un teléfono móvil y la interfaz define un método para jugar.

Código de clase abstracta:

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

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

 

Defina la clase de teléfono móvil Xiaomi, herede la clase abstracta BasePhone e implemente la interfaz: 

  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 la clase de teléfono móvil de Apple, herede la clase abstracta BasePhone e implemente la interfaz: 

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

 

Cree una instancia del objeto y llame al 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 del:

 

Tanto los teléfonos móviles Apple como los teléfonos móviles Xiaomi tienen atributos y métodos comunes, como llamar (Llamar) y enviar mensajes de texto (SendMsg), pero sus sistemas operativos son diferentes, por lo que el método del sistema operativo (Sistema) se define como un método abstracto. en la clase padre (BasePhone) no está implementado, la subclase reescribe este método del sistema operativo.

Al mismo tiempo, tanto los teléfonos Apple como los teléfonos Xiaomi pueden jugar juegos, por lo que el método de juego (PlayGame) se define en la interfaz, y la clase que implementa la interfaz debe implementar cada método en la interfaz. De esta manera, tanto los teléfonos móviles de Apple como los teléfonos móviles de Xiaomi tienen una forma de jugar.

La razón por la que el método de juego se define en la interfaz, no en la clase abstracta. Esta es la consideración: además de los teléfonos móviles que pueden jugar, las tabletas y los televisores también pueden jugar, pero las tabletas y los televisores no pueden hacer llamadas ni enviar mensajes de texto.

 

para resumir:

Una clase abstracta puede entenderse como una clase principal + restricción. La clase principal es para la reutilización de código y la restricción es para cambios polimórficos. Las clases abstractas solo pueden heredarse individualmente. Para expresar el concepto de clase abstracta en inglés, se puede expresar como "es a", que significa lo que es. Por ejemplo, BasePhone en el ejemplo anterior significa un teléfono móvil.

Las interfaces son restricciones puras, que les dicen a los demás qué funciones están disponibles. En inglés, el concepto de interfaz se puede expresar como "can do", que significa lo que se puede hacer.

En el desarrollo real, primero considere el uso de interfaces, y si hay código que necesita ser reutilizado, considere usar clases abstractas.

Supongo que te gusta

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