The <a href=https://msdn.microsoft.com/en-us/library/aa645615(v=vs.71).aspx> 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:
- 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.
- An abstract class is permitted (but not required) to contain abstract members.
- An abstract class cannot be sealed.
- A non-abstract class derived from an abstract class must include actual implementations of all inherited abstract methods and accessors.
- An abstract class must provide implementation for all interface members.
####An abstract class that implements an interface might map the interface methods onto abstract methods. For example:
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
####The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class. The sealed keyword enables you to prevent the inheritance of a class or certain class members that were previously marked virtual.
###It is an error to use the static or virtual modifiers in an abstract method declaration.
Polymorphism, Method Hiding and Overriding