Suitability of C# for large-scale software projects
Question: To what extent do the features of C# help developers
of large-scale software projects?
Answer: The biggest problem in large-scale software projects is to
cope with complexity. This can be accomplished by abstracting from details
and hiding complex implementation details behind simple interfaces.
This is supported by the following C# features:
Classes group data and their operations into a unit.
Complex algorithms and data structures can be hidden behind simple
method interfaces (information hiding). In addition to methods,
C# supports data abstraction through properties and indexers.
Namespaces group related classes and other types into larger units,
thus helping to structure large-scale software.
Interfaces abstract from the concrete implementation of a component
and concentrate on its interface. The same interface can be implemented by
different classes, which can then be used in the same way.
The object-oriented features of C# (mainly inheritance and
dynamic binding) promote the reuse and extensibility of software.
Software projects in C# do not have to start from scratch.
Type safety. Strict type checking traps many errors already
at compile time. At run time, garbage collection makes sure that
object space is released neither too early nor too late. This avoids
many awkward programming errors. Type casts are checked at run time.
Invalid array indexes or null references to objects are trapped.
This puts a software project at safe grounds.
Assemblies have a version number. The loader makes sure that
the correct versions of classes are loaded, i.e. those
which the compiler used during type checking. The fact that assemblies
can be signed helps to keep viruses away.