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.