Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Anahtar sözcüğünü new bildirim değiştirici olarak kullandığınızda, temel sınıfın sağladığı bir üyeyi açıkça gizlersiniz. Devralınan bir üyeyi gizlediğinizde, üyenin türetilmiş sürümü temel sınıf sürümünün yerini alır. Temel sınıf sürümü türetilmiş sınıfta görünür olduğunda bir üyeyi gizleyebilirsiniz. Temel sınıf sürümü veya olarak private işaretlenirse bazı durumlarda internalgörünmez. Değiştiriciyi kullanmadan veya public üyeleri gizleyebilmenize protectednew 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.
C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.
Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.
Tavsiye
Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.
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 gizlenemediğinden etkilenmez.
Devralma yoluyla gizlenen ad aşağıdaki formlardan birini alır:
Genellikle, bir sınıf veya yapıya eklediğiniz sabit, alan, özellik veya tür, adını paylaşan tüm temel sınıf üyelerini gizler. Ancak bazı özel durumlar vardır. Örneğin, çağrılamayan bir türe sahip olmak için ada
Nsahip yeni bir alan bildirirseniz ve temel tür bir yöntem olduğunu bildirirseN, 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ıttığınız 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ıttığınız 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 hala derlenir 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 için bkz. C# dil belirtimininyeni değiştirici bölümü.