Add a more functional (i.e. fewer-stubs) implementation of System.Data.Linq.
[mono.git] / mcs / docs / ecma334 / 20.4.5.xml
1 <?xml version="1.0"?>
2 <clause number="20.4.5" title="Abstract classes and interfaces">
3   <paragraph>Like a non-abstract class, an abstract class must provide implementations of all members of the interfaces that are listed in the base class list of the class. However, an abstract class is permitted to map interface methods onto abstract methods. <example>[Example: For example <code_example><![CDATA[
4 interface IMethods  
5 {  
6    void F();  
7    void G();  
8 }  
9 abstract class C: IMethods  
10 {  
11    public abstract void F();  
12    public abstract void G();  
13 }  
14 ]]></code_example></example></paragraph>
15   <paragraph>
16     <example>Here, the implementation of IMethods maps F and G onto abstract methods, which must be overridden in non-abstract classes that derive from C. end example]</example>
17   </paragraph>
18   <paragraph>Note that explicit interface member implementations cannot be abstract, but explicit interface member implementations are of course permitted to call abstract methods. <example>[Example: For example <code_example><![CDATA[
19 interface IMethods  
20 {  
21    void F();  
22    void G();  
23 }  
24 abstract class C: IMethods  
25 {  
26    void IMethods.F() { FF(); }  
27    void IMethods.G() { GG(); }  
28    protected abstract void FF();  
29    protected abstract void GG();  
30 }  
31 ]]></code_example></example></paragraph>
32   <paragraph>
33     <example>Here, non-abstract classes that derive from C would be required to override FF and GG, thus providing the actual implementation of IMethods. end example]</example>
34   </paragraph>
35 </clause>