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 public
new
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 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ı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 new
geç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, BaseC
ve türetilmiş bir sınıf, DerivedC
devralınan alanın değerini gizleyen aynı alan adını x
kullanı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ü.