<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>c# Archive - Gernardt.net</title>
	<atom:link href="https://gernardt.net/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>https://gernardt.net/tag/c/</link>
	<description></description>
	<lastBuildDate>Thu, 05 Jun 2025 10:13:37 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://gernardt.net/wp-content/uploads/2026/03/favicon-1-150x150.png</url>
	<title>c# Archive - Gernardt.net</title>
	<link>https://gernardt.net/tag/c/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Grundlagen Vererbung: Abstrakte Klassen</title>
		<link>https://gernardt.net/grundlagen-vererbung-abstrakte-klassen/</link>
					<comments>https://gernardt.net/grundlagen-vererbung-abstrakte-klassen/#respond</comments>
		
		<dc:creator><![CDATA[Stephan Gernardt]]></dc:creator>
		<pubDate>Thu, 05 Jun 2025 10:13:37 +0000</pubDate>
				<category><![CDATA[Beispielcodes & Erklärungen]]></category>
		<category><![CDATA[abstrakt]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[vererbung]]></category>
		<guid isPermaLink="false">https://gernardt.net/?p=781</guid>

					<description><![CDATA[<p>Abstrakte Klassen bilden die Grundlage für abgeleitete Klassen und stellen ein zentrales Konzept in der objektorientierten Programmierung (OOP) dar. Eine [&#8230;]</p>
<p>Der Beitrag <a href="https://gernardt.net/grundlagen-vererbung-abstrakte-klassen/">Grundlagen Vererbung: Abstrakte Klassen</a> erschien zuerst auf <a href="https://gernardt.net">Gernardt.net</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Abstrakte Klassen bilden die Grundlage für abgeleitete Klassen und stellen ein zentrales Konzept in der objektorientierten Programmierung (OOP) dar. Eine abstrakte Klasse dient als Vorlage, die abstrakte Methoden, Funktionen und Attribute bereitstellt, welche von den abgeleiteten Klassen (Child-Klassen) zwingend implementiert werden müssen.</p>



<ul class="wp-block-list">
<li>Abstrakte Klassen lassen sich nicht direkt instanziieren.</li>



<li>Abstrakte Klassen können sowohl abstrakte als auch nicht-abstrakte Methoden, Funktionen und Attribute umfassen.</li>



<li>Ermöglicht die Wiederverwendung von Quellcode.</li>



<li>Dient als Basis für abgeleitete Klassen.</li>



<li>Abstrakte Klassen dienen dazu, die Implementierung spezifischer Methoden, Funktionen und Attribute in abgeleiteten Klassen verbindlich vorzuschreiben.</li>



<li>Abstrakte Klassen ermöglichen eine klare Struktur im Code, indem sie die direkte Instanziierung verhindern.</li>



<li>Methoden, Funktionen und Attribute der abstrakten Klasse werden in den abgeleiteten Klassen gemeinsam genutzt, was die Wartbarkeit und Struktur des Codes erheblich vereinfacht.</li>
</ul>



<p class="wp-block-paragraph">Im ersten Teil der <a href="https://gernardt.net/763/" data-type="post" data-id="763">Grundlagen Verebung</a> haben wir ein Beispielprojekt erstellt, das als abstrakte Klasse die Attribute, Methoden und Funktionen eines Fahrzeugs bereitstellt. Abgeleitete (Childs) sind &#8222;Auto&#8220;, &#8222;Motorrad&#8220; und &#8222;LKW&#8220;. In diesem Beispielprojekt wird kurz erläutert, wie Methoden, Funktionen oder Attribute überladen werden können, wie etwa im Beispiel des Motorrads, das nicht rück fahren kann und bei dem die Methode &#8222;FahrenRueckwaerts&#8220; überladen wurde. Sowie die Möglichkeit, je nach Fahrzeugtyp zusätzliche Methoden, Funktionen und Attribute hinzuzufügen (zum Beispiel bei einem LKW Kippen der Fahrerkabine). <br>Wer aufrichtig liest wird am Punkt 2 hängen geblieben sein &#8222;Abstrakte Klassen können sowohl abstrakte als auch nicht-abstrakte Methoden, Funktionen und Attribute umfassen&#8220;. Im Beispielcode sind in der Abstrakten Klasse &#8222;Fahrzeug&#8220; nur nicht-abstrakte Methoden und Attribute verwendet worden. Was sind abstrakte Methoden?</p>



<h2 class="wp-block-heading">Abstrakte Methoden (auch Funktionen und Attribute)</h2>



<ul class="wp-block-list">
<li>Abstrakte Methoden werden nicht in der Basisklasse implementiert, nur die Methodensignatur ist vorhanden.</li>



<li>Abstrakte Methoden müssen mittels Schlüsselwort override in der abgeleiteten Klasse (Child) überschrieben werden.</li>



<li>Abstrakte Methoden können nur in abstrakte Klassen enthalten sein.</li>



<li>Abstrakte Methoden müssen in der abgeleiteten Klasse (Child) implementiert werden.</li>
</ul>



<p class="wp-block-paragraph">In diesem Teil der Vererbung, werden wir die Klasse Fahrzeug um eine Funktion erweitern. Tanken! Jedes Fahrzeug benötigt Energie, egal ob Wasserstoff, Benzin/Diesel, oder geladen werden muss. Jeder dieser Vorgänge dauert seine Zeit und wird etwas anders ausgeführt und ist nicht bei jedem Fahrzeug gleich. Daher verwende ich mal die Funktion Tanken als Beispiel für abstrakte Funktionen.<br>Zuerst wird in der Abstrakte Klasse die Methoden Signatur festgelegt:</p>



<pre class="wp-block-code"><code>/// &lt;summary>
/// Tanken
/// &lt;/summary>
/// &lt;returns>Bei Erfolg true&lt;/returns>
/// &lt;remarks>
/// Fahrzeuge müssen Tanken.
/// Ob Fossil oder regenerative Stoffe, ob Aufladen oder Wasserstoff, etc.
/// Bei abstrakten Methoden, Funktionen oder Attributen wird kein Code hinterlegt, lediglich die Signatur
/// &lt;/remarks>
public abstract bool Tanken();</code></pre>



<p class="wp-block-paragraph">Ab sofort ist es obligatorisch, die Funktion Tanken in allen abgeleiteten Klassen zu implementieren. Dadurch kann ich als Programmierer sicherstellen, dass bei neuen Fahrzeugen der oder die nächste Mitarbeiter:in die Funktion Tanken korrekt in neues Fahrzeug integriert.<br>Änderungen in den aktuellen abgeleiteten Klassen (als Beispiel nur die Änderung in der Klasse Auto) :</p>



<pre class="wp-block-code"><code>/// &lt;summary>
/// Auto tanken
/// &lt;/summary>
/// &lt;returns>Bei Erfolg true&lt;/returns>
public override bool Tanken()
{
    Console.WriteLine("Auto links neben der Tanksäule parken.");
    Console.WriteLine("Fahrer steigt aus.");
    Console.WriteLine("Fahrer öffnet Tankdeckel.");
    Console.WriteLine("Wagen wird mit Benzin getankt");
    Console.WriteLine("Fahrer schließt Tankdeckel.");
    Console.WriteLine("Fahrer bezahlt.");
    return true;
}</code></pre>



<p class="wp-block-paragraph">Eine Funktion Tanken muss nun in jeder abgeleiteten Klasse von &#8222;Fahrzeug&#8220; implementiert werden.<br><a href="https://gernardt.net/wp-content/uploads/2025/06/Grundlagen-Vererbung-Part-02.zip">Download bearbeiteter Code</a> (Visual Studio).</p>



<p class="wp-block-paragraph">Der Vorteil abstrakter Methoden besteht darin, dass sie eine klare Architektur erzwingen, während die einzelnen abgeleiteten Objekte die Methode entsprechend ihren Bedürfnissen implementieren können. Da die Methoden und Funktionen an die Anforderungen der Objekte angepasst sind, erfolgt auch die Wartung der Methoden und Funktionen innerhalb der abgeleiteten Klassen.</p>
<p>Der Beitrag <a href="https://gernardt.net/grundlagen-vererbung-abstrakte-klassen/">Grundlagen Vererbung: Abstrakte Klassen</a> erschien zuerst auf <a href="https://gernardt.net">Gernardt.net</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gernardt.net/grundlagen-vererbung-abstrakte-klassen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Datentypen</title>
		<link>https://gernardt.net/datentypen/</link>
					<comments>https://gernardt.net/datentypen/#comments</comments>
		
		<dc:creator><![CDATA[Stephan Gernardt]]></dc:creator>
		<pubDate>Fri, 09 Aug 2024 17:34:44 +0000</pubDate>
				<category><![CDATA[Ausbildung als Fachinformatiker Anwendungsentwickler/in]]></category>
		<category><![CDATA[Beispielcodes & Erklärungen]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[datentypen]]></category>
		<category><![CDATA[double]]></category>
		<category><![CDATA[int]]></category>
		<category><![CDATA[integer]]></category>
		<category><![CDATA[short]]></category>
		<category><![CDATA[string]]></category>
		<guid isPermaLink="false">https://gernardt.net/?p=349</guid>

					<description><![CDATA[<p>Variablen und Datentypen sind grundlegende Konzepte in der Programmierung, die eng miteinander verbunden sind. Hier ist eine kurze Erklärung: Variablen&#160;sind [&#8230;]</p>
<p>Der Beitrag <a href="https://gernardt.net/datentypen/">Datentypen</a> erschien zuerst auf <a href="https://gernardt.net">Gernardt.net</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Variablen und Datentypen sind grundlegende Konzepte in der Programmierung, die eng miteinander verbunden sind. Hier ist eine kurze Erklärung:</p>



<p class="wp-block-paragraph">Variablen&nbsp;sind wie Container, die Daten speichern. Sie haben einen Namen und können während der Laufzeit des Programms geändert werden.</p>



<ul class="wp-block-list">
<li>In Programmiersprachen werden Wertebereiche und darauf definierte Operationen zu Datentypen zusammengefasst.</li>



<li>Elementare Datentypen, sind Standarddatentypen (also in allen Sprachen verfügbar) sind Ganzzahlen, Kommazahlen, Zeichenketten und boolesche Werte.</li>



<li>Es gibt auch zusammengesetzte Datentypen wie benutzerdefinierte Klassen, Arrays und Listen.</li>
</ul>



<p class="wp-block-paragraph">Dabei ist zu bedenken das wir zwischen Werttypen und Verweistypen unterscheiden. </p>



<p class="wp-block-paragraph"><strong>Verweistypen</strong></p>



<p class="wp-block-paragraph">Verweistypen sind eine Art von Datentypen in Programmiersprachen wie C#, die Verweise auf Daten speichern, anstatt die Daten selbst zu enthalten. Hier sind einige wichtige Punkte zu Verweistypen:</p>



<ul class="wp-block-list">
<li>Variablen von Verweistypen speichern die Verweise auf Ihre Daten (z.B. Objekte).</li>



<li>Beispiele für Verweistypen sind Strings, Array (auch wenn die einzelnen Elemente Werttypen sind), Klassentypen und Delegaten.</li>



<li>Verweistypen können den Wert &#8222;null&#8220;(ohne &#8222;&#8220;) annehmen</li>
</ul>



<p class="wp-block-paragraph">Verweistypen sind z.B. Strings, Objekte, interface, delegate oder record.</p>



<p class="wp-block-paragraph">Objekte können Array, Auflistungen oder Klasseninstanzen sein. So enthält z.B. eine Variable eines Klassenobjektes ein Verweis auf der Adresse des Objektes im verwalteten Heap. Dadurch sind Verweistypen besonders nützlich wenn es darum geht. komplexe Datenstrukturen zu erstellen und manipulieren.</p>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>Was ist ein HEAP</summary>
<p class="wp-block-paragraph">Ein Heap (auf deutsch Haufen oder Halde) ist eine Datenstruktur, welche besonders für das Sortieren oder als Prioritätswarteschlange eignet. Zudem ermöglicht ein Heap das Sammeln und Laden von Informationen sowie für eine dynamische und flexible Speicher Verwaltung. Ein Heap besitzt eine Hierarchische Struktur, arbeitet also nicht nach dem LIFO-Prinzip (Last In First Out) wie ein STACK. Entsprechend werden Heaps oft als Baumstruktur oder Array dargestellt.</p>



<p class="wp-block-paragraph">Bei c# ist ein String ein Verweistyp, intern wird der Text in C# als sequenzielle, Schreibgeschütze Sammlung von Char Objekten gespeichert. Anders als in anderen Sprachen (wie z.B. C und C++), wird bei C# kein abschließendes Nullzeichen am ende des String gesetzt und kann beliebig viele Nullzeichen beinhalten (&#8222;\0&#8220;).</p>
</details>



<p class="wp-block-paragraph"><strong>Werttypen</strong></p>



<ul class="wp-block-list">
<li>Variablen von Werttypen enthalten Ihre Werte direkt.</li>



<li>Beispiele von Werttypen sind numerische Datentypen, Boolean, Char, Date, Strukturen (auch wenn ihre Member Verweistypen sind) sowie Enumerationen.</li>
</ul>



<p class="wp-block-paragraph">Ich nenne hier mal einige Datentypen (Werttypen) der Programmiersprache C#:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>bool</td><td>1 byte</td><td>true(1) oder false(0)</td></tr><tr><td>byte</td><td>1 byte</td><td>0-255</td></tr><tr><td>char</td><td>2 byte</td><td>Ein Unicodezeichen</td></tr><tr><td>decimal</td><td>16 byte</td><td>-7,9*10<sup>28</sup> bis 7,9*10<sup>28</sup></td></tr><tr><td>double</td><td>8 byte</td><td>-1,7976931348232*10<sup>30</sup> &#8211; 1,7976931348232*10<sup>30</sup>  </td></tr><tr><td>float</td><td>4 byte</td><td>-3,402823*10<sup>38</sup> &#8211; 3,402823*10<sup>38</sup> </td></tr><tr><td>int</td><td>4 byte</td><td>-2.147.483.648 &#8211; 2.147.483.647</td></tr><tr><td>long</td><td>8 byte</td><td>-9.223.372.036.854.775.808 &#8211; 9.223.372.036.854.775.8</td></tr><tr><td>sbyte</td><td>1 byte</td><td>-128 &#8211; 127</td></tr><tr><td>short</td><td>2 byte</td><td>-32.768 &#8211; 32.767</td></tr><tr><td>uint</td><td>4 byte</td><td>0 &#8211; 4.294.967.295</td></tr><tr><td>ulong</td><td>8 byte</td><td>0 &#8211; 18.446.744.073.709.551.615</td></tr><tr><td>ushort</td><td>2 byte</td><td>0 &#8211; 65.535</td></tr></tbody></table><figcaption class="wp-element-caption">Tabelle Wertetypen</figcaption></figure>
<p>Der Beitrag <a href="https://gernardt.net/datentypen/">Datentypen</a> erschien zuerst auf <a href="https://gernardt.net">Gernardt.net</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gernardt.net/datentypen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
