En qué escenarios serían uno utilizar los MyBase
y MyClass
palabras clave en VB.NET?"MyBase" y uso "MyClass" en VB.NET
Respuesta
MyBase
se usa cuando una función virtual necesita llamar a la versión principal. Por ejemplo, considere:
Class Button
Public Overridable Sub Paint()
' Paint button here. '
End Sub
End Class
Class ButtonWithFancyBanner
Inherits Button
Public Overrides Sub Paint()
' First, paint the button. '
MyBase.Paint()
' Now, paint the banner. … '
End Sub
End Class
(Esto es lo mismo que base
en C#.)
MyClass
se usa raramente en absoluto. Se llama al método de la clase propia, aunque por lo general se llama método virtual de la clase derivada . En otras palabras, disuelve el envío de métodos virtuales y en su lugar realiza una llamada estática.
Este es un ejemplo artificial. Estoy en apuros para encontrar un uso real ahora (aunque eso ciertamente existe):
Class Base
Public Overridable Sub PrintName()
Console.WriteLine("I’m Base")
End Sub
Public Sub ReallyPrintMyName()
MyClass.PrintName()
End Sub
End Class
Class Derived
Inherits Base
Public Overrides Sub PrintName()
Console.WriteLine("I’m Derived")
End Sub
End Class
' … Usage: '
Dim b As Base = New Derived()
b.PrintName() ' Prints "I’m Derived" '
b.ReallyPrintMyName() ' Prints "I’m Base" '
(Esto no existe en C# En IL, este emite un call
en lugar del habitual callvirt
código de operación. .)
Ambos se utilizan cuando es necesario llamar a un método virtual y es necesario especificar cuál. MyBase
llamará al método en la clase base, MyClass
llamará al método en la clase actual.
No creo que haya usado MyClass
más de una o dos veces, pero MyBase
He usado bastante cuando invalido un método pero también quiero que se ejecute el código en el método reemplazado.
MyBase
:
http://msdn.microsoft.com/en-us/library/dzfhkk01%28VS.71%29.aspx
MyClass
:
http://msdn.microsoft.com/en-us/library/b3b35kyk%28VS.71%29.aspx
mybase
se refiere a la clase base inmediata de la instancia actual.
myclass
se refiere a la instancia actual, pero ignora cualquier implementación reemplazado de las propiedades/métodos de la clase.
En pocas palabras, el uso total de ambos es para Polymorphism. Aquí hay un buen article que explica las palabras clave un poco más.
Estas palabras clave se utilizan en casos relacionados con sucesiones. MyBase, MyClass a menudo se usan para referirse a alguna funcionalidad o propiedad en la clase principal. Si tiene una clase que se deriva de otra, esas palabras clave se utilizan para hacer referencia al código en el contexto de la clase principal.
En cuanto al uso de MyClass, hay una mejora de velocidad muy pequeña si usa MyClass
dentro de una clase hoja (clase NotInheritable).Específicamente, si hay algún método que existe en una clase padre y no se reemplaza O existe como una anulación en la clase hoja, entonces usando MyClass
en lugar de Me
se usa un código de operación call
en lugar de callvirt
.
MyBase
, que también emite el código de operación call
, no es aplicable en este caso donde desea que se invoque el método, independientemente de si está implementado/anulado en la hoja o solo existente en el elemento primario. Es decir, mantiene una forma de consistencia de estilo entre una gran cantidad de objetos similares.
Y cuando digo "mejora de velocidad", estoy hablando de unos mínimos de 5ms de 100.000 ejecuciones en un servidor de desarrollo de gama baja que se ejecuta en modo de 32 bits, en una función de análisis de cadenas. O para decirlo de otra manera, cuanto más rápida sea la máquina, más pequeña será esta diferencia. Pero, quería ponerlo allí.
- 1. MyClass en VB.Net
- 2. & new MyClass() vs new MyClass() en PHP
- 3. equivalente de MyClass en C#
- 4. Uso de C# y VB.NET en una solución
- 5. Uso de la fuerza del atributo personalizado
- 6. Errores de enlace de clase dlg MFC para MyClass :: GetMessageMap() y MyClass :: GetRuntimeClass (MSVC 2008)
- 7. visual basic y vb.net
- 8. Sobrecargas y anulaciones en VB.net
- 9. estático/Compartido en VB.NET y C# visibility
- 10. Constante no inicializada MyClass (NameError) en Ruby
- 11. Ámbito de aplicación y cómo reducir usando VB.Net
- 12. VB.NET y NUnit - TDD
- 13. Ejemplos de uso de genéricos en .Net (C#/VB.NET)
- 14. ¿Cómo uso la expresión LINQ "Into" en VB.NET?
- 15. En vb.net, si uso AddHandler, ¿Tengo que usar RemoveHandler?
- 16. uso del tipo de letra claro en C#/VB.NET
- 17. ¿Cuál es el uso de una variable compartida en VB.NET?
- 18. C++ sencilla: ¿Cómo sobrecargar el operador de multiplicación, de modo que flotan * * myClass y myClass flotador funciona
- 19. Genéricos: T extiende MyClass vs. T extiende MyClass <T>
- 20. Diferencia entre DirectCast() y CType() en VB.NET
- 21. Application.Exit() y evento FormClosing en Vb.net
- 22. Proyectos VB.Net y C# en 1 Solución
- 23. Cifrado PHP y descifrado VB.net
- 24. micrófono virtual, redes y vb.net
- 25. Celular usando vb.net y EPPlus
- 26. RemoveHandler y métodos anónimos de VB.NET
- 27. C# performance question: typeof (MyClass) vs. this.GetType()
- 28. MyClass se burla entre dos pruebas
- 29. C# y VB.Net parámetros de salida
- 30. VB.NET: ¿Cómo hacer referencia al módulo VB.NET?