myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » The Future of C# (C# 4.0)
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Seiten (2): « vorherige 1 [2] Antwort erstellen
Zum Ende der Seite springen  

The Future of C# (C# 4.0)

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
svenson svenson ist männlich
myCSharp.de-Poweruser/ Experte

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Khalid:
Was eigentlich gar nicht so schlecht ist. Wäre IMHO ziemlich fatal, wenn aufeinmal die ganze Anwendung zickt, nur weil sich irgendwo in irgendeiner anderen Assembly ein Defaultwert sich ändert.

Genau DAS produziert gerade die Lösung von VB.NET und C# 4.0.

Beispiel:

Du hast irgendwo eine Blockgröße von 32 KB als optionalen Wert. Der Aufrufer verzichtet bisher einen Wert zu setzen (im Code). Der Compiler setzt aber nun einen Aufruf mit 32 KB ein.

Jetzt ändert sich das Modul, welches die Funktion implementiert. Die maximal erlaubte Blöckgröße reduziert sich aber auch 16 KB, ebenso der Default-Wert des optionalen Parameters.

Modul compiliert (Aufrufer nicht), Anwendung gestartet und BOOOOOOM!

Würden Default-Werte auschließlich im Aufgerufenen implementiert, passiert das nicht.

Optionaler Parameter sollte heissen: "Da kümmer ich mich nicht drum, mir egal". Genau DAS ist nun nicht der Fall.

Man sollte also die Verwendung von optionalen Parametern auf Assembly-interne Methoden beschränken oder auf Felder, die garantiert unkritisch bei der Veränderung des Default-Wertes sind.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von svenson am 28.10.2008 16:11.

28.10.2008 16:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JAck30lena JAck30lena ist männlich
myCSharp.de-Team (Admin)

images/avatars/avatar-2653.jpg


Dabei seit: 01.10.2006
Beiträge: 11.393
Entwicklungsumgebung: Visual Studio 05/08/10 Prof.


JAck30lena ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich schließe mich svenson an. optional heißt im moment nur "ich muss nciht tippen" und hat daher keinen nennenswerten mehrwert. mir würde es mehr gefallen, wenn sich die änderung an allen refernzierenden assemblies auswirkt. weil wenn ich definitiv einen wert benötige, dann setze ich diesen wert sowieso. auch wenn dieser der defaultwert ist. gefährlich ist es daher auch einfach nichts einzutippen, weil man denkt das der default sowieso der ist den man haben will.....
28.10.2008 16:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 8 Monate.
Briefkasten Briefkasten ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-1523.gif


Dabei seit: 07.04.2004
Beiträge: 420
Entwicklungsumgebung: Visual Studio Express 2005


Briefkasten ist offline

Entwicklung von C# - Positiv / Negativ

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

[EDIT=herbivore]Threads zusammengefügt[/EDIT]

Hallo,

und schon wieder kommt eine neue .NET C# Version (4) auf uns zu.

Wie seht ihr den Entwicklungstrend von C#? Freut ihr euch auf die Erneuerungen oder seid ihr enttäuscht?

Seht ihr es positiv, dass es zu jeder Version Syntaktische Änderungen gibt?

Quelle:  heise.de

Zitat:
Eine mit dem Schlüsselwort "dynamic" deklarierte Variable löst nicht mehr der Compiler, sondern die CLR zur Laufzeit auf. In Visual Basic gab es dieses späte Binden schon zu Zeiten des klassischen Visual Basic durch den Typ "Object"; in C# ging das bisher nur umständlich über die Reflection-Bibliothek. Die dynamische Programmierung bietet Vorteile beim Umgang mit COM-Objekten und im Zusammenspiel mit dynamischen Programmiersprachen wie Python und Ruby. Auch mit optionalen und benannten Parametern zieht C# endlich gleich mit Visual Basic. Neu sind hingegen Co- und Contravarianz für Typparameter, die Zuweisungen zwischen Objektmengen mit verwandten Typen ermöglicht.

