Descreva a transformação de Liskov em palavras humanas

Conversão Richter

1. Subclasses podem ser atribuídas a classes pai

  Em outras palavras, se um local precisa de uma classe pai, podemos fornecer uma subclasse.

  O que eu quero é uma pessoa, não me importa se você me der uma irmã ou uma loli (risos)

1      class Pessoa
 2      {
 3          public  void SayHellow()
 4          {
 5              Console.WriteLine( " Pessoa " );
6          }
 7      }
 8      class Aluno : Pessoa
 9      {
 10          public  void SayHellow()
 11          {
 12              Console.WriteLine( " Aluno " );
13          }
 14      }
 15      aulasProfessor:Pessoa
 16      {
 17          public  void SayHellow()
 18          {
 19              Console.WriteLine( " Professor " );
20          }
 21      }
 22      
23  
24      class Program
 25      {
 26          
27          static  void Main( string [] args)
 28          {
 29              Aluno st = new Aluno();
30              Pessoa pe = st;
 31             Console.WriteLine(pe.GetType().ToString());
32              pe.SayHellow();
33              Aluno st2 = (Aluno)pe;
34              st2.SayHellow();
35  
36              Console.ReadKey();
37          }
 38      }
 39      /*输出为:
 40  ConsoleApplication2.Student
 41  Person
 42  Student
 43      */

 A linha 29.30 pode ser abreviada como:

1 Pessoa pe = new Aluno();

 

 

2. Se a classe pai contiver um objeto de subclasse, a classe pai poderá ser convertida em um objeto de subclasse

  Essa pessoa é uma loli, então posso tratá-la como uma loli, mas não posso tratá-la como Yujie

no código anterior

1 Aluno st2 = (Aluno)pe;

Isso é o que significa, porque embora pe seja um tipo de pessoa, ele contém estudante

como executado

1 Professor st2 = (Professor)pe;

lançará uma exceção

Ou seja, se essa pessoa for um aluno, você pode pedir a ele que faça o trabalho do aluno, mas não pode pedir que ele faça o trabalho do professor.

 

é e como

é, se puder ser convertido, retorna verdadeiro, caso contrário, retorna falso

1      if (pe is Teacher)
 2      {
 3           Console.WriteLine( " Teacher " );
 4      } else  if (pe is Student)
 5      {
 6           Console.WriteLine( " Student " );
 7      }

Saída do resultado: aluno

 

pois, se puder ser convertido, retorna o objeto convertido, caso contrário, retorna nulo

1      Student st2 = pe as Student;
 2      st2.SayHellow();
 3      Teacher te = pe as Teacher;
 4      if (te== null )
 5      {
 6          Console.WriteLine( " null " );
 7      }
 8  // O resultado da saída é: student, null

 

Reimpresso em: https://www.cnblogs.com/Yukisora/p/7017509.html

おすすめ

転載: blog.csdn.net/a1808508751/article/details/101353083