Verständnisfrage zu Namespace´s und Klassen im Vergleich zu C++
-
Warum sollte es verschiedene Navigationsoperatoren geben, wenn es in objektorientierte Welt die Möglichkeit der Überladeung gibst und somit .(namespace, namespacemember) als auch .(klasse, klassenmember) gilt. Und wie dot kommentiert hat, die Anwendung prüft der Compiler, weil bei der Evaluation des Ausdrück alle Daten vorliegen um es zu prüfen.
-
Syntaktisch find ichs natürlich nicht schlecht, Gesetz dem Fall es gibt keinen Unterschied zwischen Namespace und Klasse.
Das ist ja meine Primärfrage. Inwieweit unterscheiden sich Namespaces und Klassen in C#?
-
Es gibt keine "richtigen" Klassen, sondern nur Klassen. Bevor du dich mit der Vererbung der Systemklassen lange beschäftigst,
wende sie einfach so wie sie sind an und sorge dafür, dass deren namespaces in deinem Code richtig eingebunden sind.
Das meiste macht bereits die Entwicklungsumgebung wie VSC.Hau dir einfach eigenes Anwendungswissen rein!
-
Schlitzauge schrieb:
Syntaktisch find ichs natürlich nicht schlecht, Gesetz dem Fall es gibt keinen Unterschied zwischen Namespace und Klasse.
Das ist ja meine Primärfrage. Inwieweit unterscheiden sich Namespaces und Klassen in C#?Von C++ nicht viel, sind gleiche Konzepte, nur erweitert.
-
Ok ,falscher Ansatz.
Wenn ich in C# progge, passt das alles schon. Da frag ich nicht einfach, ich wende es einfach an...Ich versuche gerade nur den genauen Unterschied zwischen C# und C++ zu verstehen (also in Hinsicht auf das Problem, nicht allgemein). Ich möchte also tiefer in die Materie schauen.
Ich versuche gerade, einfach das Grundgerüst um System experimentell in C++ nachzubilden. Also kann man es allgemein so sagen, dass zwischen namespace und class hinsichtlich der Zugriffsoperatoren zwischen C++ und C# sich nichts geändert hat, außer, dass man nun freie Wahl hat, ob man den "."- oder "::"-Operator zum Zugriff auf einen Namespace hat?
Oder gibts in C# schon einen Unterschied zwischen dem "."- und dem "::"-Operator?
-
-
Noch eine kurze Frage dazu:
Gibt es in C# im Namespace System bereits eine Instanz bzw. eine angelegte Variable der Klasse System.Console (siehe unterhalb zu Variante b.)) oder einfach nur die Klassen-Deklaration / Gerüst der class System.Console (siehe unterhalb zu Variante a.))?Worauf ich hinaus möchte, wird vlt. an folgenden C++-Beispiel (leichte Implementierung von System.Console) deutlicher:
namespace System { class Console { static void WriteLine(void){} }; };
Hier gibt es nun zwei Möglichkeiten, auf die Klasse Console zuzugreifen:
Variante a.) Ohne erstellte Instanz im Namespace System:namespace System { class Console { public: static void WriteLine(void){} }; }; using namespace System; ... System::Console::WriteLine();
Variante b.) Mit erstellter Instanz im Namespace System:
namespace System { class Console { static void WriteLine(void){} }extern Console; }; using namespace System; class System::Console Console; ... System::Console.WriteLine(); // bzw. Console.WriteLine();
Der Unterschied liegt einfach in der Schreibweise, wie man innerhalb des Namespaces und der Klassen-Gerüste navigiert. In Variante a.) durchweg mit dem "::"-Operator und in Variante b.) nur bis z.B. System::Console mit dem "::"-Operator und ab dann mit dem "."-Operator zum Zugriff auf die Klassenmember, da nun bestehende Instanz.
Wie gesagt, ist halt nur eine einfache C++-Implementierung zur Verdeutlichung.
Welche der beiden Varianten würde der C#-Implementierung näher kommen?
Mich irretiert einfach nur die nun vereinheitlichte Schreibweise in C#, also sowohl der "."- als auch der"::"-Operator zum Zugriff auf Namespace´s und Klassen gleichermaßen. In C++ geht das nicht, da ist für den Zugriff der "."-Operator für Klassen- und Struktur-Instanzen und der "::"-Operator für Namespaces und Klassen-Gerüste zuständig. Daher auch die Beispiele zum Verständnis zu meinem Verständnisproblem und meine Frage.Ich danke vielmals im Voraus!
MfG
Schlitzauge
-
@Schlitzauge,
Hör auf C++ mit C# zu vergleichen. C# ist nicht C++ und C++ ist nicht C#. Probier schon gar nicht C# in C++ nachzuprogrammieren, dabei kommt nur Müll raus, weil man in C# und C++ Dinge anders löst. Es hilft dir vom Verständnis überhaupt nichts, wenn du probierst Sprachkonstrukte zwischen den Sprachen mit aller Macht nachzuprogrammieren. In C# musst du in C# denken, in C++ musst du in C++ denken.Auch scheinst du davon auszugehen, dass C# irgendeine Weiterentwicklung von C++ sei. Das ist nicht der Fall. C# ist wahrscheinlich viel mehr aus Java heraus entstanden. Wurde aber durch die Sprache C++ beeinflusst, wie das ja auch schon bei Java der Fall war. Aber es ist keine Weiterentwicklung!
Und vielleicht noch etwas ganz am Schluss: Die Unterscheidung der Syntax von C++ und C# findet im Parser statt und nicht in der Sprache selbst.
Grüssli
-
Probier schon gar nicht C# in C++ nachzuprogrammieren, dabei kommt nur Müll raus, weil man in C# und C++ Dinge anders löst.
Versuch ich doch garnicht. Ich bin dabei, mich in C# einzuarbeiten.
Ich versuche / möchte einfach verstehen, wie das funktionell umgesetzt wird.
Ich bin kein Mensch, der Dinge einfach mal so hinnimmt, ich möchte schon etwas näher die Funktionalität begreifen. Das bringt mir mehr beim Lernen und Üben.
C/C++ dient mir dabei nur zum Vergleich, da ich aus dieser Ecke komme und wenn einige Konstrukte aus C/C++ übernommen bzw. erweitert wurden, lassen sich nebenbei gesagt schon einige Möglichkeiten mit C/C++-Implementierung darstellen und wenn es nur zum Verständnis dient (gewiss nicht alles, aber eniniges).Auch scheinst du davon auszugehen, dass C# irgendeine Weiterentwicklung von C++ sei. Das ist nicht der Fall. C# ist wahrscheinlich viel mehr aus Java heraus entstanden. Wurde aber durch die Sprache C++ beeinflusst, wie das ja auch schon bei Java der Fall war. Aber es ist keine Weiterentwicklung!
iSchweis. Ich betrachte es ja auch so. Ich denke nicht, dass C# eine Weiterentwicklung von C/C++ ist. Ich betrachte es vielmehr als neue Programmiersprache, die einige neue Konzepte einführt, aber auch aufgrund der Syntaxnähe und teilweisen Abwärtskompatibilität sehr wohl einige altbekannte Konzepte übernommen bzw. dergleichen erweitert hat. Sind nicht meine eigenen Aussagen, sondern das, was ich immer wieder in Büchern, Totorials und Statements anderer (allein in diesem Thread) entnehme, verzeiht mir also etwaige Fehler bzw. Fehlausdrücke.
Wäre, schön, wenn man nochmal meinen letzten Post aufgreifen und beantworten könnte -> mir weiterhelfen könnte, thx...
-
Schlitzauge schrieb:
Versuch ich doch garnicht. Ich bin dabei, mich in C# einzuarbeiten.
Das folgende spricht aber eine andere Sprache:
Schlitzauge schrieb:
Ich versuche gerade, einfach das Grundgerüst um System experimentell in C++ nachzubilden.
Du probierst Dinge aus C# auf C++ abzubilden und das ist Unsinn.
Schlitzauge schrieb:
Ich versuche / möchte einfach verstehen, wie das funktionell umgesetzt wird.
Erklär das mal genauer. Was genau verstehst du unter "funktionell umgesetzt wird"? In C++ wird etwas in Maschensprache übersetzt und dann von der CPU ausgeführt. Unter C# wird das in CLI (Common Language Infrastructure) übersetzt, was dann von der CLR (Common Language Runtime) interpretiert wird. Aber das hat nichts mehr direkt mit C++ oder C# zu tun. Daher verstehe ich echt nicht, worauf du hier genau hinauswillst.
Schlitzauge schrieb:
C/C++ dient mir dabei nur zum Vergleich, da ich aus dieser Ecke komme und wenn einige Konstrukte aus C/C++ übernommen bzw. erweitert wurden, lassen sich nebenbei gesagt schon einige Möglichkeiten mit C/C++-Implementierung darstellen und wenn es nur zum Verständnis dient (gewiss nicht alles, aber eniniges).
Also zuerst mal C/C++ existiert nicht. Wenn schon C oder C++.
Und die Vergleiche hinken unglaublich stark zwischen C# und C++. Wie ich oben geschrieben habe, werden C++ und C# Programme komplett anders übersetzt und ausgeführt. Was nun der Punkt-Operator macht, kann jeder Compiler oder Interpreter selber festlegen. In C# ist es halt nach dem Standard so definiert und C++ halt andersrum.Schlitzauge schrieb:
... teilweisen Abwärtskompatibilität sehr wohl einige altbekannte Konzepte übernommen bzw. dergleichen erweitert hat.
Die Abwärtskompatibilität von C# gegenüber C++ ist genau gleich Null. Und wenn Konzepte übernommen wurden dann nur sehr abstrakte. C# und C++ haben komplett unterschiedliche Standards und beziehen sich darin in keiner Weise aufeinander.
Schlitzauge schrieb:
Wäre, schön, wenn man nochmal meinen letzten Post aufgreifen und beantworten könnte -> mir weiterhelfen könnte, thx...
Die Klasse
System.Console
ist einestatic class
. Man kann von ihr keine Objekte anlegen und sie enthält ausschliesslich statische Methoden. Also theoretisch Variante a) von deinen zwei Beispielen.Das könntest du übrigens auch ganz selber über die Referenz herausfinden:
http://msdn.microsoft.com/en-us/library/system.console.aspxMSDN schrieb:
public static class Console
Grüssli
-
Dravere schrieb:
.... daher verstehe ich echt nicht, worauf du hier genau hinauswillst ....
Vielleicht will er die Konzepte und Paradigmen von .NET und C# selbst mit C++ oder native C in einer reinen Windows-Umgebung nachbilden, um die dahintersthenden Details zu verstehen?
Von C++ kommend kann man das alles auch so verstehen und ohne viele Mühe anwenden können.
Vorschlag: Lasse Consol-Anwendungen beseite und beginne mit WindowsForms-Anwendungen. Man lernt nicht erst Kfz-Mechanik, um ein Auto zu fahren oder zu kaufen. Führerschein machen und als Anfänger sicheres Beherrschen üben reichen da aus!