Jon Jagger
jon@jaggersoft.com
Table of Contents 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Notes DownloadECMA-334 C# Language Specificationpreviousnextprevious at this levelnext at this level 20 Interfacesprevious at this levelnext at this level 20.4 Interface implementationsprevious at this levelnext at this level 20.4.4 Interface re-implementation Paragraph 11 A class that inherits an interface implementation is permitted to re-implement the interface by including it in the base class list. Paragraph 21 A re-implementation of an interface follows exactly the same interface mapping rules as an initial implementation of an interface. 2 Thus, the inherited interface mapping has no effect whatsoever on the interface mapping established for the re-implementation of the interface. [Example: For example, in the declarations
interface IControl  
{  
   void Paint();  
}  
class Control: IControl  
{  
   void IControl.Paint() {...}  
}  
class MyControl: Control, IControl  
{  
   public void Paint() {}  
}  
the fact that Control maps IControl.Paint onto Control.IControl.Paint doesn't affect the re-implementation in MyControl, which maps IControl.Paint onto MyControl.Paint. end example]
Paragraph 31 Inherited public member declarations and inherited explicit interface member declarations participate in the interface mapping process for re-implemented interfaces. [Example: For example
interface IMethods  
{  
   void F();  
   void G();  
   void H();  
   void I();  
}  
class Base: IMethods  
{  
   void IMethods.F() {}  
   void IMethods.G() {}  
   public void H() {}  
   public void I() {}  
}  
class Derived: Base, IMethods  
{  
   public void F() {}  
   void IMethods.H() {}  
}  
Here, the implementation of IMethods in Derived maps the interface methods onto Derived.F, Base.IMethods.G, Derived.IMethods.H, and Base.I. end example] Paragraph 41 When a class implements an interface, it implicitly also implements all of that interface's base interfaces. 2 Likewise, a re-implementation of an interface is also implicitly a re-implementation of all of the interface's base interfaces. [Example: For example
interface IBase  
{  
   void F();  
}  
interface IDerived: IBase  
{  
   void G();  
}  
class C: IDerived  
{  
   void IBase.F() {...}  
   void IDerived.G() {...}  
}  
class D: C, IDerived  
{  
   public void F() {...}  
   public void G() {...}  
}  
Here, the re-implementation of IDerived also re-implements IBase, mapping IBase.F onto D.F. end example]
{ JSL }
Jagger Software Ltd
Company # 4070126
VAT # 762 5213 42
Valid HTML 4.01Valid CSS