yeni değiştirici (C# Başvurusu)

Bildirim değiştirici olarak kullanıldığında anahtar sözcüğü, new temel sınıftan devralınan bir üyeyi açıkça gizler. Devralınan bir üyeyi gizlediğinizde, üyenin türetilmiş sürümü temel sınıf sürümünün yerini alır. Bu, üyenin temel sınıf sürümünün görünür olduğunu varsayar; örneğin, veya olarak private işaretlendiğinde zaten gizlenir. Bazı durumlarda internal. Değiştiriciyi kullanmadan veya protected üyeleri gizleyebilmenize publicnew rağmen, derleyici uyarısı alırsınız. Bir üyeyi açıkça gizlemek için kullanırsanız new , bu uyarıyı gizler.

Bir türün örneğini new veya genel tür kısıtlaması olarak oluşturmak için anahtar sözcüğünü de kullanabilirsiniz.

Devralınan bir üyeyi gizlemek için, aynı üye adını kullanarak türetilmiş sınıfta bildirin ve anahtar sözcüğüyle new değiştirin. Örneğin:

public class BaseC
{
    public int x;
    public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

Bu örnekte, BaseC.Invoke tarafından gizlenir DerivedC.Invoke. Alan x , benzer bir adla gizlenmediğinden etkilenmez.

Devralma yoluyla gizlenen ad aşağıdaki formlardan birini alır:

  • Genellikle, bir sınıfta veya yapıda tanıtılan bir sabit, alan, özellik veya tür, adını paylaşan tüm temel sınıf üyelerini gizler. Özel durumlar var. Örneğin, çağrılamayan bir türe sahip olmak için ada N sahip yeni bir alan bildirirseniz ve temel tür bir yöntem olduğunu bildirirse N , yeni alan çağırma söz diziminde temel bildirimi gizlemez. Daha fazla bilgi için C# dil belirtiminin Üye arama bölümüne bakın.

  • Bir sınıf veya yapıda tanıtılan bir yöntem, temel sınıfta bu adı paylaşan özellikleri, alanları ve türleri gizler. Aynı imzaya sahip tüm temel sınıf yöntemlerini de gizler.

  • Bir sınıf veya yapıda tanıtılan bir dizin oluşturucu, aynı imzaya sahip tüm temel sınıf dizin oluşturucularını gizler.

İki değiştiricinin birbirini dışlayan anlamları olduğundan, aynı üyede hem hem de newgeçersiz kılmayı kullanmak bir hatadır. Değiştirici aynı new ada sahip yeni bir üye oluşturur ve özgün üyenin gizli olmasına neden olur. Değiştirici, override devralınan üye için uygulamayı genişletir.

Devralınan bir üyeyi new gizlemeyen bir bildirimde değiştiricinin kullanılması bir uyarı oluşturur.

Örnekler

Bu örnekte, bir temel sınıf, BaseCve türetilmiş bir sınıf, DerivedCdevralınan alanın değerini gizleyen aynı alan adını xkullanır. Örnekte değiştiricinin kullanımı gösterilmektedir new . Ayrıca, tam adlarını kullanarak temel sınıfın gizli üyelerine nasıl erişeceklerini gösterir.

public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC
{
    // Hide field 'x'.
    new public static int x = 100;

    static void Main()
    {
        // Display the new value of x:
        Console.WriteLine(x);

        // Display the hidden value of x:
        Console.WriteLine(BaseC.x);

        // Display the unhidden member y:
        Console.WriteLine(y);
    }
}
/*
Output:
100
55
22
*/

Bu örnekte iç içe geçmiş sınıf, temel sınıfta aynı ada sahip bir sınıfı gizler. Örnekte, uyarı iletisini ortadan kaldırmak için değiştiricinin new nasıl kullanılacağı ve gizli sınıf üyelerine tam adlarını kullanarak nasıl erişildikleri gösterilmektedir.

public class BaseC
{
    public class NestedC
    {
        public int x = 200;
        public int y;
    }
}

public class DerivedC : BaseC
{
    // Nested type hiding the base type members.
    new public class NestedC
    {
        public int x = 100;
        public int y;
        public int z;
    }

    static void Main()
    {
        // Creating an object from the overlapping class:
        NestedC c1  = new NestedC();

        // Creating an object from the hidden class:
        BaseC.NestedC c2 = new BaseC.NestedC();

        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);
    }
}
/*
Output:
100
200
*/

Değiştiriciyi new kaldırırsanız, program derlenip çalışmaya devam eder, ancak aşağıdaki uyarıyı alırsınız:

The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.

C# dili belirtimi

Daha fazla bilgi için bkz. C# dil belirtiminin yeni değiştirici bölümü.

Ayrıca bkz.