Fix PowerPC regression caused by tracing changes (#11907)
[mono-project.git] / mcs / docs / ecma334 / 17.1.1.1.xml
blob1cd44b2f222a590443238f176b26501b298154aa
1 <?xml version="1.0"?>
2 <clause number="17.1.1.1" title="Abstract classes">
3   <paragraph>The abstract modifier is used to indicate that a class is incomplete and that it is intended to be used only as a base class. An abstract class differs from a non-abstract class in the following ways: <list><list_item> An abstract class cannot be instantiated directly, and it is a compile-time error to use the new operator on an abstract class. While it is possible to have variables and values whose compile-time types are abstract, such variables and values will necessarily either be null or contain references to instances of non-abstract classes derived from the abstract types. </list_item><list_item> An abstract class is permitted (but not required) to contain abstract members. </list_item><list_item> An abstract class cannot be sealed. </list_item></list></paragraph>
4   <paragraph>When a non-abstract class is derived from an abstract class, the non-abstract class must include actual implementations of all inherited abstract members, thereby overriding those abstract members. <example>[Example: In the example <code_example><![CDATA[
5 abstract class A  
6 {  
7    public abstract void F();  
8 }  
9 abstract class B: A  
10 {  
11    public void G() {}  
12 }  
13 class C: B  
14 {  
15    public override void F() {  
16       // actual implementation of F  
17    }  
18 }  
19 ]]></code_example>the abstract class A introduces an abstract method F. Class B introduces an additional method G, but since it doesn't provide an implementation of F, B must also be declared abstract. Class C overrides F and provides an actual implementation. Since there are no abstract members in C, C is permitted (but not required) to be non-abstract. end example]</example> </paragraph>
20 </clause>