Gönderen ECMA 335 , bölüm 1 bölüm 8.10.4:
CTS, hem temel türden görülebilen adlar (gizleme) hem de türetilmiş sınıftaki yerleşim alanlarının paylaşımı (geçersiz kılma) üzerinde bağımsız denetim sağlar. Gizleme, türetilmiş sınıftaki bir üyeyi ada göre gizle veya ad ve imzaya göre gizle olarak işaretleyerek kontrol edilir. Gizleme her zaman üye türüne göre yapılır, yani türetilmiş alan adları temel alan adlarını gizleyebilir, ancak yöntem adlarını, özellik adlarını veya olay adlarını gizleyemez. Türetilmiş bir üye isme göre gizle olarak işaretlenirse, temel sınıftaki aynı türden aynı ada sahip üyeler türetilmiş sınıfta görünmez; üye ad ve imzayla gizle olarak işaretlenmişse, yalnızca aynı türden bir üye tam olarak aynı ada ve türe (alanlar için) veya yöntem imzasına (yöntemler için) sahip türetilmiş sınıftan gizlenir. Bu iki gizleme biçimi arasındaki ayrımın uygulanması tamamen kaynak dil derleyicileri ve yansıma kütüphanesi tarafından sağlanır; VES'in kendisi üzerinde doğrudan bir etkisi yoktur.
(Bundan hemen anlaşılmıyor, ancak hidebysig
"ad ve imzayla gizle" anlamına geliyor.)
Ayrıca bölüm 2'nin 15.4.2.2 bölümünde:
hidebysig, araçların kullanımı için sağlanır ve VES tarafından dikkate alınmaz. Belirtilen yöntemin, eşleşen bir yöntem imzası olan temel sınıf türlerinin tüm yöntemlerini gizlediğini belirtir; atlandığında, yöntem imzadan bağımsız olarak aynı addaki tüm yöntemleri gizlemelidir.
Örnek olarak, sahip olduğunuzu varsayalım:
public class Base
{
public void Bar()
{
}
}
public class Derived : Base
{
public void Bar(string x)
{
}
}
...
Derived d = new Derived();
d.Bar();
Çünkü, geçerli olduğundan Bar(string)
değil gizlemek Bar()
çünkü C # derleyicisi kullanımları hidebysig
. Eğer "isme göre sakla" semantiğini kullansaydı, Bar()
bir tür referansını arayamazsınız Derived
, ancak yine de onu Base'e çevirebilir ve bu şekilde adlandırabilirsiniz.
DÜZENLEME: Ben sadece bunu ildasming, bir DLL için yukarıdaki kod derleme kaldırarak bu denedim hidebysig
için Bar()
ve Bar(string)
sonra da aramaya çalışıyorum, tekrar ilasming, Bar()
diğer koddan:
Derived d = new Derived();
d.Bar();
Test.cs(6,9): error CS1501: No overload for method 'Bar' takes '0' arguments
Ancak:
Base d = new Derived();
d.Bar();
(Derleme sorunu yok.)
Shadows
veOverloads
VB.NET içinde.