PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Einstieg - Unterschied der Versionen 2.0 und 3.0


EGG-Beater
2008-02-20, 21:25:37
Hallo.

Die Semesterferien stehen an und ich habe mir dafür vorgenommen, mich mit C# zu beschäftigen. Dabei stellt sich mir allerdings noch eine Frage.
Ich weiß nicht viel über die Sprache und die damit verbundenen Technologien (z.B. .NET) - ich weiß eigentlich fast nur, dass es eine neue Revision (C# 3.0) gibt.

Welche Auswirkung auf einen Neueinstieg hat die neue Version 3.0 von C#?
Interessieren mich, als bisher Unbedarften, die damit verbundenen Änderungen, wenn es mir darum geht, mich in die Sprache einzuarbeiten?

Ich frage vor allem, weil ich mich dazu gern auch mit einem Buch auseinandersetzen würde. Viele der im Moment erhältlichen Bücher zu C# stammen allerdings noch aus der Zeit der Version 2.0 - zur neuen Version ist die Auswahl anscheinend noch nicht so groß.
Darum ist es interessant, ob dieser Unterschied nun für den Anfang eine Rolle spielt bzw. wie groß diese Rolle sein könnte.

Über Meinungen oder Tipps dazu würde ich mich sehr freuen.

gr@fz@hL
2008-02-20, 21:35:44
C# 3.0 erweitert die Sprache ja lediglich um zusätzliche Features (siehe z.B. hier http://www.zdnet.de/builder/program/0,39023551,39150815,00.htm), so dass du getrost mit einem Buch anfangen kannst, dass sich mit Version 2.0 befasst.

][immy
2008-02-20, 21:41:36
Hallo.

Die Semesterferien stehen an und ich habe mir dafür vorgenommen, mich mit C# zu beschäftigen. Dabei stellt sich mir allerdings noch eine Frage.
Ich weiß nicht viel über die Sprache und die damit verbundenen Technologien (z.B. .NET) - ich weiß eigentlich fast nur, dass es eine neue Revision (C# 3.0) gibt.

Welche Auswirkung auf einen Neueinstieg hat die neue Version 3.0 von C#?
Interessieren mich, als bisher Unbedarften, die damit verbundenen Änderungen, wenn es mir darum geht, mich in die Sprache einzuarbeiten?

Ich frage vor allem, weil ich mich dazu gern auch mit einem Buch auseinandersetzen würde. Viele der im Moment erhältlichen Bücher zu C# stammen allerdings noch aus der Zeit der Version 2.0 - zur neuen Version ist die Auswahl anscheinend noch nicht so groß.
Darum ist es interessant, ob dieser Unterschied nun für den Anfang eine Rolle spielt bzw. wie groß diese Rolle sein könnte.

Über Meinungen oder Tipps dazu würde ich mich sehr freuen.

die neue version macht nix anders, es gibt nur neue ergänzende konstrukte.

z.B. hat man nun die Möglichkeit "var" zu nutzen (ähnlich wie beim javascript) anstatt einen Typen. Aber nur wenn bei der ersten zuweisung klar ist, von welchem Typ das Objekt sein wird. Also typsicher ist es nach wie vor, nur soll es wohl für den programmierer einfacher sein anstatt einen langen namen var zu nutzen. ehrlich gesagt find ich das ziemlich unübersichtlich da man sich den code dann wieder genauer anschauen muss um zu wissen welcher typ hinter der variable steckt. der einmal zugewiesene typ lässt sich dann auch nicht mehr zur laufzeit ändern. also z.B. einmal string immer string und nicht plötzlich irgendwas anderes.

Linq ist ganz neu und recht interssant. dies ermöglicht dir z.B. SQL-ähnliche abfragen auf objektsammlungen oder auch einen etwas einfacheren zugriff auf xml-objekte.

es gibt noch viele kleinere und größere neuerungen, aber das ganze kannst du bei einem neueinstieg sowieso vergessen. erstmal mit den grundlagen beschäftigen anschließend ans eingemachte. die grundlagen sind immernoch die gleichen.

wichtig ist einfach, bleibt typsicher, nutze generics anstatt Arraylisten und wunder dich nicht über den Speicherverbrauch, der steigt schnell rasant an aber pendelt sich dann meist irgendwo ein.

Monger
2008-02-20, 21:45:20
Die Änderungen sind wohl an der Basis wirklich nicht dramatisch. LINQ ist wohl mit Abstand die massivste Änderung, und ich denke man sollte erstmal die Grundlagen der Sprache im Griff haben, bevor man sich an sowas wagt. Bin auch erst seit kurzem an C# dran, und bin noch mehr als genug beschäftigt, die normalen Sprachfeatures auf die Reihe zu kriegen...


An dem Framework an sich gab es natürlich diverse Erweiterungen. Gerade so Klassen wie HashSet haben mir vorher doch ein bißchen gefehlt. Es spricht also nix dagegen, sich 3.5 zu installieren, und sich erstmal auf Basis von 2.0 Tutorials vorwärts zu kämpfen.

][immy
2008-02-20, 21:56:23
grad noch zufällig gefunden
könnte vielleicht nützlich sein http://www.microsoft.com/germany/msdn/techtalk/videos/library.aspx?id=msdn_de_23528

habs mir jetzt aber noch nicht angesehen

Bietchiebatchie
2008-02-21, 09:40:42
...

Über Meinungen oder Tipps dazu würde ich mich sehr freuen.

Grundsätzlich würde ich sagen:

Fang mit C#2.0 an; hauptsächlich wegen der fehlenden Generics würde ich 1.0 überspringen.
Zwei Sachen aus C#3.0 sind extrem simpel aber auch sehr nützlich:
1. Das von Timmy schon beschriebene neue Keywort var.
Beispiel: Falls foo.Bar() ein Dictionary<string, Person> zurückliefert:
statt
Dictionary<string, Person> personDict = foo.Bar();
eben
var personDict = foo.Bar();
Reduziert das Coderauschen imo ungemein.

2. Auto-implemented Properties:
In sehr vielen Fällen will man ja nur ein Feld aus read-only kapseln:
statt
private int value;
public int Value
{
get { return this.value;}
}
einfach
public int Value { get; private set; }

Ansonsten würde ich nicht unterschätzen, dass c# mittlerweile eine enorm mächtige Sprache ist. Damit verbunden ist leider auch, dass sie nicht mehr in zwei, drei Tagen (als Java-Überläufer) zu lernen ist.

PatkIllA
2008-02-21, 11:47:31
Der bei uns gewichtigste Unterschied ist, dass die 3.x Versionen nicht unter Windows 2000 laufen.
Jetzt nicht als Sprachfeature neu sondern eine neue API ist der Zugriff auf die Windows Presentation Foundation. Da kann man auch nette Sachen mit machen.

Für 3.0 solltest du auch VS 2008 haben.

Ich würde auch 2.0 empfehlen. Ich wüsste jetzt nicht, was für 1.x spricht. Es sei denn du willst unbedingt monokompatibel bleiben.

Johnny
2008-02-21, 11:48:16
Die grössten Änderungen gab es zwischen 1.1 und 2.0, also auf keinem Fall 1.1 (VS 2003). Danach sind die Änderungen kosmetischer Natur, sprich solltest am besten mit 2.0 anfabgen

Gast
2008-02-21, 13:50:37
[immy']ehrlich gesagt find ich das ziemlich unübersichtlich da man sich den code dann wieder genauer anschauen muss um zu wissen welcher typ hinter der variable steckt.

Ich stimme Dir einerseits zu, daß eine falsche Verwendung von "var" zu unübersichtlichem Code führen kann. Aber der Grund für die Einführung von "var" ist nicht, es dem faulen Programmier, der den Typ nicht ausschreiben will, leichter zu machen. "var" und Typinferenz wird für die Realisierung von Anonymous Types zwingend benötigt. Und LINQ wiederum nutzt anonyme Datentypen ("select new"-Statement).

EGG-Beater
2008-02-21, 18:31:21
Vielen Dank für die vielen Hinwiese. Auf genau solche Antworten hatte ich gehofft. :)

VS 2008 ist kein Problem, dank MSDNAA. Unterschätzen werde ich die Sache auch nicht. Ich bin halt Neueinsteiger, ohne Vorwissen. Auch von Java hab ich bisher keine Ahnung, also wirds kaum Erwartungen geben, die nicht erfüllt werden könnten.

Coda
2008-02-21, 19:06:03
Der bei uns gewichtigste Unterschied ist, dass die 3.x Versionen nicht unter Windows 2000 laufen.
Das betrifft nur das Framework, nicht die Sprache.

PatkIllA
2008-02-21, 19:14:32
Das betrifft nur das Framework, nicht die Sprache.
Kann man denn was mit 3.0 Sprachfeatures entwickeln, kompilieren und mit dem .NET 2.0 Framework laufen lassen?

Bietchiebatchie
2008-02-21, 20:16:28
Ja, seit 2008 sind die .net und sprachversionen voneinander entkoppelt.

PatkIllA
2008-02-21, 20:22:59
Ja, seit 2008 sind die .net und sprachversionen voneinander entkoppelt.
Wie kann das seit 2008 gelten, wenn das 3.0er Framework schon 2006 rausgekommen ist und das 3.5 auch schon älter als das Jahr ist?
Oder meinst du das man mit Visual Studio 2008 nicht auf eine Sprachversion beschränkt ist? Das hätte allerdings gar nichts mit meiner Frage zu tun.

Bietchiebatchie
2008-02-21, 20:35:25
seit der letzten visual-studio version kannst du sprachunabhängig beliebige .net frameworkversionen als target nehmen - besser?

PatkIllA
2008-02-21, 20:37:11
seit der letzten visual-studio version kannst du sprachunabhängig beliebige .net frameworkversionen als target nehmen - besser?
Das hat aber mit der Frage nichts zu tun.

Bietchiebatchie
2008-02-21, 20:44:48
du kannst mit c#3.0 mit .net 2.0 kombinieren; wenn das nix mit deiner frage zu tun hat, dann hab ich sie leider komplett misverstanden.

PatkIllA
2008-02-21, 20:49:04
Also kann man die Features der 3.0 Sprachversion benutzen, aber 2.0 als Ziel nehmen und das läuft dann auch auf Rechnern ohne 3.x Framework?

Bietchiebatchie
2008-02-21, 21:13:42
ja - weil es eben nur spracherweiterungen sind.

Expandable
2008-02-22, 07:24:36
Linq kann man aber z.B. nicht verwenden. Die entsprechenden .dlls sind doch bloß bei 3.5 dabei, oder?

gr@fz@hL
2008-02-22, 09:42:09
Linq kann man aber z.B. nicht verwenden. Die entsprechenden .dlls sind doch bloß bei 3.5 dabei, oder?
Das ist richtig. Den var-Typen sollte man aber verwenden können.

Bietchiebatchie
2008-02-22, 10:45:10
Also kann man die Features der 3.0 Sprachversion benutzen, aber 2.0 als Ziel nehmen und das läuft dann auch auf Rechnern ohne 3.x Framework?

Sorry, da hab ich anscheinend Blödsinn erzählt; ich ging davon aus, dass alle c#3.0 features auch unter .net 2.0 verfügbar sind; das stimmt aber nicht. Anscheinend sind nur var, Lambda-abstractions und auto-implementierte Properties direkt nutzbar. Für Extension-Methods (und damit linq to objects) braucht man 3.5.

Was ich allerdings nicht verstehe, denn man kann auch unter .net 2.0 für Objekte durchaus Queries schreiben:

class Program
{
static void Main(string[] args)
{
var values = new ListWithExtensions<int>();
values.Add(2);
values.Add(4);
values.Add(5);

var evenValues = from x in values
where x % 2 == 0
select x;

foreach (var item in evenValues)
{
Console.WriteLine(item);
}
}
}
Mit folgender Erweiterung:

public class ListWithExtensions<T> : List<T>
{
public IEnumerable<T> Where(Func<T, bool> predicate)
{
foreach (var item in this)
{
if (predicate(item))
yield return item;
}
}

public IEnumerable<TResult> Select<TResult>(Func<T, TResult> selector)
{
foreach (var item in this)
{
yield return selector(item);
}
}
}

public delegate TResult Func<TSource, TResult>(TSource source);
Compiliert und bringt auch das erwartete Ergebnis.
Wenn MS nett gewesen wäre, hätten sie aus linq to objects vermutlich auch eine 2.0 - kompatible Bibliothek machen können.

Novox/work
2008-02-22, 13:12:53
Für Extension-Methods (und damit linq to objects) braucht man 3.5.

Was ich allerdings nicht verstehe, denn man kann auch unter .net 2.0 für Objekte durchaus Queries schreiben:

Der Grund ist ganz einfach: Die entsprechenden Extension Methods sind in System.Linq.Enumerable definiert; und das entsprechende Assembly System.Core.dll wird eben mit dem 3.5er Framework mitgeliefert.

Bietchiebatchie
2008-02-22, 13:32:59
Ja - was ich meinte, dass ich nicht verstanden habe, dass MS linq (+ ext. methods) nicht komplett vom framework 3.5 entkoppelt haben, dann wäre es möglich gewesen, sämtliche c#3.0 features auch unter älteren frameworks zu nutzen. Denn letztlich ist linq to objects ja "nur" eine Erweiterung der Sprache. Die Enumerable-Extensions könnten genauso unter 2.0 existieren.

][immy
2008-02-22, 22:36:42
Ja - was ich meinte, dass ich nicht verstanden habe, dass MS linq (+ ext. methods) nicht komplett vom framework 3.5 entkoppelt haben, dann wäre es möglich gewesen, sämtliche c#3.0 features auch unter älteren frameworks zu nutzen. Denn letztlich ist linq to objects ja "nur" eine Erweiterung der Sprache. Die Enumerable-Extensions könnten genauso unter 2.0 existieren.

das ist vermutlich so, weil linq sonst nur eine extension gewesen wäre, und kein standard. wenn es eine extension ist, musst du immer zusehen das man diese mitliefert, ein standard hingegen kann immer verwendet werden (also wenn .net 3.5 installiert ist).
das ist ein entscheidender unterschied, ein .net enwickler wird sich nach möglichkeit immer erst nach dem standard richten und wenn es gar nicht anders geht erst anfangen "fremde" assemblies mit auszuliefern. .net zielt schließlich auf businessapplikationen ab, da kann man unter umständen nicht einfach mal eben eine weitere assembly einspielen. das wird von dem meisten kunden überhaupt nicht gerne gesehen.

Bietchiebatchie
2008-02-22, 23:26:43
[immy;6302113']das ist vermutlich so, weil linq sonst nur eine extension gewesen wäre, und kein standard. wenn es eine extension ist, musst du immer zusehen das man diese mitliefert, ein standard hingegen kann immer verwendet werden (also wenn .net 3.5 installiert ist).
Dann hätten sie linq standardmäßig in 3.5 einbauen können und außerdem eine zusätzliche assembly mit linq für 2.0 releasen können :D
Nein, ernsthaft: stimmt natürlich was du sagst - insbesondere unter dem Gesichtspunkt, dass ja nahezu alle von MS entwickelten Dinge in irgendeine framework-Version Einzug halten.

Coda
2008-02-23, 15:58:08
Und 3.5 gibt's nicht mehr für Windows 2000? Das ist aber dann eine rein politische Entscheidung.

Monger
2008-02-23, 16:47:30
Und 3.5 gibt's nicht mehr für Windows 2000? Das ist aber dann eine rein politische Entscheidung.
Führt 3.5 nicht erstmals WPF ein?

Coda
2008-02-23, 17:31:59
Na und? Das braucht nur D3D9.

Monger
2008-02-23, 17:53:24
Ja, aber gibt es WPF für Win2000? Ich dachte, das wäre nur für XP und Vista freigegeben ?!