Décrire la transformation de Liskov en mots humains

Conversion de Richter

1. Les sous-classes peuvent être attribuées aux classes parentes

  En d'autres termes, si un lieu a besoin d'une classe parente, nous pouvons lui donner une sous-classe à la place

  Ce que je veux, c'est une personne, je m'en fous si tu me donnes une soeur ou une loli (rires)

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

 La ligne 29.30 peut être abrégée comme suit :

1 personne pe = nouvel étudiant();

 

 

2. Si la classe parent contient un objet de sous-classe, alors la classe parent peut être convertie en un objet de sous-classe

  Cette personne est une loli, alors je peux la traiter comme une loli, mais je ne peux pas la traiter comme Yujie

dans le code précédent

1 Étudiant st2 = (Étudiant)pe ;

C'est ce que cela signifie, car bien que pe soit un type de personne, il contient étudiant

tel qu'exécuté

1 Enseignant st2 = (Enseignant)pe ;

lèvera une exception

C'est-à-dire que si cette personne est un étudiant, vous pouvez lui demander de faire le travail de l'étudiant, mais vous ne pouvez pas lui demander de faire le travail du professeur.

 

est Et comme

est, s'il peut être converti, renvoie vrai, sinon renvoie faux

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

Sortie du résultat : étudiant

 

as, s'il peut être converti, renvoie l'objet converti, sinon renvoie null

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  // Le résultat de sortie est : étudiant, null

 

Réimprimé à : https://www.cnblogs.com/Yukisora/p/7017509.html

Je suppose que tu aimes

Origine blog.csdn.net/a1808508751/article/details/101353083
conseillé
Classement