Zitat:
Die neuen Sprachfunktionen halten sich demnach in Grenzen (verglichen mit den großen Wellen, die es in .NET 2.0 und .NET 3.5 gab). Interessant ist die Aussage von Mads Torgersen, Produktmanager für C#, im Dokument "New features in C# 4.0", dass C# und Visual Basic in Zukunft hinsichtlich ihrer Funktionen noch mehr im Gleichschritt gehen sollen als bisher. "Die Sprachen sollen sich in Stil und Gefühl unterscheiden, nicht in ihrem Funktionsumfang".

Ich bin etwas enttäuscht, dass C# weg von den streng Typisierten Typen will. (var, dynamic). Das geht immer mehr in Richtung Visual Basic.NET.

Auch sind die Releases der .NET Versionen ziemlich knapp wie ich finde:

.NET 1.0 - 2002 - CLR 1.0
.NET 1.1 - 2003 - CLR 1.1
.NET 2.0 - 2005 - CLR 2.0
.NET 3.0 - 2006 - CLR 2.0
.NET 3.5 - 2008 - CLR 2.0
.NET 4.0 - 2009 - CLR ?

In dieser Tabelle sieht man auch sehr gut, dass sich seit dem .NET 2.0 Framework die CLR nicht mehr geändert hat. Ab dem dritten .NET Framework wurde es lediglich um Bibliotheken erweitert.

Findet ihr es gut, dass jedes 2te Jahr eine neue .NET Version released wir? Warum wir ein bestehendes .NET Framework nicht einfach um Bibliotheken erweitert ?
Was meint ihr?

Was meint ihr zur Thematik?
30.06.2009 23:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Briefkasten,

in dem Thread, an den ich deinen Beitrag angehängt habe, sind einige deiner Fragen schon beantwortet.

herbivore
01.07.2009 02:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
winSharp93 winSharp93 ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2918.png


Dabei seit: 19.01.2007
Beiträge: 5.711
Entwicklungsumgebung: VS 2010 Professional
Herkunft: Freiburg / Stuttgart


winSharp93 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Briefkasten,

um nochmal meine Meinung zusammenzufassen:

Zitat von Briefkasten:
Wie seht ihr den Entwicklungstrend von C#? Freut ihr euch auf die Erneuerungen oder seid ihr enttäuscht?

Ehrlich gesagt bin ich eher enttäuscht. So etwas wie non-nullable Typen aus Spec# hätten sie ruhig einbauen können.
Außerdem hätten sie ruhig Co- / Contravarianz beim Überschreiben vererbter bzw. implementieren von Membern erlauben können.

Zitat von Briefkasten:
Ich bin etwas enttäuscht, dass C# weg von den streng Typisierten Typen will. (var, dynamic). Das geht immer mehr in Richtung Visual Basic.NET.

Man darf die Dynamik in C# keineswegs als "neuen Weg" sehen. Viel mehr ist es so, dass ein Großteil der Neuerungen der Interoptibiltät dienen (Office, F# (DLR allgemein), etc.).

var sehe ich mehr als einen Workaround denn eine wirkliche Hilfe. Im Zusammenhang mit LINQ will man halt nicht immer zeilenfüllende Variablentypen schreiben...

Zitat von Briefkasten:
In dieser Tabelle sieht man auch sehr gut, dass sich seit dem .NET 2.0 Framework die CLR nicht mehr geändert hat. Ab dem dritten .NET Framework wurde es lediglich um Bibliotheken erweitert.

Das 4er Framework kommt ja mit einer neuen CLR.
Mich persönlich störend die kurzen Releasezyklen nicht - im Gegenteil: Das zeugt IMHO von Innovation.

Zitat von Briefkasten:
Warum wir ein bestehendes .NET Framework nicht einfach um Bibliotheken erweitert ?

