MethodBase.IsHideBySig Özellik

Tanım

Türetilmiş sınıfta yalnızca aynı türdeki aynı imzaya sahip bir üyenin gizlenip gizlenmediğini belirten bir değer alır.

C#
public bool IsHideBySig { get; }

Özellik Değeri

true üye imzayla gizlenmişse; aksi takdirde , false.

Uygulamalar

Örnekler

Aşağıdaki kod örneği, aşırı yüklenmiş yöntemi olan bir temel sınıf ve aşırı yüklemelerden birini gizleyen türetilmiş bir sınıf içerir. Kod örneğinin Visual Basic sürümünde, IsHideBySig özelliği türetilmiş sınıftaki üye için döndürür false . Kod örneğinin C# sürümünde, özelliği türetilmiş sınıftaki üye için döndürür true .

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

Açıklamalar

Türetilmiş sınıftaki bir üye C# new değiştiricisi veya Visual Basic Shadows değiştiricisi ile bildirildiğinde, temel sınıfta aynı ada sahip bir üyeyi gizleyebilir. C# temel sınıf üyelerini imzaya göre gizler. Diğer bir ifadeyle, temel sınıf üyesinin birden çok aşırı yüklemesi varsa, gizli olan tek kişi aynı imzaya sahip olandır. Buna karşılık, Visual Basic tüm temel sınıf aşırı yüklemelerini gizler. Bu nedenle, IsHideBySig Visual Basic Shadows değiştiricisi ile bildirilen bir üyede ve true C# new değiştiricisi ile bildirilen bir üyede döndürürfalse.

Uyarı

Bu özellik, bir yöntemin özniteliğine NewSlot sahip olup olmadığını belirlemez. veya Shadows değiştiricisi ile new bildirilen bir yöntem özniteliğine NewSlot sahip olur, ancak yalnızca ile new bildirilen yöntemlerin (yalnızca C# yöntemleri) IsHideBySig özelliği olarak trueayarlanır. Bir yöntemin özniteliğine NewSlot sahip olup olmadığını belirlemek için aşağıdakine benzer bir kod kullanın: if ((myMethodInfo.Attributes & MethodAttributes.VtableLayoutMask) == MethodAttributes.NewSlot) C# dilinde veya If (myMethodInfo.Attributes And MethodAttributes.VtableLayoutMask) = MethodAttributes.NewSlot Visual Basic'te. Bununla birlikte, ile new bildirilen veya Shadows özniteliğine sahip olan tüm yöntemlerin NewSlot veya Shadowsile new bildirilmediğini NewSlot unutmayın.

Şunlara uygulanır

Ürün Sürümler
.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