Compartir vía


MethodInfo.IsGenericMethodDefinition Propiedad

Definición

Obtiene un valor que indica si el MethodInfo actual representa la definición de un método genérico.

public:
 virtual property bool IsGenericMethodDefinition { bool get(); };
public override bool IsGenericMethodDefinition { get; }
member this.IsGenericMethodDefinition : bool
Public Overrides ReadOnly Property IsGenericMethodDefinition As Boolean

Valor de propiedad

true si el objeto MethodInfo representa la definición de un método genérico; en caso contrario, false.

Ejemplos

En el ejemplo de código siguiente se usa la IsGenericMethodDefinition propiedad para mostrar un mensaje que indica si MethodInfo un objeto representa una definición de método genérico.

Este ejemplo forma parte de un ejemplo más grande proporcionado para el MakeGenericMethod método .

Console.WriteLine(vbTab _
    & "Is this a generic method definition? {0}", _
    mi.IsGenericMethodDefinition)
Console.WriteLine("\tIs this a generic method definition? {0}",
    mi.IsGenericMethodDefinition);
Console::WriteLine("\tIs this a generic method definition? {0}",
    mi->IsGenericMethodDefinition);

Comentarios

Si el objeto actual MethodInfo representa una definición de método genérico, haga lo siguiente:

Utilice la IsGenericMethodDefinition propiedad para determinar si se han asignado argumentos de tipo a los parámetros de tipo de un método genérico. Si se han asignado argumentos de tipo, la IsGenericMethodDefinition propiedad devuelve false incluso si algunos de los argumentos de tipo son Type objetos que representan parámetros de tipo de tipos envolventes. Por ejemplo, considere el siguiente código de C#, Visual Basic y C++:

```cs
class C
{
    T N<T,U>(T t, U u) {...}
    public V M<V>(V v)
    {
        return N<V,int>(v, 42);
    }
}
```

```vb
Class C
    Public Function N(Of T,U)(ByVal ta As T, ByVal ua As U) As T
        ...
    End Function
    Public Function M(Of V)(ByVal va As V ) As V
        Return N(Of V, Integer)(va, 42)
    End Function
End Class
```

```cpp
ref class C
{
private:
    generic <typename T, typename U> T N(T t, U u) {...}
public:
    generic <typename V> V M(V v)
    {
        return N<V, int>(v, 42);
    }
};
```

El cuerpo del método de M contiene una llamada al método N, especificando el parámetro de tipo de M y el tipo Int32. La IsGenericMethodDefinition propiedad devuelve false para el método N<V,int>.

Nota

Aunque no se encuentra el método N<V,int> construido abierto al reflejar sobre la clase C, se debe generar utilizando MakeGenericMethod para emitir C como una clase dinámica.

Si una definición de método genérico incluye parámetros genéricos del tipo declarante, habrá una definición de método genérica específica de cada tipo construido. Por ejemplo, considere el siguiente código de C# y Visual Basic:

```csharp
class B<U,V> {}
class C<T> { public B<T,S> M<S>() {...}}
```

```vb
Class B(Of U, V)
End Class
Class C(Of T)
    Public Function M(Of S)() As B(Of T, S)
        ...
    End Function
End Class
```

```cpp
generic <typename U, typename V> ref class B {};
generic <typename T> ref class C
{
public:
    generic <typename S> B<T,S>^ M() {...};
};
```

En el tipo C<int> construido (C(Of Integer) en Visual Basic), el método genérico M devuelve B<int, S>. En el tipo C<T>abierto , M devuelve B<T, S>. En ambos casos, la IsGenericMethodDefinition propiedad devuelve true para el MethodInfo que representa M.

Para obtener una lista de las condiciones invariables para los términos específicos de los métodos genéricos, vea la IsGenericMethod propiedad . Para obtener una lista de las condiciones invariables para otros términos usados en la reflexión genérica, vea la IsGenericType propiedad .

Se aplica a

Consulte también