Bu bölümlerde C 5. şartnamenin 13.4.6 için 13.4.4 açıklanmıştır oluyor. İlgili bölümlerde aşağıda cinsindendir, ancak açıkça bir sınıf bir arabirim uygulayan ifade temelde eğer, yine arayüz eşleştirmesini tetikler, böylece derleyici her arabirim üyesi eşleştirilmiş hangi uygulama çalışmak için kullanmak biri olarak o sınıf alır .
13.4.4 Arayüz haritalama
sınıf veya yapı temel sınıf listesinde listelenen arayüzleri tüm üyelerinin uygulamaları sağlamak zorundadır A sınıfı veya yapı. Bir uygulama sınıfındaki veya yapısındaki arayüz elemanlarının yerini belirleme süreci arayüz haritalaması olarak bilinir. Bir sınıf veya yapı C
için
Arayüz haritalama C
taban sınıfı listesinde belirtilen her bir arayüzde her üyesi için bir uygulama bulur., belirli bir arabirim üyesi olan I
, M
üyesinin bildirildiği arabirimdir, her bir sınıf veya yapı S
, C
ile başlayarak ve bir eşleşme bulunana kadar C
her ardışık taban sınıfı için tekrarlanarak belirlenir. : S
I
ve M
maçları açık arabirim üyesi uygulamasının bir bildirim içeriyor
- , o zaman bu üye
I.M
uygulanmasıdır.
- Aksi takdirde,
S
, M ile eşleşen statik olmayan bir genel üye bildirimi içeriyorsa, bu üye I.M
uygulamasıdır. Birden fazla üye eşleşirse, hangi üyenin I.M
uygulaması olduğu belirtilmemiş. Bu durum yalnızca, S
, jenerik türünde bildirilen iki üyenin farklı imzalara sahip olduğu, ancak tür argümanlarının imzalarını aynı kıldığı, oluşturulmuş bir tür olduğunda oluşabilir.
... A sınıfı onun temel sınıflar tarafından sağlanan tüm arayüz uygulamaları devralır
13.4.5 Arayüz uygulama miras. Bir arabirimi açıkça yeniden uygulamadan, türetilmiş bir sınıf, temel sınıflarından aldığı arabirim eşlemelerini hiçbir şekilde değiştiremez.Örneğin, bildirilerde
interface IControl
{
void Paint();
}
class Control: IControl
{
public void Paint() {...}
}
class TextBox: Control
{
new public void Paint() {...}
}
TextBox
içinde Paint
yöntem Control
, içinde Paint
yöntemi gizler ama IControl.Paint
üzerine Control.Paint
eşleştirmesini değiştirmeyen ve her tür nesne ve arayüz örnekler arasında Paint
çağrıları olacak var aşağıdaki etkileri
Control c = new Control();
TextBox t = new TextBox();
IControl ic = c;
IControl it = t;
c.Paint(); // invokes Control.Paint();
t.Paint(); // invokes TextBox.Paint();
ic.Paint(); // invokes Control.Paint();
it.Paint(); // invokes Control.Paint();
...
13.4.6 Arayüz reimplementation
bir arayüz uygulaması taban sınıfı listede dahil ederek arabirimini yeniden düzenlemesini izin verilir devralır A sınıfı.
bir arabirimin bir yeniden düzenleme, bir ara yüzünün bir ilk uygulama ile tam olarak aynı arayüz eşleştirme kurallarını takip eder. Bu nedenle, kalıtsal arayüz eşlemenin, arayüzün yeniden uygulanması için oluşturulan arayüz eşleştirmesinde hiçbir etkisi yoktur. Örneğin, bildirimleri
interface IControl
{
void Paint();
}
class Control: IControl
{
void IControl.Paint() {...}
}
class MyControl: Control, IControl
{
public void Paint() {}
}
Control
Control.IControl.Paint
üzerine IControl.Paint
MyControl.Paint
üzerine IControl.Paint
eşler MyControl
yeniden uygulanmasını etkilemez haritalar gerçeği
içinde.
Neden aksi davranmalıyım? Beklentiniz nedir? –
Beklentiler - aynı çıktı, aynı üyelere erişildi. Temel sınıf tarafından halihazırda uygulanmış bir arayüzün şeyleri değiştirdiğinde, neden sınıf tanımına arayüz eklemenin nedenini anlamıyorum. – yevgenijz
Neyin yeni dizesi Name {get; } '' Base'de 'Name' için yapıyor? –