Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale
Questo argomento non è stato ancora valutato - Valuta questo argomento

Proprietà MethodBase.IsHideBySig

Ottiene un valore che indica se nella classe derivata è nascosto un solo membro dello stesso tipo che riporta esattamente la stessa firma.

Spazio dei nomi:  System.Reflection
Assembly:  mscorlib (in mscorlib.dll)
public bool IsHideBySig { get; }

Valore proprietà

Tipo: System.Boolean
true se il membro è nascosto dalla firma; in caso contrario, false.

Quando il membro di una classe derivata viene dichiarato utilizzando il modificatore new di C# o il modificatore Shadows di Visual Basic, può nascondere un membro con lo stesso nome nella classe base. C# nasconde i membri della classe base mediante una firma. Questo significa che, se il membro della classe di base dispone di più overload, l'unico a essere nascosto è quello con la firma identica. Viceversa, in Visual Basic vengono nascosti tutti gli overload della classe base. Pertanto, IsHideBySig restituisce false in un membro dichiarato utilizzando il modificatore Shadows di Visual Basic e true in un membro dichiarato utilizzando il modificatore new di C#.

Nota di avvisoAttenzione

Questa proprietà non determina se un metodo dispone dell'attributo NewSlot. Un metodo dichiarato con new o il modificatore Shadows disporrà dell'attributo NewSlot, ma solo metodi dichiarati con new (ovvero, solo metodi C#) disporranno della proprietà IsHideBySig impostata su true. Per determinare se un metodo dispone dell'attributo NewSlot, utilizzare un codice simile al seguente: if ((myMethodInfo.Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot) in C# o If (myMethodInfo.Attributes And MethodAttributes.VtableLayoutMask) = MethodAttributes.NewSlot in Visual Basic. Si noti tuttavia che anche se tutti i metodi dichiarati con new o Shadows dispongono dell'attributo NewSlot, non tutti i metodi che dispongono dell'attributo NewSlot vengono dichiarati con new o Shadows.

L'esempio di codice riportato di seguito contiene una classe base con un metodo di overload e una classe derivata in cui uno degli overload è nascosto. Nella versione dell'esempio di codice relativa a Visual Basic, la proprietà IsHideBySig restituisce false per il membro nella classe derivata. Nella versione dell'esempio di codice relativa a C#, la proprietà restituisce true per il membro nella classe derivata.


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)
*/



.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

date

Cronologia

Motivo

Ottobre 2010

È stata aggiunta una nota relativa al modo in cui i metodi ottengono l'attributo NewSlot.

Correzione di bug nel contenuto.

Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft. Tutti i diritti riservati.