[X] Einführung in C# .Net
-
hm naja Tutorial sag ich mal jain also ich will es nicht all zu sehr aufblasen, weil es quasi ein näher bringen der Sprache sein soll, um genaueres zu erklären ist der Artikel tatsächlich sonst so zu umfangreich. Wenn ihr meint dass das nicht Wert ist einen Artikel zu schreiben dann sagt es mir, oder ihr sagt mir wie ich es sonst machen könnte. Vielleicht mal noch was zu Typen um einen kleinen Eindruck zu geben wie ich es mir vorstelle:
2. Typen (Types)
Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.
Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)
Festwert-Typen:
Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:int i = 0; // oder bool b = false; // oder string s = '\0'
Referenz-Typen:
Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.zu den primitiven Datentypen gehören hier
primitiver Typ Long Form in Java Range sbyte System.SByte byte -128 .. 127 byte System.Byte --- 0..255 short System.Int16 short -32768 .. 32767 ushort System.UInt16 --- 0 .. 65535 int System.Int32 int -2147483648 .. 2147483647 uint System.UInt32 --- 0 .. 4294967295 long System.Int64 long -2[h]63[/h].. 2[h]63[/h]-1 ulong System.UInt64 --- 0 .. 2[h]64[/h]-1 float System.Single float ±1.5E-45 .. ±3.4E38(32 Bit) double System.Double double ±5E-324 .. ±1.7E308(64 Bit) decimal System.Decimal --- ±1E-28 .. ±7.9E28 (128 Bit) bool System.Boolean boolean true,false char System.Char char Unicodecharacter
jetzt würde noch was zur Kompatibilität unter den Typen kommen und noch ne Kleinigkeit über Enums, und damit wären dann die Types abgeschlossen.
was meint ihr??
-
Polofreak, du darfst die Bilder auch gerne bei uns hochladen.
Alle Typen sind kompatibel zu "Object".
Also von Object abgeleitet?
Referenztypen [...] und werden immer mit null initialisiert
Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?
zu den primitiven Datentypen gehören hier
Huch, Themenwechsel? Eben war es noch der Abschnitt Referenztypen - da fehlt wohl die Überschrift.
Insgesamt wäre es schön, da hier wohl mehr Leute C und C++ als Java können, wenn du zu beiden Sprachen vergleichen könntest.
Also noch eine Spalte in die Tabelle z.B.
-
Polofreak: So wie der Teil über Typen, das könnte ich mir sehr gut vorstellen. Ein Anreißen von C# ist sicherlich für viele hilfreich.
estartu_de schrieb:
Referenztypen [...] und werden immer mit null initialisiert
Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?
Ich nehme an die C# Referenzen ähneln den von Java.
-
GPC schrieb:
Polofreak: So wie der Teil über Typen, das könnte ich mir sehr gut vorstellen. Ein Anreißen von C# ist sicherlich für viele hilfreich.
estartu_de schrieb:
Referenztypen [...] und werden immer mit null initialisiert
Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?
Ich nehme an die C# Referenzen ähneln den von Java.
Haben die irgendwas mit z.B. int& in C++ zu tun? Da kann man ja blos kein NULL reinstecken, Referenz heißts ja.
Aber vielleicht wird das ja noch erklärt.Sonst war der Teil schon nett zu lesen.
-
Eher nicht.
In Java können Referenzen null sein:String s = "Hallo"; s = null;
In C++ eben nicht. Na ja, genaugenommen erwarten wir nur, dass sie etwas referenzieren, haben aber keine Möglichkeit nachzuschauen ob sie's wirklich tun...
-
Talla schrieb:
...Aber willst du wirklich nur C# als Sprache betrachten?...
joa siehe Postings wo ich Beispiel bringe.
estartu_de schrieb:
Polofreak, du darfst die Bilder auch gerne bei uns hochladen.
hm irgendwo hier im Forum stand des wo und wie ich das machen kann, und wie die Bildtags gehen. Oder?
estartu_de schrieb:
Alle Typen sind kompatibel zu "Object".
Also von Object abgeleitet?
Hm ich muss nochmal nachlesen ich glaub sie sind nicht von Object abgeleitet sind aber ohne expiciten Cast zuweisbar, beim zurückcasten muss man allerdings explizit casten.
estartu_de schrieb:
Referenztypen [...] und werden immer mit null initialisiert
Sind die sowas wie Zeiger in C? Aber was sind dann Pointer?
zu den primitiven Datentypen gehören hier
Huch, Themenwechsel? Eben war es noch der Abschnitt Referenztypen - da fehlt wohl die Überschrift.
joa rischtisch hier fehlt die Überschrift und mit den Refernztypen so wie GPC sagt sehr java ähnlich (wie so vieles )
estartu_de schrieb:
Insgesamt wäre es schön, da hier wohl mehr Leute C und C++ als Java können, wenn du zu beiden Sprachen vergleichen könntest.
Also noch eine Spalte in die Tabelle z.B.OK die Tabelle könnte man wohl mit C/C++ erweitern aber sonst ist es recht schwer weil es einfach ähnlicher zu java ist.
-
ich hab mir den Thread nochmal durchgelesen und wenn ich das richtig verstanden habe, dann fang ich mal an, ein wenig zu schreiben. Dann will ich nochmal kurz fragen, soll ich das hier weiter führen oder soll ich einen neuen Thread aufmachen? Tut mir leid wenn ich vielleicht noch den einen oder anderen Fehler mache, ist halt mein erster Artikel. *shy*
-
Polofreak schrieb:
estartu_de schrieb:
Polofreak, du darfst die Bilder auch gerne bei uns hochladen.
hm irgendwo hier im Forum stand des wo und wie ich das machen kann, und wie die Bildtags gehen. Oder?
Guck in die Anleitung, alleroberster Post: http://www.c-plusplus.net/forum/viewtopic-var-t-is-121848.html
Wenn du nur mit Java vergleichen willst ist das okay - du bist der Autor und es war nur ein Vorschlag von mir.
-
okay hab es gelesen weiß aber nicht ob ich hier weiter schreiben soll, oder ob ich nen neuen THread starten sollte, aber egal ich fang mal hier an und wenn ich einen neuen hätte anfangen sollen, dann mach ich das dann. Wenn ich dennoch Fehler machen sollte, dann bitte gleich sagen.
-
Einführung in C# .Net:
1.Übersicht
2.Typen
3.Ausdrücke (Expressions)
4.Deklarationen
5.Anweisungen(Statements)
6.Klassen und Strukturen1. Übersicht:
In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.
C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neuÄhnlichkeiten zu Java:
•Objectorientierung (einfach Vererbung)
•Interfaces
•Exceptions
•Threads
•Namespaces (wie Packages)
•Garbage Collection
•Reflection
•dynamisches Code-loading
•...Ähnlichkeiten zu C++:
•überladen (von Operator)
•Pointer Arithmetic in unsicherem (unsafe) Code
•syntaktische Detailswirklich neu:
•Referenz und output Parameter
•Objekte auf dem Stack (structs)
•Rectangular Arrays
•Enumerationen
•Unified type system
•goto
•VersionierungSyntaktische Schönheiten:
•Delegates
•Indexers
•Operator overloading
•foreach Statements
•Boxing/unboxing
•Attribute
•...2. Typen (Types)
Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.
Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)
Festwert-Typen:
Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:int i = 0; // oder bool b = false; // oder string s = '\0'
Referenz-Typen:
Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.Primitive Datentypen:
zu den primitiven Datentypen gehörenprimitiver Typ Long Form in Java Range sbyte System.SByte byte -128 .. 127 byte System.Byte --- 0..255 short System.Int16 short -32768 .. 32767 ushort System.UInt16 --- 0 .. 65535 int System.Int32 int -2147483648 .. 2147483647 uint System.UInt32 --- 0 .. 4294967295 long System.Int64 long -2[h]63[/h].. 2[h]63[/h]-1 ulong System.UInt64 --- 0 .. 2[h]64[/h]-1 float System.Single float ±1.5E-45 .. ±3.4E38(32 Bit) double System.Double double ±5E-324 .. ±1.7E308(64 Bit) decimal System.Decimal --- ±1E-28 .. ±7.9E28 (128 Bit) bool System.Boolean boolean true,false char System.Char char Unicodecharacter
TODO: Kompatibilität unter den Typen
Enums
Tabelle mit C/C++ erweiternheute abend gehts weiter
-
Polofreak schrieb:
okay hab es gelesen weiß aber nicht ob ich hier weiter schreiben soll, oder ob ich nen neuen THread starten sollte, aber egal ich fang mal hier an und wenn ich einen neuen hätte anfangen sollen, dann mach ich das dann. Wenn ich dennoch Fehler machen sollte, dann bitte gleich sagen.
Bitte hier weiterschreiben, bis der Artikel veröffentlichungsfertig ist.
-
ok ich schreib heute abend wieder ein wenig danke für deinen support während meines ersten Artikels.
-
Einführung in C# .Net:
1.Übersicht
2.Typen
3.Ausdrücke (Expressions)
4.Deklarationen
5.Anweisungen(Statements)
6.Klassen und Strukturen1. Übersicht:
In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.
C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neuÄhnlichkeiten zu Java:
•Objectorientierung (einfach Vererbung)
•Interfaces
•Exceptions
•Threads
•Namespaces (wie Packages)
•Garbage Collection
•Reflection
•dynamisches Code-loading
•...Ähnlichkeiten zu C++:
•überladen (von Operator)
•Pointer Arithmetic in unsicherem (unsafe) Code
•syntaktische Detailswirklich neu:
•Referenz und output Parameter
•Objekte auf dem Stack (structs)
•Rectangular Arrays
•Enumerationen
•Unified type system
•goto
•VersionierungSyntaktische Schönheiten:
•Delegates
•Indexers
•Operator overloading
•foreach Statements
•Boxing/unboxing
•Attribute
•...2. Typen (Types)
Primitive Datentypen:
zu den primitiven Datentypen gehörenprimitiver Typ Long Form in Java Range sbyte System.SByte byte -128 .. 127 byte System.Byte --- 0..255 short System.Int16 short -32768 .. 32767 ushort System.UInt16 --- 0 .. 65535 int System.Int32 int -2147483648 .. 2147483647 uint System.UInt32 --- 0 .. 4294967295 long System.Int64 long -2[h]63[/h].. 2[h]63[/h]-1 ulong System.UInt64 --- 0 .. 2[h]64[/h]-1 float System.Single float ±1.5E-45 .. ±3.4E38(32 Bit) double System.Double double ±5E-324 .. ±1.7E308(64 Bit) decimal System.Decimal --- ±1E-28 .. ±7.9E28 (128 Bit) bool System.Boolean boolean true,false char System.Char char Unicodecharacter
Kompatibilität unter den Typen
Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.
Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)
Festwert-Typen:
Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:int n = 0; // oder bool b = false; // oder string s = '\0' //z.B.: int i = 99; int j = i;
Referenz-Typen:
Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.string s = "cool"; string s1 = s;
TODO:
Tabelle mit C/C++ erweiternheute leider nicht all zu viel geschafft, vielleicht wirds nächstmal wieder mehr
-
hatte in letzter Zeit viel zu tun mit einem kleinen Projekt zu Netzwerkprogrammierung in C# .Net, deshalb bin ich kaum zum Artikel gekomen. Wollte einfach nur melden dass ich es nicht vergessen habe, sondern dass ich momentan einfach nicht dazu gekommen bin. Ich denke das ein weiterer TEil diese Woche fertig wird. aber steter Tropfen hölt den Stein.
bis demnächst
-
Einführung in C# .Net:
1.Übersicht
2.Typen
3.Enumerationen (Enums)
4.Boxing & Unboxing
5.Overflow Checks
6.Deklarationen
7.Anweisungen(Statements)
8.Klassen und Strukturen1. Übersicht:
In diesem Artikel möchte ich eine kleine Einführung in C# .Net geben und kurz und bündig erklären was C# .Net ist, Besonderheiten und Ähnlichkeiten zu anderen Sprachen sind auch mit ein Thema.
C# .Net ist eine Programmiersprache die sehr ähnlich ist wie Java
ca 70% sind wie in Java, 10% C++, 5% Visual Basic und nur 15% sind ganz neuÄhnlichkeiten zu Java:
•Objectorientierung (einfach Vererbung)
•Interfaces
•Exceptions
•Threads
•Namespaces (wie Packages)
•Garbage Collection
•Reflection
•dynamisches Code-loading
•...Ähnlichkeiten zu C++:
•überladen (von Operator)
•Pointer Arithmetic in unsicherem (unsafe) Code
•syntaktische Detailswirklich neu:
•Referenz und output Parameter
•Objekte auf dem Stack (structs)
•Rectangular Arrays
•Enumerationen
•Unified type system
•goto
•VersionierungSyntaktische Schönheiten:
•Delegates
•Indexers
•Operator overloading
•foreach Statements
•Boxing/unboxing
•Attribute
•...2. Typen (Types)
Primitive Datentypen:
zu den primitiven Datentypen gehörenprimitiver Typ Long Form in Java Range sbyte System.SByte byte -128 .. 127 byte System.Byte --- 0..255 short System.Int16 short -32768 .. 32767 ushort System.UInt16 --- 0 .. 65535 int System.Int32 int -2147483648 .. 2147483647 uint System.UInt32 --- 0 .. 4294967295 long System.Int64 long -2[h]63[/h].. 2[h]63[/h]-1 ulong System.UInt64 --- 0 .. 2[h]64[/h]-1 float System.Single float ±1.5E-45 .. ±3.4E38(32 Bit) double System.Double double ±5E-324 .. ±1.7E308(64 Bit) decimal System.Decimal --- ±1E-28 .. ±7.9E28 (128 Bit) bool System.Boolean boolean true,false char System.Char char Unicodecharacter
Kompatibilität unter den Typen
Alle Typen sind kompatibel zu "Object". Ebenso können alle Typen Variablen vom Typ Object zugewiesen werden und es sind alle Objekt-Operationen auf sie anwendbar.
Unterschied zwischen Festwert-Typen(value Types) und Referenz-Typen (reference-Types)
Festwert-Typen:
Festwert-Typen enthalten Werte die in ihnen gespeichert werden, sie werden auf dem Stack gespeichert. Bei einer Zuweisung wird der Wert kopiert. Die Initialisierung von Festwerttypen kann wie folgt aussehen:int n = 0; // oder bool b = false; // oder string s = '\0' //z.B.: int i = 99; int j = i;
Referenz-Typen:
Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.string s = "cool"; string s1 = s;
3. Enumerationen
Liste von Namenhaften Konstanten deren Deklaration direkt im Namespace geschieht.
Beispiel:
enum Farbe{rot, gelb, blau, gruen, lila} // hier sind die Variablen automatisch 0, 1, 2... enum WochenTage_mit_d{dienstag=2,donnerstag=4} enum WochenTage_mit_d:byte{dienstag=2,donnerstag=4} //Verwendung: Farbe c = Farbe.blau; WochenTage_mit_d WTmd = WochenTage_mit_d.dienstag | WochenTage_mit_d.donnerstag; if ((WochenTage_mit_d.dienstag & WTmd) != 0) Console.WriteLine("Wochentag ist mit D!");
Was kann man mit Enumerationen machen?
Die Operatoren sind:
Vergleichsoperatoren ==; <=; >=; <; >if(c == Farbe.blau)//... if(c > Farbe.gelb && c < Farbe.lila)//... //weitere sind +; -; ++; --; c = c+2; c--; //oder gleich c++; // dann noch &; |; ~ if ((c & Farbe.rot) == 0)// ... c = c | Farbe.blau; c = ~ Farbe.rot;
Der Compiler prüft nicht ob der Enum-Typ einen gültigen Wert annimt.
Enumerationen können Integern nur nach explizitem Cast zugewiesen werden!
Enumerationen erben vom Typ Object somit: Equals, ToString, ...
Die Klasse System.Enum unterstützt Operationen wie GetName, Format, GetValues, ...??. Felder (Arrays)
Eindimmensionale Arrays:
int[] a = new int[3];
Mehrdimensionale Felder:
"ausgefranzte":int[][] ausgefr = new int[5][]; ausgefr[0] = new int[3]; a[1] = new int[4];
solche Felder sind nicht sehr schnell und brauchen mehr Speicher als
rechteckige Felder:int[,] re = new int[2, 3];
hier sind die Zugriffe effizienter und die Felder sind kompakter
4. Boxing und Unboxing
Boxing ist das Stichwort zur Umwandlung von (Structs, Enums oder Integern ...) in ein Objekt. Objekten können somit andere Typen zugewiesen werden. Das könnte dann so aussehen:
int nZahl=5; object obj = nZahl;
Unboxing ist geau das Gegenteil; aus einem Objekt ein Werttyp machen. Das sieht dann so aus:
int Zahl_aus_obj = (int)obj;
und schon hat man aus dem Objekt ein Integer gemacht.
5.Overflow Checks
Standardmäßig werden Overflows nicht abgefangen, somit kann es zu unerwünschtem Verhalten kommen. Da es aber auch sein kann, dass man mit Overflows arbeitet (Zufallszahlen) kann man manuell Overflows abfangen.int grosse_Zahl = 999999; grosse_Zahl *= grosse_Zahl; // ergibt nicht mathematisch richtiges Ergebnis aber auch keinen Fehler // wenn man es abfangen will sollte man es besser so machen: grosse_Zahl = checked(grosse_Zahl*grosse_Zahl); //wirft OverflowException
man kann aber nicht nur einzelne Operationen mit checked prüfen, man kann auch ganze Blöcke prüfen
checked{ grosse_Zahl *= grosse_Zahl; } //wirft ebenso Overflow Exception
Wenn man allerdings das komplette Assemblie geprüft ausführen will kann man checked als Kompilerfunktion angeben.
csc /checkedTest.cs
-
Wird ja langsam
Polofreak schrieb:
Einführung in C# .Net:
Referenz-Typen:
Im Gegenteil zu Festwert-Typen werden in Referenztypen, wie der Name schon sagt, Referenzen zu Objekten gespeichert, und bei Zuweisungen wird ebenfalls die Referenz kopiert; keine Werte. Referenzen werden auch nicht auf dem Stack sodern auf dem Heap gespeichert und werden immer mit null initialisiert.string s = "cool"; string s1 = s;
Erklärung soweit richtig, aber Beispiel extrem ungünstig gewählt weil bei string so einiges anders läuft als bei normalen Objekten
string x = "cool"; string x2 = x; MessageBox.Show(x2); x = "Hallo"; MessageBox.Show(x2);
Was gibts als Ausgabe? Richtig, 2x cool Liegt an dem überladen = Operator bei String. Genauso wie == bei String die Werte statt die Referenz vergleicht wie bei anderen Objekten. Es ist einfach der natürlichen Benutzungsweise von string als Wert angepasst. Nimm lieber irgend nen beliebiges anderes Objekt.
-
Nabend,
bissle pingelig, aber was solls ;).
Bei 'Kompatibilität unter den Typen' die rote Unterstreichung (Word Rechtschreib-
pruefung? ) wegmachen. Die stoert doch sehr ;).mfg
v R
-
Hat nichts mit pingelig zutun, sondern ist einfach Prinzip!
-
Was ich noch vergessen hatte:
Der Name "Festwerttyp" ist meiner Meinung nach auch blöd gewählt. Im englischen heißen die value types, also sollte man auch im Deutschen einfach nur Wertetypen sagen, weil mit fest haben die nichts zu tun. Festwert hört sich für mich eher nach Konstanten an.
Und dann ist mir eben aufgefallen das du string ja bei beiden Arten von Typen als Beispiel verwendest. Einmal die Zuweisung wie bei einem Wertetyp und dann das Verhalten wie von Referenztypen, das ja aber nicht ganz funktioniert bei strings Vielleicht sollte man das ein wenig klarstellen, das strings zwar wirklich Referenztypen sind, aber sich eher wie Wertetypen verhalten.
-
Wow bin es gar nicht gewohnt soviel feedback zu bekommen, aber ich find es Klasse, so weiß ich 1. dass das auch jemand liest, und zweitens kann es so nur besser werden, also als aller erstes mal vielen Dank fürs feedback. So nun zum Feedback selber Das mit den roten Wellen Linien ist mir auch schon aufgefallen, werde ich auf jeden Fall noch korrigieren, ich glaub ich muss es aber nochmal neu schreiben, drum mach ich es jetzt grad nicht auf die Schnelle.
Das mit den Festwerttypen hasste schon recht, hab glaub auch gelegentlich Werttypen geschrieben werde ich gleich noch überarbeiten. Das mit dem String muss ich mir nochmal in Ruhe Anschauen, mit dem was du da geschrieben hast. Wenn ich es nochmal durchgegangen bín melde ich mich nochmal.