MethodBase.IsHideBySig Propiedad

Definición

Obtiene un valor que indica si sólo hay un miembro del mismo tipo y con idéntica firma oculto en la clase derivada.

C#
public bool IsHideBySig { get; }

Valor de propiedad

true si el miembro está oculto por firma; en caso contrario, false.

Implementaciones

Ejemplos

El ejemplo de código siguiente contiene una clase base con un método sobrecargado y una clase derivada que oculta una de las sobrecargas. En la versión de Visual Basic del ejemplo de código, la IsHideBySig propiedad devuelve false para el miembro de la clase derivada. En la versión de C# del ejemplo de código, la propiedad devuelve true para el miembro de la clase derivada.

C#
using System;
using System.Reflection;

// The base class B contains an overloaded method M.
//
public class B
{
    public virtual void M()
    {
        Console.WriteLine("B's M()");
    }
    public virtual void M(int x)
    {
        Console.WriteLine("B's M({0})", x);
    }
}

// The derived class D hides one overload of the inherited 
// method M.
//
public class D:
    B
{
    new public void M(int i)
    {
        Console.WriteLine("D's M({0})", i);
    }
}

public class Test
{
    public static void Main()
    {
        D dinst = new D();
        // In C#, the method in the derived class hides by name and by
        // signature, so the overload in the derived class hides only one
        // of the overloads in the base class.
        //
        Console.WriteLine("------ List the overloads of M in the derived class D ------");
        Type t = dinst.GetType();
        foreach( MethodInfo minfo in t.GetMethods() )
        {
            if (minfo.Name=="M") {Console.WriteLine("Overload of M: {0}  IsHideBySig = {1}, DeclaringType = {2}", minfo, minfo.IsHideBySig, minfo.DeclaringType);}
        }

        // The method M in the derived class hides one overload of the 
        // method in B.  Contrast this with Visual Basic, which hides by
        // name instead of by name and signature.  In Visual Basic, the
        // parameterless overload of M would be unavailable from D.
        //
        Console.WriteLine("------ Call the overloads of M available in D ------");
        dinst.M();
        dinst.M(42);
        
        // If D is cast to the base type B, both overloads of the 
        // shadowed method can be called.
        //
        Console.WriteLine("------ Call the shadowed overloads of M ------");
        B binst = dinst;
        binst.M();
        binst.M(42);
    } //Main
} //Test

/* This code example produces the following output:

------ List the overloads of M in the derived class D ------
Overload of M: Void M(Int32)  IsHideBySig = True, DeclaringType = B
Overload of M: Void M()  IsHideBySig = True, DeclaringType = B
Overload of M: Void M(Int32)  IsHideBySig = True, DeclaringType = D
------ Call the overloads of M available in D ------
B's M()
D's M(42)
------ Call the shadowed overloads of M ------
B's M()
B's M(42)
*/

Comentarios

Cuando un miembro de una clase derivada se declara con el modificador de C# new o el modificador de Visual Basic Shadows , puede ocultar un miembro del mismo nombre en la clase base. C# oculta los miembros de clase base por firma. Es decir, si el miembro de clase base tiene varias sobrecargas, la única que está oculta es la que tiene la firma idéntica. Por el contrario, Visual Basic oculta todas las sobrecargas de clase base. Por lo tanto, IsHideBySig devuelve false en un miembro declarado con el modificador de Visual Basic Shadows y true en un miembro declarado con el modificador de C# new .

Advertencia

Esta propiedad no determina si un método tiene el NewSlot atributo . Un método declarado con el modificador o Shadows tendrá el NewSlot atributo , pero solo los métodos declarados con new (es decir, solo los métodos de C#) tendrán la IsHideBySig propiedad establecida en true.new Para determinar si un método tiene el NewSlot atributo , use código similar al siguiente: if ((myMethodInfo.Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot) en C# o If (myMethodInfo.Attributes And MethodAttributes.VtableLayoutMask) = MethodAttributes.NewSlot en Visual Basic. Sin embargo, tenga en cuenta que aunque todos los métodos declarados con new o tienen el NewSlot atributo , no todos los métodos que tienen el NewSlot atributo se declaran con new o ShadowsShadows .

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0