Aracılığıyla paylaş


new Değiştiricisi (C# Başvurusu)

Bildirim değiştirici olarak kullanıldığında new anahtar sözcüğü bir temel sınıftan devralınan bir üyeyi doğrudan gizler.Devralınmış bir üyeyi gizlediğinizde, üyenin devralınan sürümü temel sınıftaki sürümün yerine geçer.Üyeleri new değiştiricisi kullanmadan gizleyebilmenize rağmen bir derleyici uyarısı alırsınız.Bir üyeyi açıkça gizlemek için new kullanıyorsanız, bu uyarı bastırılır.

Devralınan bir üyeyi gizlemek için, üyeyi türetilen sınıfta aynı üye adını kullanarak bildirin ve new anahtar sözcüğüyle 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, DerivedC.Invoke tarafından gizlenir.x alanı, benzer bir adla gizlenmediğinden etkilenmez.

Devralma üzerinden ad gizleme aşağıdaki biçimlerden birini alır:

  • Genelde bir sınıfa ya da yapı birimine dahil edilen bir sabit, alan, özellik ya da tür, kendi adını paylaşan tüm taban sınıfı üyelerini gizler. Özel durumlar vardır. Örneğin N adına sahip yeni bir alanın çağrılmayan bir türe sahip olduğunu bildirirseniz ve bir taban türü N'nin bir yöntem olduğunu bildirirse, yeni alan taban bildirimini çağırma sözdiziminde gizlemez. Ayrıntılar için bkz. C# dili belirtimi (bkz. "İfadeler" bölümünde "Üye Arama" kısmı).

  • Bir sınıfa ya da yapı birimine dahil edilen bir yöntem özellikleri, alanları ve taban sınıfındaki adı paylaşan türleri gizler.Ayrıca aynı imzaya sahip tüm taban sınıfı yöntemlerini gizler.

  • Bir sınıf ya da struct'a dahil edilen bir dizin oluşturucu, aynı imzayı taşıyan tüm taban sınıfı dizin oluşturucularını gizler.

Aynı üyede hem new hem de geçersiz kıl kullanılması bir hatadır, çünkü iki değiştirici karşılıklı özel anlamlara sahiptir.new değiştiricisi, aynı adda yeni bir üye oluşturur ve ilk üyenin gizli hale gelmesine neden olur.override değiştiricisi devralınan bir üyenin uygulanmasını genişletir.

new değiştiricisini, amacı devralınan bir üyeyi gizlemek olmayan bir bildirimde kullanmak bir uyarı oluşturur.

Örnek

Bu örnekte bir taban sınıfı BaseC ve bir türetilen sınıf DerivedC, devralınan alandaki değeri gizleyen aynı x alanı adını kullanır.Örnek new değiştiricisinin kullanımını göstermektedir.Ayrıca bunların tam olarak nitelendirilmiş adlarını kullanarak taban sınıfının gizlenmiş üyelerine nasıl erişileceğini 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 yuvalanan bir sınıf, taban sınıfında aynı ada sahip bir sınıfı gizler.Örnek, uyarı iletisini gidermek ve gizli sınıf üyelerine bunların tam nitelikli adlarını kullanarak erişmek için new değiştiricisinin nasıl kullanılacağını göstermektedir.

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

new değiştiricisini kaldırırsanız, program hala derler ve çalışır 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# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Başvuru

C# Anahtar Sözcükleri

İşleç Anahtar Sözcükleri (C# Başvurusu)

Değiştiriciler (C# Başvurusu)

Geçersiz Kılma ve Yeni Anahtar Sözcüklerle Sürüm Oluşturma (C# Programlama Kılavuzu)

Geçersiz Kılmanın ve Yeni Anahtar Sözcüklerin Ne Zaman Kullanılacağını Bilme (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu