C# (see section on naming, pronunciation) is an object-oriented programming language developed by Microsoft as part of their .NET initiative. Microsoft based C# on C++ and Java. C# was designed as a language that would provide a balance of C++ with rapid development, Visual Basic, Delphi, and Java.
C# is, in some sense, the programming language which most directly reflects the underlying .NET Framework on which all .NET programs run, and it depends strongly on this framework; there is no such thing as an unmanaged C# program. Its primitive datatypes are objects of the corresponding .NET types, it is garbage-collected, and many of its abstractions, such as its classes, interfaces, delegates, exceptions, and so on, expose explicit features of the .NET runtime.
Compared to C and C++, the language is restricted or enhanced in a number of ways, including but not limited to the following:
* C# is tied to the Windows platform (end user must have .Net framework installed). * The Managed DirectX classes were designed for use in C# and make using DX easy. * Raw pointers and unchecked arithmetic can only be used in a special unsafe mode. Most object access is done through safe references, which cannot be made invalid, and most arithmetic is checked for overflow. * Objects cannot be explicitly freed, but instead are garbage collected when no more references to them exist. * As in Java, only single inheritance is available, but a class can implement any number of abstract interfaces. This functions mainly to simplify the runtime's implementation. * C# is more typesafe than C++. The only implicit conversions by default are safe conversions, such as widening of integers and conversion from a derived type to a base type. There are no implicit conversions between booleans and integers, between enumeration members and integers, no void pointers (although references to Object are similar), and any user-defined implicit conversion must be explicitly marked as such, unlike C++'s copy constructors. * Syntax for array declaration is different ("int a = new int" instead of "int a"). * C# has no templates, but C# 2.0 has generics, and these support some features not supported by C++ templates such as type constraints on generic parameters. On the other hand, expressions cannot be used as generic parameters as in C++ templates. * Full reflection is available.
Although C# is often considered similar to Java, there are also a number of notable differences with this language as well, including the following:
* Java does not have operator overloading. * Java does not have an unsafe mode permitting native pointer manipulation and unchecked arithmetic. * Java has checked exceptions, while C# exceptions are unchecked, as in C++. * C# has a goto control flow construct not found in Java. * Java uses Javadoc-syntax comments to automatically generate documentation from source files. C# uses XML-based comments for this purpose. * C# supports checked arithmetic. * C# supports indexers. * C# greatly simplifies event-driven programming through language constructs like events and delegates. * C# supports structures in addition to classes. Structures, known in the .NET Framework as value types, are comparable to C structures, in that they need not be heap-allocated and can limit the number of dereferences needed to access data; see value type. * C# has a unified object model for value-types and objects (There is no difference between "int" and "System.Int32").
C# is of questionable use for roguelike development:
- It is a Rapid Application Development language
- It is platform dependant
- It forces the use of an object-oriented programming style
- It has great tools for designing user interfaces
- It can be used as a scripting language
- It has a console mode, but ASCII roguelikes will probably need to use Curses
- Requires the .Net framework (23 MB) to be installed to run
- No easy to use tool to generate an installer program to validate prerequisite packages exist on client.
As a result roguelikes written in C# are uncommon. At the moment there is just one: