Hoy deambulaba por el foro CSDN y encontré una publicación así "Acabo de ver algunas líneas de código exquisito de un maestro de artes marciales, y no pude resolverlo, espero que puedas darme algunos consejos". Actitud de aprender de todos los maestros de artes marciales, veo que después de terminar toda la publicación, descubrí que el contenido es muy clásico.
tipo
TStringGridEx = class (tStringGrid);
Procedimiento tForm1.Button1Click (remitente: tobject);
Comenzar
Si tStringGridex (StringGrid1) .RowCount> 5 Entonces
TStringGridex (StringGrid1) .Deleterow (5);
fin;
-------------------------------------------------- --------
Este es el código para eliminar una línea de código en StringGrid. Trabajé en este problema durante 2 horas, pero no pude resolverlo. Pero, ¿por qué tStringGridEx = class (tStringGrid); Obviamente, también es un TStringGrid heredado, ¿que es lo mismo que TStringGrid? ¡Mi cabeza es demasiado grande! ¡Espero que me dé un consejo!
Lo anterior es el contenido de la pregunta del póster. Delphi.
1. Se puede acceder a los miembros protegidos de TStringgridex en TForm porque se definen en la misma unidad.
2. No se puede acceder a los miembros protegidos de TStringGrid en TForm porque no se definen en la misma unidad.
3. Dado que tStringGridEx = class (tStringGrid), acceder al miembro protegido de TStringGridex aquí es equivalente a acceder al miembro protegido de TStringGrid
4. TStringGridex es solo un intermediario, y su función no se extiende, pero introduce el alcance de TStringGrid en esta unidad, por lo que TForm puede acceder a los miembros protegidos de TStringGrid.
La opinión de Zhangmenyi es que los miembros protegidos y privados de Delphi son visibles para diversas clases y objetos en la misma unidad, y los miembros protegidos pueden ser visibles en la unidad de la subclase miembro, por lo que tstringgridex solo herede tstringgrid y no lo hace. . ser abierto. También podemos echar un vistazo a las características orientadas a objetos de Delphi a partir de esto.
Aunque es conveniente para el desarrollo, puede confundir a los principiantes
Ni siquiera lo suficientemente riguroso
Pero de todos modos, Delphi ya no está en la gloria, usémoslo
Comentario de Zhang Men San: ¡No hay cosa perfecta! ¡Solo hay cosas que son adecuadas!
Comentario de Zhangmen 4: El método protegido generalmente está oculto, por lo que es imposible generar directamente una instancia de la clase, pero en Delphi, la clase ubicada en la misma unidad se considera automáticamente como una clase de amigo, y puede acceder a su método protegido , por lo que puede ver el método protegido escribiendo una implementación de subclase en la unidad correspondiente.