# Programmeren in C Sharp
## Inleiding tot C# (C-Sharp)

De bedoeling van deze cursus is om inzicht te verwerven in C# met voorkennis van objectgeoriënteerd programmeren (zoals Java). Omdat C# niet veel afwijkt van deze, kan men hierdoor snel overgaan naar meer geavanceerde topics.
Een bekende versie van C-Sharp is Visual C# 2008 van Microsoft, dat van het .NET raamwerk gebruikmaakt. Componenten kunnen hierbij al tijdens het ontwerp visueel worden weergegeven.

## Verschillende variabelen

| Type | NET naam | Beschrijving |
| sbyte | System.SByte | 8-bit getal |
| byte | System.Byte | 8-bit getal (positief) |
| short | System.Int16 | 16-bit getal |
| ushort | System.UInt16 | 16-bit getal (positief) |
| int | System.Int32 | 32-bit getal |
| uint | System.UInt32 | 32-bit getal (positief) |
| long | System.Int64 | 64-bit getal |
| ulong | System.UInt64 | 64-bit getal (positief) |
| char | System.Char | 16-bit Unicode-teken |
| float | System.Single | 32-bit kommagetal |
| double | System.DOuble | 64-bit kommagetal |
| bool | System.Boolean | waar/onwaar-waarde |
| decimal | System.Decimal | zeer groot getal |
| object | System.Object | basis voor alle typen |
| string | System.String | tekst/reeks tekens |

## Vergelijk met Java en C++

* Overerving: een classe kan maar van 1 andere klasse overerven maar kan wel meerdere interfaces implementeren. Dit is net zoals bij Java, maar een verandering t.o.v. C++ waar men multiple inheritance kent en tevens geen interfaces.
* Arrays worden ArrayLists
* bool: er is geen conversie tussen bool en int zoals bij C++. Conversies moeten over het algemeen opgelost worden zoals bij Java door wrapper classes, dit zijn classes die op zich het type bool of int of ... bevatten maar tevens methods die de conversies verzorgen (is veiliger dan het typecasten bij C/C++).
* long: Dit type is nu 64 bit t.o.v. 32 bit bij C++.
* Struct: Dit is een value type terwijl een class een reference type is. Dit is een verschil met C++ waar een struct eigenlijk een public class voorstelt (een class waarvan alle parameters public zijn). Het verschil met Java is eenvoudiger: Java kent namelijk geen structs.
* delegate: Dit zijn type-safe function pointers.
* base en override:
* preprocessor directive: worden nu gebruikt voor conditionele compilaties; want er worden geen header files gebruikt in C#. Zie ook using.
* operators: Hier bestaan extra operators t.o.v. C++, namelijk de is en typeof, soortgelijke bestaan in Java.
* Main: wordt nu op een Java-stijl gebruikt, zoals de algemene structuur van het programma.
* pointers: ref en out worden nu gebruikt om parameters by reference door te geven. Unsafe wordt gebruikt om expliciet pointers door te geven.
* strings: in tegenstelling tot C++ waar er wel duizend en een soorten bestaan gebruikt C# de overkoepelende String cfr. java.
* foreach, in: laat toe om door arrays en collecties te itereren. Dit laat toe om deze makkelijker te doorlopen dan in C++ of Java waar men for-lussen nodig had en het einde ervan moest weten/zoeken.
* using:wordt gebruikt om naar andere namespaces te refereren zonder dat men telkens de volledige naam moet opgeven, cfr. Java (waar namespaces = packages)
* Destructor: net zoals bij Java is er automatic garbage collection die er voor zorgt dat men zich niets moet aantrekken van het opruimen van geheugen, dit in tegenstelling tot bij C++.
* Bit vs. byte code: C# en Java worden beide naar byte-code gecompileerd in tegenstelling tot C++ die naar machinetaal wordt omgezet. Dit zorgt ervoor dat C++ niet op elk platform kan draaien, maar wel dat het sneller werkt omdat het niet nog eens in runtime gecompileerd hoeft te worden.

## Externe links

* Pagina met tutorials van Microsoft
* C#-video's

## Referenties

* ↑ MicroSoft: Visual Studio 2008 Express Edition (vrij verkrijgbare variant), 20090513