Verstehe ich auch nicht so ganz - vermutlich Marketingzwecke...
"Für dieses Programm brauchen sie das .NET Framework in Version 2.0 mit der Windows Presentation Foundation mindestens in Version 3 und zusätzlich die WCF Runtime 1.5". (Versionen frei erfunden) Ist vielleicht doch besser so, wie es jetzt ist Augenzwinkern
01.07.2009 08:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl


Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zum einen, vielleicht noch ganz lesenswert:  http://www.des-eisbaeren-blog.de/post/20...wider-C-40.aspx

Zum zweiten: Zu der Frage "Warum eine neue CLR?" - sie hätten die Erweiterungen für die Parallelprogrammierung in die 2.0 nicht wirklich gut integriert bekommen, ohne etwas verändern zu müssen. Daher die neue Version.

Sieht man auch sehr schön, wenn man die TPL mal als CTP für 2008 und die aus VS 2010 Beta 1 vergleicht - die von 2010 ist um Längen schneller.
01.07.2009 08:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
kleines_eichhoernchen kleines_eichhoernchen ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2079.jpg


Dabei seit: 07.11.2006
Beiträge: 3.971
Entwicklungsumgebung: Visual Studio 2005 (C#)
Herkunft: Ursprünglich Vogtland, jetzt Much


kleines_eichhoernchen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Ich bin etwas enttäuscht, dass C# weg von den streng Typisierten Typen will. (var, dynamic)

Var ist streng typisiert. Der C#-Compiler nimmt den Typ der ersten Zuweisung. Eine spätere Zuweisung eines nicht implizit konvertierbaren Typs schlegt mit einer Compiler-Meldung fehl. bei Dynamic hast du ja schon selbst geschrieben, wozu dieses verwendet wird (für COM).
01.07.2009 09:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Khalid Khalid ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2534.gif


Dabei seit: 19.07.2005
Beiträge: 3.247
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Hannover


Khalid ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Wie seht ihr den Entwicklungstrend von C#? Freut ihr euch auf die Erneuerungen oder seid ihr enttäuscht?

Freuen:
Ich finde dynamic sehr interessant. Im Bereich Office Interop wird dadurch vieles leichter und einfacher. Kein ewiges (ref missing, ref missing , ref missing, ... ;)) mehr. Das macht jetzt der Compiler für einen.

Enttäuscht und IMHO der wohl größte Fehler:
Optionale Parameter

Zitat:
Warum wir ein bestehendes .NET Framework nicht einfach um Bibliotheken erweitert ?

Naja, wird es ja an sich. Nur die CLR 4.0 musste sein, da einige Sprachfeatures einfach für die CLR 2.0 zu viel wären. Paralells wurde ja bereits genannt. Alle weiteren späteren Featuren werden danach wahrscheinlich wieder auf die CLR 4.0 aufbauen. Hoffe ich jedenfalls :)
01.07.2009 09:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dN!3L dN!3L ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2985.png


Dabei seit: 13.08.2004
Beiträge: 2.829


dN!3L ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

Zitat von Golo Roden:
Zum einen, vielleicht noch ganz lesenswert:  http://www.des-eisbaeren-blog.de/post/20...wider-C-40.aspx

wie Golo auch, finde ich, dass "Ko- und Kontravarianz [...] mit Sicherheit nicht nur das am wenigsten beachtete, sondern auch am wenigsten verstandene Merkmal [sind] – zugleich jedoch auch das leistungsfähigste. Schließlich ermöglichen diese beiden Aspekte eine deutlich bessere Verwendung von Schnittstellen und implementierenden, aber spezialisierenden Klassen." Da habe ich mich schon mehr als oft drüber geärgert, dass das nicht ging.

Ebenso (wie schon mehrmals erwähnt) wären die optionalen Parameter ein schönes Feature gewesen - guckt man sich aber die Implementierung an, ist das aber eher fraglich. Sollte man sie wirklich einsetzten, muss man als Aufgerufener schon sehr sehr diszipliniert sein, damit das nicht irgendwann mal in die Hose geht.

Beste Grüße,
dN!3L

P.S.: Mit fehlt für ein "richtiges" neues C# noch der ??=-Operator Augenzwinkern
01.07.2009 10:17 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Briefkasten,

Zitat:
Ich bin etwas enttäuscht, dass C# weg von den streng Typisierten Typen will. (var, dynamic). Das geht immer mehr in Richtung Visual Basic.NET.

wie schon gesagt ist var nur eine Schreiberleichterung, die aber sofort zur Compilezeit in einen konkreten Typ aufgelöst wird und dadurch streng typisiert ist. Und dynamic muss man ja nicht nutzen. Wenn man es nicht tut, ist auch weiterhin alles zur Compilezeit festgelegt und streng typisiert. dynamic ist also eine optionale Erweiterungen, die man benutzen kann, wenn man will, die aber nichts aufweicht, wenn man sie nicht benutzt. Und var weicht nicht mal etwas auf, wenn man es benutzt.


Hallo svenson, hallo zusammen,

um nochmal auf die Sache mit den optionalen Parametern/Default-Werten zurück zu kommen:

Zitat:
Du hast irgendwo eine Blockgröße von 32 KB als optionalen Wert. [...] Die maximal erlaubte Blöckgröße reduziert sich aber auch 16 KB.

Dein Beispiel knallt doch nicht wegen des eincompilierten Default-Werts, sondern weil sich der zulässige Wertebereich für den Parameter geändert hat. Es ist doch - auch ohne Default-Werte - der Normalfall, dass die konkreten Parameterwerte im Aufrufer stecken. Die 32 hätte ja nicht nur per Default-Wert in den Code des Aufrufers kommen können, sondern einfach durch die bewusste Entscheidung des Aufrufers, explizit 32 zu übergeben. Und dann würde es in deinem Beispiel genauso knallen. Sprich das Problem sind nicht die Default-Werte, sondern die Änderung der Schnittstelle. Daher finde ich dein Beispiel ungeeignet und sogar irreführend.

Deine Argumentation, dass es schlecht ist, wenn der Compiler Konstanten aus dem Code des Aufgerufenen in den Code des Aufrufers "injiziert", mag bei bei const vs. readonly stimmen, aber bei Default-Parametern nicht.

Es kommt nicht mal darauf an, was es für den Aufrufer bedeutet, wenn er einen Parameter beim Aufruf weglässt. Also ob er sich sagt "Da kümmer ich mich nicht drum, mir egal." oder "Ich will genau diesen Wert, aber kann mir das Tippen sparen." Fakt ist, dass eine Anwendung weiterhin funktionieren muss, wenn sich eine benutze DLL ändert, sonst ist es ein breaking change.

Wir reden hier also allenfalls über eine möglicherweise höhere oder niedrigere Flexibilität beim Ändern des aufgerufenen Codes. Aber da halte ich es gar nicht für ausgemacht, wann die Flexibilität höher ist. Es kommt vermutlich auf den Einzelfall an, ob die Flexibilität höher ist, wenn man Default-Werte per Überladungen (Default-Wert ist in den Aufgerufenen compiliert) oder per optionale Parameter (Default-Wert ist in den Aufrufer compiliert) realisiert. Aber alleine, dass man diese Wahlmöglichkeit jetzt hat, erhöht doch schon die Flexibilität. Die einzige Frage ist, ob diese Flexibilität von den Programmierern auch bewusst eingesetzt wird.

herbivore
01.07.2009 10:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl


Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Problem ist letztlich doch, dass optionale Parameter und Überladung von Methoden für den Verwender die exakt gleiche Syntax haben, aber eine unterschiedliche Semantik.

Und das ist *IMMER* eine ganz schlechte Idee.
01.07.2009 10:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Poweruser/ Experte

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von herbivore:
Die 32 hätte ja nicht nur per Default-Wert in den Code des Aufrufers kommen können, sondern einfach durch die bewusste Entscheidung des Aufrufers, explizit 32 zu übergeben. Und dann würde es in deinem Beispiel genauso knallen.

Sicher, aber wie bereits gesagt wurde: Optionale Parameter implizieren die Bedeutung: "Da muss ich mich nicht drum kümmern, wird schon". Also bewußt keine bewußte Entscheidung. Das gleiche Problem gilt übrigens auch für öffentliche Konstanten. Auch die werden beim Aufrufer fest eincompiliert. Daher in öffentlichen Schnittstellen besser readonly-Felder verwenden, sofern sich der Wert später mal ändern könnte.

Hier nochmal eingehender:

 http://dotnet.mvps.org/dotnet/articles/optional/

Bemerkenswert die "Kritik an der Kritik":

Zitat:
Die angeführten Gründe halten jedoch einer eingehenden Prüfung nicht stand. Der erste Kritikpunkt ist rein theoretischer Natur, da optionale Parameter mit Standardwerten in Szenarien nicht geeignet sind, in denen der Standardwert nicht unumstößlich feststeht.

Der Hinweis zur Verwendung ist richtig, aber hier ist der gute Mann doch wohl ein wenig optimistisch, was die Disziplin der Entwickler angeht. C# ist mal unter dem Banner "defensives Programmiermodell" angetreten, mit dem Ziel Qualität über Faulheit stellen. Optionale Parameter sind wohl ein deutliches Zeichen für die Abkehr von dieser Strategie und geben den Kritikern an C# wohl recht, die sagen, dass die Sprache mehr und mehr verwurschtelt wird.

Flexibilität kann ich in diesem Zusammenhang nicht erkennen, außer dass der Entwickler nun so flexibel ist, eine fehleranfällige und eine fehlerunanfällige Implementierung zu wählen.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von svenson am 01.07.2009 12:37.

01.07.2009 11:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Golo Roden,

Zitat:
Das Problem ist letztlich doch, dass optionale Parameter und Überladung von Methoden für den Verwender die exakt gleiche Syntax haben, aber eine unterschiedliche Semantik.

nur die Aufrufsyntax ist (aus verständlichen Gründen) gleich. Aber die Definition ist auch für den Aufrufer (da sie Teil der Schnittstelle ist) erkennbar unterschiedlich, was bis in die Dokumentation durchschlägt. Es ist auch dort erkennbar (oder sollte es zumindest sein), ob es sich mehrere um Überladungen handelt oder um eine Methode mit optionalen Parametern.


Hallo svenson,

Zitat:
Sicher, aber wie bereits gesagt wurde: Optionale Parameter implizieren die Bedeutung: "Da muss ich mich nicht drum kümmern, wird schon".

nur weil es schon gesagt wurde, muss es nicht richtig sein. :-) Ich sehe das nicht so. Was der Aufrufer intendiert, kann man nicht wissen. Ich habe ja, zwei Möglichkeiten genannt: Ist mir egal vs. nur Tipparbeit sparen (eine dritte wäre, dass es einfach übersichtlicher ist, wenn man den Default-Fall wegen seiner kurzen Parameterliste schneller erkennen kann). Wenn ich z.B. eine Datei öffne (File.Open), kann ich auch bestimmte Parameter weglassen, aber dann weiß ich trotzdem, was der Default ist und will das auch so. Es ist mir da keineswegs egal, was die Defaultwerte sind.

Zitat:
Das gleiche Problem gilt übrigens auch für öffentliche Konstanten. Auch die werden beim Aufrufer fest eincompiliert. Daher in öffentlichen Schnittstellen besser readonly-Felder verwenden, sofern sich der Wert später mal ändern könnte.

Den Fall hatte ich ja selbst angesprochen. Wichtig ist aber, dass er sich eben nicht auf Default-Werte übertragen lässt.

herbivore
01.07.2009 12:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Poweruser/ Experte

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von herbivore:
Ich sehe das nicht so.

Ich antworte darauf nochmal mit dem "Kritiker der Kritik":

