Wes,
In the simplest terms:
Abstract classes are classes that have the MustInherit keyword on them.
Concrete classes do not have the MustInherit keyword on them.
As the others have stated. Abstract classes are used as starting points for
Concrete classes. You can create an instance of a Concrete class, you cannot
create an instance of an Abstract class.
For example if I were to create a type safe collection I would start with
System.Collections.CollectionBase. CollectionBase is an Abstract class
because it has the MustInherit keyword on it. I cannot create an instance of
CollectionBase .
My type safe collection extends CollectionBase adding type safe Add, Item,
and Remove methods. My type safe collection is a concrete class as it does
not have the MustInherit keyword. I can create an instance of my type safe
collection.
Some Abstract classes have MustOverride methods, these are methods that any
concrete classes have to fill in. CollectionBase does not have any these.
System.IO.Stream is an example of an Abstract class that has MustOverride
methods.
Abstract classes normally have at least Overridable methods (such as
CollectionBase), but are not required to have either MustOverride or
Overridable methods.
Abstract classes are used for 1 of 2 general reasons:
1. As a starting point for other classes as they offer common code. For
example CollectionBase. Normally I would not write functions that expect a
CollectionBase object and use it. Normally I use the type safe collection
object itself. CollectionBase gives me a head start of writing type safe
collections.
2. As a starting point for polymorphism, for example System.IO.Stream. I can
write routines that only expect System.IO.Stream, by passing a FileStream or
NetworkStream object my routine stays the same, but I just changed reading
from a disk file verses reading off a web site. I can use the same routine
with a MemoryStream and support the clipboard!
For a comparison of OOP terms across languages see:
http://msdn.microsoft.com/library/d...ro7/html/vxoriLanguageEquivalentsKeywords.asp
Referring to the above link, J#, C#, C++, and JScript all use the 'abstract'
keyword to "specific that a class can only be inherited. An instance of the
class cannot be created" while VB.NET uses the 'MustInherit' keyword for
this.
Hope this helps
Jay