Home |  JournalSeek |  SoftwareSeek |  GenomeSeek |  Expression |  Developer |  Research |  TakeOnIt
Return to Genamics Home

A Comparative Overview of C#

Author: Ben Albahari
Date: Released 31 July 2000, updated 10 August 2000.
Acknowledgements (alphabetically): Don Box, C.R. Manning, Joe Nalewabau, John Osborn, Thomas Rhode & Daryl Richter for their feedback and support

This article focuses on the new ways of programming C# offers, and how it intends to improve upon its two closest neighbors, Java and C++. C# improves on C++ in a similar way to Java in many respects, so I'm not going to be re-explaining things like the benefits of a single-rooted object hierarchy. This article begins with a brief summary of the similarities between C# and Java, and then goes into exploring the new C# features.

Background

In June 2000, Microsoft announced both the .NET platform and a new programming language called C#. C# is a strongly-typed object-oriented language designed to give the optimum blend of simplicity, expressiveness, and performance. The .NET platform is centered around a Common Language Runtime (similar to a JVM) and a set of libraries which can be exploited by a wide variety of languages which are able to work together by all compiling to an intermediate language (IL). C# and .NET are a little symbiotic: some features of C# are there to work well with .NET, and some features of .NET are there to work well with C# (though .NET aims to work well with many languages). This article is mostly concerned with C#, but sometimes it is useful to discuss .NET too. The C# language was built with the hindsight of many languages, but most notably Java and C++. It was co-authored by Anders Hejlsberg (who is famous for the design of the Delphi language), and Scott Wiltamuth.

1. C# and Java

Below is a list of features C# and Java share, which are intended to improve on C++. These features are not the focus of this article, but it is very important to be aware of the similarities.

  • Compiles into machine-independent language-independent code which runs in a managed execution environment.
  • Garbage Collection coupled with the elimination of pointers (in C# restricted use is permitted within code marked unsafe)
  • Powerful reflection capabilities
  • No header files, all code scoped to packages or assemblies, no problems declaring one class before another with circular dependencies
  • Classes all descend from object and must be allocated on the heap with new keyword
  • Thread support by putting a lock on objects when entering code marked as locked/synchronized
  • Interfaces, with multiple-inheritance of interfaces, single inheritance of implementations
  • Inner classes
  • No concept of inheriting a class with a specified access level
  • No global functions or constants, everything belongs to a class
  • Arrays and strings with lengths built-in and bounds checking
  • The '.' operator is always used, no more ->, :: operators
  • null and boolean/bool are keywords
  • All values are initialized before use
  • Can't use integers to govern if statements
  • Try Blocks can have a finally clause

Next


C# 3.0 in a Nutshell (April 2007) - by Joseph Albahari and Ben Albahari.









Add To Favorites
Email This Page

C# Comparative Contents
  1. C# and Java
  2. Properties
  3. Indexers
  4. Delegates
  5. Events
  6. Enums
  7. Collections and the Foreach Statement
  8. Structs
  9. Type Unification
  10. Operator Overloading
  11. Polymorphism
  12. Interfaces
  13. Versioning
  14. Parameter Modifiers
  15. Attributes
  16. Selection Statements
  17. Predefined Types
  18. Field Modifiers
  19. Jump Statements
  20. Assemblies, Namespaces & Access Levels
  21. Pointer Arithmetic
  22. Rectangular Arrays
  23. Constructors and Destructors
  24. Managed Execution Environments
  25. Libraries
  26. Interoperability
  27. Conclusion


Side Panel
Privacy Policy About Us Contact Us