Zitat:
Die angeführten Gründe halten jedoch einer eingehenden Prüfung nicht stand. Der erste Kritikpunkt ist rein theoretischer Natur, da optionale Parameter mit Standardwerten in Szenarien nicht geeignet sind, in denen der Standardwert nicht unumstößlich feststeht.

Aber erkläre mir doch nochmal inwiefern sich Konstanten im Versionierungsproblem von optionalen Parametern untscheiden. Hier ist für den Entwickler wegen des Wortes "const" vielleicht noch eher klar, worum es sich handeln sollte. Aber an der nächsten Ecke lauern auch hier schon wieder die "Performance-Optimierer" die mal gehört haben, dass const schneller ist als readonly. Von den C-Umsteigern, die const aus Gewohnheit verwenden, ganz zu schweigen...

Aber wir reden wohl aneinander vorbei: Es geht mir nicht um die korrekte und dann auch sichere Verwendung von const und optional, sondern um das Gefahrenpotential die sie für unerfahrene Entwickler bergen.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von svenson am 02.07.2009 00:16.

02.07.2009 00:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
jaensen jaensen ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2657.png


Dabei seit: 15.12.2006
Beiträge: 2.717
Entwicklungsumgebung: VS 2012
Herkunft: München


jaensen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Briefkasten:
Ich bin etwas enttäuscht, dass C# weg von den streng Typisierten Typen will. (var, dynamic). Das geht immer mehr in Richtung Visual Basic.NET.

Zitat von winSharp93:
Man darf die Dynamik in C# keineswegs als "neuen Weg" sehen. Viel mehr ist es so, dass ein Großteil der Neuerungen der Interoptibiltät dienen (Office, F# (DLR allgemein), etc.).

@winSharp93: Da habe ich aber die Befürchtung das es gerade Umsteiger von PHP etc. sehr gerne aufnehmen das so eine Gaudi in C# jetzt auch geht und wenn es nur mal kurz und der vollständigkeit halber in einem Lehrbuch auftauchte. Birgt halt wieder die Gefahr falsch gelerntes zu verinnerlichen, zu verwenden und dann letztendlich wieder falsch zu lehren.
02.07.2009 00:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo svenson,

Zitat:
Aber erkläre mir doch nochmal inwiefern sich Konstanten im Versionierungsproblem von optionalen Parametern untscheiden.

der Unterschied ist eben, dass man optionale Parameter immer auch explizit angeben kann, d.h. die 32 in deinem Beispiel steht nicht nur dann im ausführbaren Code des Aufrufers, wenn der Default-Wert verwendet wurde, sondern auch, wenn der Aufrufer die 32 explizit angegeben hat. Es ist im ausführbaren Code im Prinzip gar nicht mehr zu erkennen, warum da eine 32 steht, da wir über den Fall reden, in dem der Quellcode des Aufrufers nicht neu compiliert wird. Bei Änderungen der DLL muss diese also so oder so damit klar kommen, dass möglicherweise 32 übergeben wird. Die Default-Parameter ändern also nichts zum Negativen. Es ist sogar eigentlich ein Vorteil, wenn der Default-Wert im Aufrufer steckt. Denn mit diesem wurde er getestet und funktioniert. Wenn die Bibliothek also keine Breaking Changes enthält, wird er auch weiter damit funktionieren. Das wäre nicht unbedingt der Fall, wenn der Aufgerufene einen anderen Default-Wert erzwingen könnte, wie das beim Überladen der Fall ist.

Das ist schon etwas anders als bei const, wo bei Änderungen die Konstantenwerte im ausführbaren Code nicht mehr stimmen, wenn nicht alles compiliert wird. Das ist ein echter Nachteil.

Aber auch ich habe auch den Eindruck, dass wir aneinander vorbei reden. Vielleicht äußern sich ja die anderen, wie sie das ganze sehen, nachdem sie die Argumente für beide Seiten gehört haben.

herbivore
02.07.2009 02:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Seiten (2): « vorherige 1 [2] Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Jahre.
Der letzte Beitrag ist älter als 3 Jahre.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 24.05.2013 12:34