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