|
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
|
Traducción
Original
|
Métodos de extensión (Visual Basic)
Descripción
Imports System.Runtime.CompilerServices Module StringExtensions <Extension()> Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub End Module
Module Class1 Sub Main() Dim example As String = "Hello" ' Call to extension method Print. example.Print() ' Call to instance method ToUpper. example.ToUpper() example.ToUpper.Print() End Sub End Module
<Extension()> Public Sub PrintAndPunctuate(ByVal aString As String, ByVal punc As String) Console.WriteLine(aString & punc) End Sub
Código
Imports System.Runtime.CompilerServices Module StringExtensions <Extension()> Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub <Extension()> Public Sub PrintAndPunctuate(ByVal aString As String, ByVal punc As String) Console.WriteLine(aString & punc) End Sub End Module
Imports ConsoleApplication2.StringExtensions Module Module1 Sub Main() Dim example As String = "Example string" example.Print() example = "Hello" example.PrintAndPunctuate(".") example.PrintAndPunctuate("!!!!") End Sub End Module
Comentarios
-
Clases (tipos de referencia) -
Estructuras (tipos de valor) -
Interfaces -
Delegados -
Argumentos ByRef y ByVal -
Parámetros de método genérico -
Matrices
Option Strict Off Imports System.Runtime.CompilerServices Module Module4 Sub Main() Dim aString As String = "Initial value for aString" aString.PrintMe() Dim anObject As Object = "Initial value for anObject" ' The following statement causes a run-time error when Option ' Strict is off, and a compiler error when Option Strict is on. 'anObject.PrintMe() End Sub <Extension()> Public Sub PrintMe(ByVal str As String) Console.WriteLine(str) End Sub <Extension()> Public Sub PrintMe(ByVal obj As Object) Console.WriteLine(obj) End Sub End Module
-
Si existe cualquier miembro de instancia accesible con una firma compatible con los argumentos en la instrucción de llamada, sin requerir conversiones de restricción del argumento al parámetro, el método de instancia se usará antes que cualquier método de extensión. Por consiguiente, si se agrega un método de instancia adecuado a una clase en un momento dado, puede que un miembro de extensión existente en el que confía se vuelva inaccesible. -
El autor de un método de extensión no puede evitar que otros programadores escriban métodos de extensión conflictivos que pueden tener prioridad sobre la extensión original. -
Puede mejorar la solidez colocando los métodos de extensión en su propio espacio de nombres. Entonces, los usuarios de su biblioteca pueden incluir un espacio de nombres o excluirlo, o bien seleccionar entre los espacios de nombres, por separado en el resto de la biblioteca. -
Puede ser más seguro extender interfaces que extender clases, sobre todo si no posee la interfaz o la clase. Un cambio en una interfaz afecta a cada clase que la implementa. Por consiguiente, es menos probable que el autor pueda agregar o cambiar métodos en una interfaz. Sin embargo, si una clase implementa dos interfaces que tienen métodos de extensión con la misma firma, ninguno de los métodos de extensión está visible. -
Extienda el tipo más específico que pueda. En una jerarquía de tipos, si selecciona un tipo del que se derivan muchos otros tipos, hay niveles de posibilidades para la inclusión de métodos de instancia u otros métodos de extensión que podrían interferir con el suyo.
Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod(ByVal m As Integer) Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal n As Long) Console.WriteLine("Extension method") End Sub
Sub Main() Dim example As New ExampleClass Dim arg1 As Long = 10 Dim arg2 As Integer = 5 ' The following statement calls the extension method. example.exampleMethod(arg1) ' The following statement calls the instance method. example.exampleMethod(arg2) End Sub
Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod(ByVal m As Long) Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal n As Integer) Console.WriteLine("Extension method") End Sub
Sub Main() Dim example As New ExampleClass Dim arg1 As Long = 10 Dim arg2 As Integer = 5 ' The following statement calls the instance method. example.ExampleMethod(arg1) ' The following statement calls the instance method. example.ExampleMethod(arg2) End Sub
Imports System.Runtime.CompilerServices Module Module3 Sub Main() Dim ex As New ExampleClass ' The following statement calls the extension method. ex.ExampleMethod("Extension method") ' The following statement calls the instance method. ex.ExampleMethod() End Sub Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod() Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal stringParameter As String) Console.WriteLine(stringParameter) End Sub End Module
Extension method
Instance method
-
Métodos de extensión definidos dentro del módulo actual. -
Métodos de extensión definidos dentro de los tipos de datos en el espacio de nombres actual o cualquiera de sus elementos primarios. Los espacios de nombres secundarios tienen mayor prioridad que los espacios de nombres primarios. -
Métodos de extensión definidos dentro de cualquier tipo de importaciones en el archivo actual. -
Métodos de extensión definidos dentro de cualquier importación de espacio de nombres en el archivo actual. -
Métodos de extensión definidos dentro de cualquier tipo de importaciones de nivel de proyecto. -
Métodos de extensión definidos dentro de cualquier importación de espacio de nombres de nivel de proyecto.