Entwickler-Ecke

Basistechnologien - Klassen einbinden


Talemantros - Do 20.03.14 21:05
Titel: Klassen einbinden
Guten Abend,
ich baue ein kleines Projekt und stehe wie einige Wissen ja noch sehr am Anfang mit C# und Co.

Jetzt würde ich gern eine Updateroutine schreiben.
Davon ausgehen, dass ich dies öfter mal brauchen könnte würde ich dies gern auslagern um sie öfter nutzen zu können.

NUn habe ich mein Hauptprojekt und eine Klassenbibliothek namens MyClasses gemacht.
Im Projekt MyClasses habe ich einen Unterordner "Updates" gemacht und dort 2 *.cs generiert.

Nun habe ich im Hauptprojekt einen Verweis auf das Projekt MyClasses gesetzt und wollte dort in einem Form es einbinden mit:


C#-Quelltext
1:
using MyClasses.Updates //Updates für den Unterordner                    


Aber leider funktioniert dies so nicht. Er findet den Namensraum irgendwie nicht.

Gibt es da ein grundsätzlich anderes Vorgehen? Oder habe ich was falsch gemacht?

Für Hilfe zum Grundsätzlichen Verstehen wäre ich dankbar.

VG
Daniel


Ralf Jansen - Do 20.03.14 21:51

Die using Direktive bindet nichts ein. Wie die Doku [http://msdn.microsoft.com/de-de/library/sf0df423.aspx] schon erklärt ist sie nur dazu da das du Klassen nicht voll qualifizieren musst.
Also das du zum Beispiel einfach File schreiben kannst um die File Klasse zu benutzen und nicht System.IO.File wenn denn ein "using System.IO" in der Source Code Datei erwähnt ist.

Wenn du Typen aus einem anderen Projekt benutzen willst brauchst du eine Referenz auf das andere Projekt (bzw. auf die Assembly wenn das Projekt nur in kompilierter Form vorliegt).
Dazu solltest du im Solution Explorer unterhalb deiner Projektes den Knoten References sehen und im Kontextmenü des Knotens den Menüpunkt zum hinzufügen einer Reference finden.


jfheins - Do 20.03.14 22:10

Und es ist natürlich völlig egal, in welchen Unterordner das dann liegt.

Deine Projektmappe (Solution, *.sln)enthält ja jetzt zwei Projekte (*.csproj). (Nehme ich mal an)
Das eine Projekt erzeugt eine Assembly, also eine dll-Datei. Diese musst du nun in dem anderen Projekt referenzieren. In welchen Ordnern der Quellcode mal lag, spielt nach dem Compilieren keine Rolle mehr.

Falls du eigentlich gar keine dll erstellen wolltest, dann kannst du auch einfach nur einen vorhanden Ordner zum Projekt hinzufügen. Dann wird der Code jedesmal wieder mit compiliert.


Talemantros - Do 20.03.14 22:10

Hi,
Danke für die schnelle Reaktion.
Den Verweis hatte ich gesetzt. Muss ich dann nicht noch den Unterordner benennen?

Ist mein Gedichtes Vorgehen an der Ecke sinnig oder würde man dies anders Lösen?

Bzw. Mache ich ein Projekt für alle globalen Klassen oder soll ich für jedes eine eigenes Projekt einbinden?

Vielen lieben Dank

Gruß
Damiel

Edit: gerade nich die Antwort von jfheins gelesen. Hatte sich überschritten.


Ralf Jansen - Do 20.03.14 22:26

Zitat:
Ist mein Gedichtes Vorgehen an der Ecke sinnig oder würde man dies anders Lösen?

Bzw. Mache ich ein Projekt für alle globalen Klassen oder soll ich für jedes eine eigenes Projekt einbinden?


Konkret ohne Hintergrundwissen nicht zu beantworten. Aber Unterteilungen in Projekte macht man üblicherweise nicht aus technischen Erwägungen wie die von dir genannten sondern aus logischen bzw. fachlichen. Man trennt unabhängige Teile voneinander bzw. Dinge die projektspezifisch sind von Dingen von denen man annimmt das sie auch noch in anderer Form wiederverwendbar sind.

Und für jede Klasse ein Projekt vorzusehen ist natürlich völlig übertrieben. Wenn du zum Beispiel 2 Klassen hast die nur gemeinsam Sinn machen dann pack die auch in ein Projekt. Es hilft überhaupt nicht die aufzuteilen.


Th69 - Do 20.03.14 22:48

Hallo Talemantros,

hast du denn auch in deinen Dateien (im Unterordner "Updates") den Namensraum genauso benannt, also

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
namespace MyClasses.Updates
{
  public class Updater
  {
    // ...
  }
}

?

Du kannst dir im Visual Studio auch mit dem Object Browser (CTRL+ALT+J) [http://msdn.microsoft.com/en-us/library/vstudio/exy1facf%28v=vs.100%29.aspx] (s.a. Where is the object browser in visual studio C# 2010 express edition? [http://stackoverflow.com/questions/3950678/where-is-the-object-browser-in-visual-studio-c-sharp-2010-express-edition]) die DLLs (Namensbereiche, Klassen und Methoden etc.) anschauen, um zu überprüfen, ob er auch so existiert.


Talemantros - Do 20.03.14 22:58

Hi ihr beiden,
@th69. Nein das habe ich nicht :-(. Werde ich morgen direkt antesten. Danke

@Ralf. Du würdest also ein Projekt für den Updater mit zum Beispiel 3cs Dazeien Bauern und schon aber Beispielsweise nen Login in ein anderes Projekt packen?

Danke


Ralf Jansen - Fr 21.03.14 00:28

Vermutlich ja. Ein Updatemechanismus ist etwas Projekt unabhängiges, wenn man den halbwegs vernünftig programmiert. Ein Login kann man zwar auch Projekt unabhängig erstellen wäre aber eher unüblich. Es sind aber definitiv 2 unabhängige Aspekte die keine Abhängigkeiten haben sollten und deshalb in verschiedene Assemblies gehören.


Talemantros - Fr 21.03.14 07:55

Guten Morgen und VIELEN Dank

So langsam aber sicher nimmt dies mit C# Form an.

Schönes Wochenende und bis zur nächsten Anfängerfrage :-)

Gruß
Daniel