Ich bin ein Python-Programmierer, der C # lernt und versucht, sich keine Sorgen mehr zu machen und C # einfach so zu lieben, wie es ist, anstatt es ständig mit Python zu vergleichen.
Ich bin in einem Punkt eingeholt: der Mangel an Klarheit darüber, wo Dinge definiert sind, wie in dieser Stapelüberlauf-Frage beschrieben . Kurz gesagt: In C # using foo
wird nicht angegeben, von welchen Namen Namen foo
verfügbar gemacht werden. Dies ist analog zu from foo import *
Python - eine Form, die in der Python-Codierungskultur davon abgeraten wird, implizit und nicht explizit zu sein from foo import bar
.
Ich war ziemlich beeindruckt von den Stack Overflow-Antworten von C # -Programmierern auf diesen Punkt, die besagten, dass in der Praxis diese mangelnde Aussagekraft keine Rolle spielt, da Sie in Ihrer IDE (vermutlich Visual Studio) einfach über einen Namen fahren und sich von ihm erzählen lassen können das System, von dem der Name kommt. Z.B:
Theoretisch ist mir klar, dass Sie bei der Suche mit einem Texteditor nicht wissen können, woher die Typen in C # stammen. In der Praxis ist dies jedoch kein Problem. Wie oft sehen Sie sich tatsächlich Code an und können Visual Studio nicht verwenden?
Dies ist für mich eine Offenbarung. Viele Python-Programmierer bevorzugen einen Texteditor-Ansatz gegenüber der Codierung mit etwas wie Sublime Text 2 oder vim, bei dem alles um den Code sowie Befehlszeilen-Tools und den direkten Zugriff und die Bearbeitung von Ordnern und Dateien geht. Die Idee, von einer IDE abhängig zu sein, um Code auf einer solchen Basisebene zu verstehen, scheint ein Gräuel zu sein. Es scheint, dass die C # -Kultur in diesem Punkt radikal anders ist. Und ich frage mich, ob ich das als Teil meines C # -Lernens akzeptieren und annehmen muss.
Was mich hier zu meiner Frage führt: Ist die C # -Entwicklung tatsächlich untrennbar mit der von Ihnen verwendeten IDE verbunden?
using MyType = MyNamespace.MyType;
?global::
und sich von dort aus fortbewegen.using
stellt nichts zur Verfügung, was vorher nicht war; Dies macht den Zugriff nur einfacher (da weniger Eingaben erforderlich sind, um eine bestimmte Klasse zu verwenden).Antworten:
Visual Studio ist so praktisch, dass es nach einer Weile schwierig ist, eine andere IDE zu verwenden. Es verfügt über viele nützliche Tools und eine Reihe von Plugins, sodass praktisch alle Funktionen zur Verfügung stehen, die Sie benötigen.
Unabhängig davon, welche Sprache Sie lernen, wird empfohlen, die Befehlszeile am Anfang zu verwenden, damit Sie besser verstehen, wie sie funktioniert. C # ist keine Ausnahme.
Theoretisch nein, aber praktisch ja. Es ist möglich, mit einem Texteditor und einer Befehlszeile in C # zu schreiben, aber mit Visual Studio würden Sie dies niemals tun. Tatsächlich haben nur sehr wenige Programmierer jemals C # -Code über die Befehlszeile ausgeführt.
Übrigens: Wenn Sie sich unwohl fühlen
using foo
, können Sie bei der Verwendung eines Typs den gesamten Pfad verwenden.quelle
Es geht nicht darum , Ihren Code zu verstehen : Wenn Sie genügend Zeit haben, können Sie die richtige Variable immer mit einem einfachen Texteditor oder sogar in einem Ausdruck finden. Nach dem Verständnis des Codes existiert die IDE-Abhängigkeit absolut nicht.
Das effiziente Auffinden Ihrer Referenzen ist ein ganz anderes Thema: Ich finde die Verwendung von Java-Variablen in Eclipse genauso gut wie das Auffinden von Deklarationspunkten in Visual Studio, sowohl für C # als auch für C ++. Ich bevorzuge es, meine Zeit mit Kodieren zu verbringen, anstatt manuell nach Deklarationspunkten zu suchen. Das ist ähnlich wie beim Rechnen: Ich kann mehrstellige Zahlen auf ein Blatt Papier multiplizieren, bevorzuge aber die Verwendung eines Taschenrechners, um mir ein oder zwei Minuten zu sparen.
Ab einer bestimmten "kritischen Größe" des Codes ist eine gute IDE unabhängig von der Programmiersprache sehr nützlich. Die Größe kann von Sprache zu Sprache variieren. Wenn Sie jedoch mehrere tausend Zeilen überschreiten, hilft eine IDE, unabhängig von Ihrer Sprache. Dies hat mehr mit Einschränkungen des menschlichen Geistes zu tun als mit einer bestimmten Programmiersprache: Irgendwann ist Ihr Kurzzeitgedächtnis an einen "Überlauf" gebunden.
Es gibt Tricks, mit denen Sie die kritische Größe erhöhen können, wenn die IDE nützlich wird. Sie könnten beispielsweise einer Namenskonvention folgen (ungarische Namen waren in der C ++ - Welt irgendwann groß, besonders unter Windows-Anwendern). Ein weiterer häufiger Trick besteht darin, Instanzvariablen
this.
auch in Kontexten zu qualifizieren , in denen eine solche Qualifizierung nicht erforderlich ist.Diese Tricks sind mit Kompromissen verbunden: Sie machen Ihr Programm fast zwangsläufig weniger lesbar, indem Sie Namen verdecken oder die expliziten Verweise einfügen, die die Kapselung verbergen sollte. Vor der Wahl wähle ich sauber aussehenden Code plus eine IDE anstelle von weniger sauber aussehendem Code minus einer IDE. Ich erkenne jedoch voll und ganz, dass die Entscheidungen anderer Menschen von meinen abweichen können.
quelle
this
eigenwillige Verwendung entscheiden könnte - aber das Codieren ist keine isolierte Kunst und ich denke, es ist am besten, den Normen einer Codierungskultur zu folgen (oder zumindest damit zu beginnen) - dh mit Python und Pythonic zu sein was auch immer das äquivalente "C # way" mit C # ist. Aus den hier gegebenen Antworten und Kommentaren geht klar hervor, dass die Verwendung einer guten IDE wie Visual Studio für den "C # -Modus" von zentraler Bedeutung ist (wenn dies der richtige Weg ist).Das ist toll, aber es fehlt der Sinn der VS-IDE. Der Sinn einer IDE wie VS ist die schnelle Entwicklungsunterstützung durch starke Code-Tools wie Refactoring und Intellisense. VS ist ein sehr sehr guter Editor für C # -Code.
Mit C # können Sie jetzt einen Stil programmieren, der in größerem Maße von der IDE abhängt (Sie können viele
var
Schlüsselwörter und dergleichen verwenden). Einige Leute bevorzugen es, expliziter zu sein, indem sie beispielsweise Namespace-Aliase verwenden, um klar zu machen, zu welchem Namespace eine Klasse gehört (wieimport
in Java oder Python). Das ist eher eine Wahl des Codierungsstils als ein Merkmal der Sprache.Da C # statisch typisiert ist (obwohl mit einigen dynamischen Erweiterungen ab Version 4), ist es immer ziemlich einfach herauszufinden, auf welche Typen verwiesen wird - wenn sie falsch sind, wird der Code nicht kompiliert und VS ist nicht die einzige IDE mit Unterstützung für C # Intellisense. Es ist wahrscheinlich das Beste.
Das Entwickeln von C # ohne eine leistungsstarke IDE (wie VS) ähnelt dem Hämmern von Nägeln von Hand, wenn Sie bereits eine erstklassige Nagelpistole besitzen. Es kann gelegentlich vorkommen, dass Sie dies tun müssen, aber Profis verwenden das richtige Werkzeug für den Job .
Ich würde sagen, dasselbe gilt wahrscheinlich auch für Java. Wenn es eine leistungsstarke IDE mit Intellisense- und Code-Refactor-Tools gibt, sollten Sie sie wahrscheinlich verwenden.
Betrachten Sie es jedoch anders herum - wenn Sie keine Intellisense-, Compile-Timecode-Prüfung und Code-Analyse / Refactoring-Funktion wünschen, ist eine aufgeblähte IDE nicht der richtige Weg, und es handelt sich auch nicht um eine statisch typisierte Sprache. Ich denke, es ist umgekehrt:
Ich denke:
quelle
Um Ihre Frage zu beantworten: Obwohl sich die Microsoft-Entwicklungsumgebung langsam ändert, handelt es sich größtenteils um eine Monokultur .
Dieser Ansatz hat viele positive und negative Aspekte, die ausführlich diskutiert werden könnten (z. B. die Vor- und Nachteile offener und geschlossener Plattformen wie PCs gegenüber einer Xbox). Letztendlich ist das Tool von Microsoft jedoch das wichtigste Leute benutzen. Das Unternehmen hat auch gezeigt, dass es sich bei der Entscheidungsfindung oft um einen Prozess handelt, bei dem die Mehrheit unserer Benutzer den größten Wert erhält. Dabei wird stets nach praktischen Kompromissen gesucht (in letzter Zeit - betrachten Sie Typescript ). Es würde mich also nicht überraschen, dass die Entwicklung von C # unter Berücksichtigung der Tools (VS) durchgeführt wurde / wird.
quelle
Zum einen ist C # nicht Python. Es gibt verschiedene Entwurfsmethoden.
Um Ihre Frage zu beantworten, können Sie Ihre Python-esque jetzt mit Anweisungen verwenden.
Es ist nur definitiv nicht die Norm, weil es bei weitem nicht so einfach ist. Ich denke jedoch, Sie sollten sich weniger Gedanken darüber machen, wo genau die einzelnen Klassen herkommen. Ich verstehe jedoch nicht den ganzen Sinn, es in Python so zu machen.
Außerdem ist C # eine Sprache, die sich sehr gut für die Verwendung von IDEs eignet, um dies zu vereinfachen. Intellisense ist erstaunlich einfach zu implementieren, insbesondere im Vergleich zu dynamischen Sprachen wie Ruby und Python. Sie müssen sich jedoch nicht an Ihre IDE halten. Ich habe von Leuten gehört, die Eclipse verwenden. Es gibt natürlich auch MonoDevelop (das ich ziemlich oft benutze), und Sie können sogar von einer Kommandozeile aus arbeiten. Manchmal bearbeite ich auf meinem Server C # -Dateien mit
vi
und erst dann mitxbuild
, um sie neu zu erstellen. Es ist nur so, dass die Verwendung einer IDE die Dinge im Vergleich zur Befehlszeile in typischen Fällen erheblich vereinfacht.quelle
Hat jemand die Mühe, hier unten nachzulesen?
Ich fasse zusammen, dass die massiv komplexe IDE-Funktionalität unverzichtbar ist und sich eines Tages zum Zen of Sublime VimNess entwickeln wird (sollte) ....
Unsere Software besteht aus 129 Projekten mit ca. 2M LOC. Fügen Sie die Massivität des .NET-Frameworks hinzu, und angesichts dessen kann ich nur sagen, dass die IDE von entscheidender Bedeutung ist und die Motivationen der Frage dieses Threads übersteigt.
Einblick in die Code Base
Zeitraum. Sie kennen die Funktionen, über die wir sprechen. mit der Ausnahme, dass seine Bequemlichkeit für die Art der Codebasis, mit der ich mich befasse, unverzichtbar und wesentlich wird.
Ich schreibe besseren Code wegen der IDE. Ich füge meinen Nunit-Tests immer benutzerdefinierte Nachrichten hinzu, da dies einfach, schnell und genau ist. Ich bevorzuge Aufzählungen gegenüber Zeichenketten, die größtenteils dem Intellisense geschuldet sind. Ich zögere nicht, beschreibende / lange Benennungen zu verwenden - eine mehrzeilige Aussage ist schnell und klar verfasst.
Aber auch diese Schlauheit ist manchmal zu viel. Ich benutze oft die gute alte Textsuche "In Dateien suchen".
Codierhilfe
Hier weine ich oft "genug!". Stellen Sie sich einen Bildschirm mit einem Dutzend Farben vor, die größtenteils verdeckt sind, eine bestimmte Variable, die überall hervorgehoben ist, Klammern, die verdecken, was die Klammer eigentlich ist Ich muss nur darauf klicken und es dann die meiste Zeit ignorieren.) Ein Signatur-Hilfe-Popup, das sich horizontal über 2/3 des Bildschirms erstreckt und vertikal mehrere Überladungen anzeigt Ich kann nicht einmal die & ^!% -Zeile * s * des Codes sehen, an dem ich arbeite!
Vis.Stud. Bedürfnisse Minimalismus umarmen , damit ich kann auf Codierung und nicht durch konzentriere Hunderte von Einstellungen in einem aussichtslosen Kampf zurückzufordern Vernunft ( in Tausend , wenn Sie jede Farbcodierung Einstellung und alle , die Plug - in zählen). Ein " Pareto " -Schlüssel wäre toll.
quelle
Natürlich nicht. Warum würden Sie nicht den gesamten Namespace importieren? Die Wahl einer integrierten IDE oder eines Texteditors hat damit nichts zu tun. Das Importieren des gesamten Namespaces erschwert das Lesen oder Verwenden des Codes nicht.
Denken Sie daran, C # ist eine typisierte Sprache. Wenn Sie mehrere Namespaces mit derselben Klasse importieren, wird ein Kompilierungsfehler angezeigt.
Ich persönlich verwende in keiner Weise so viele Typdeklarationen. Stattdessen verwende ich das
var
Schlüsselwort aus den Gründen, die ich hier beschreibe: http://blog.gauffin.org/2012/08/to-var-or-not-to-var-is-that-really-the-question/quelle
msdn <classname>
und auf den ersten Link klicken. Dort erhalten Sie auch den Namespace.Mein Verständnis war, dass in Python "alles öffentlich ist" oder etwas in diesem Sinne. In C # entscheidet der Moduldesigner, was öffentlich ist und was nicht. Wenn Sie dies tun, erhalten
import
Sie ohnehin nur die öffentliche API. Das könnte ein Grund für den Unterschied sein, den Sie beschreiben.quelle
Bei meinem vorherigen Job habe ich vim hauptsächlich verwendet, um in Sprachen wie C #, JavaScript, Powershell, Perl, C ++ zu programmieren, und einige Entwickler haben etwas Ähnliches gemacht. Das Projekt war einfach zu groß für Visual Studio.
Die meisten C # -Entwickler beschäftigen sich jedoch mit viel kleineren Projekten und setzen VS gerne ein.
quelle
Dies ist eine interessante Sicht auf die C # -Entwicklung. Was Sie fragen, geht jedoch über C # hinaus, wenn Sie nach der IDE fragen.
Wie Sie sagen, können Sie in Python verschiedene Editoren verwenden, um Ihren Code zu schreiben. Dies können Sie auch mit dem .NET Framework tun. Es gibt auch andere IDE-Tools, die Sie verwenden können, z. B. SharpDevelop. Visual Studio wird sehr eng mit dem .NET-Framework zusammen entwickelt und ist relativ teuer. Es gibt Tools wie SharpDevelop und die "Express" -Versionen von VS, um mehr Entwickler zur Verwendung von .NET zu verleiten. Grundsätzlich ist alles, was eine IDE für Sie tut, die Bereitstellung einer organisierten Umgebung, in der Regel mit Intellisense, Add-Ons für die Produktivität und einem "Helfer" für die Zusammenstellung einer möglicherweise sehr beängstigend aussehenden Befehlszeile, die Sie an Ihren Compiler übergeben können. Gleiches gilt für Java. Tools wie Eclipse sorgen lediglich für die Verbesserung der Organisation und Produktivität. Unter der Haube geschieht nichts Magisches, bis Sie Ihr Projekt erstellen oder kompilieren und dieser Respekt,
Wenn Sie über die using-Anweisung in C # sprechen und sie mit Python vergleichen, ist das nicht wirklich dasselbe, was unter der Haube passiert. Die using-Anweisungen werden vom Compiler verwendet, um die Umwandlung des C # -Codes in MSIL zu erleichtern. In MSIL gibt es keine Anweisung "Alle diese Klassen aus diesem Namespace importieren". Wenn sich der Zeitcode auf MSIL-Ebene befindet, wurden alle Klassen mit ihren vollständig qualifizierten Namen versehen. Diese Anweisungen "using" und "import" dienen der besseren Lesbarkeit. Sie sind keine Compiler-Optimierungsbefehle. Nachdem all diese anfänglichen "Markierungen von vollständig qualifizierten Namen" stattgefunden haben, kann es zu einer Art "Minimierung" der FQNs auf niedriger Ebene kommen, aber dies soll dem Compiler / Interpreter helfen, schneller ausgeführt zu werden.
Ein letzter grundlegender Unterschied zwischen all diesen hier erwähnten Sprachen besteht darin, dass einige von ihnen von VMs interpretiert werden, andere im JIT-Stil interpretiert werden und andere vollständig kompiliert sind. Wie diese using-Direktiven in diesen Compilern und Interpreten implementiert werden, ist sehr unterschiedlich.
HTH.
quelle
Ich denke, die Antwort lautet historisch gesehen: Ja. Es war einfach zu unangenehm, die C # -Entwicklung außerhalb von Visual Studio, Xamarin oder SharpDevelop zum Laufen zu bringen.
In letzter Zeit sind jedoch viele Projekte aufgetaucht, die es einfacher machen, zB:
OmniSharp bietet zusammen mit Vim- , Emacs-, Atom- und Sublime-Plugins eine Grundlage für Intellisense und Refactoring. Ich habe es nicht wirklich benutzt, also weiß ich nicht, wie gut es funktioniert, aber es sieht vielversprechend aus.
Yeoman ASP.NET MVC-Generatoren helfen beim Booten eines neuen MVC-Projekts (möglicherweise sind andere Generatoren vorhanden).
paket , eine Alternative zu NuGet, bei der Sie NuGet-Pakete über die Befehlszeile zu Ihrem Projekt hinzufügen und Ihre .csproj-Dateien aktualisieren können (obwohl es ein NuGet-Befehlszeilentool gab, gehörte das Aktualisieren von Projekten zur Verwendung der Pakete zur IDE Integration, keine Kommandozeilen-Tools).
Paket impliziert, dass Sie Ihren Quellcode an die Verwendung anpassen müssen. Wenn Sie also als Einzelmitglied in einem Team sitzen und einen Texteditor zum Codieren verwenden möchten und alle anderen Visual Studio verwenden, müssen Sie alle überzeugen sonst, um die Lösung an Ihre Bedürfnisse anzupassen :(
Sie sollten also in der Lage sein, loszulegen, aber es ist vergleichsweise mehr Arbeit zu leisten, um Ihre Toolchain effizient in Betrieb zu nehmen.
quelle
Nicht mehr:
http://www.omnisharp.net/
Ich habe das mit subime3 und osx getestet
Weitere Proben bei
http://blog.jonathanchannon.com/2014/11/12/csharp-first-class-citizen-sublime-text/
quelle