Zugriff auf Projekte in Projektmappe

Alphamännchen

Mitglied
Hallöle,

wenn ich unter einer Projektmappe verschiedene Projekte anlege, ist es dann möglich unter diesen verschiedenen Projekten Daten auszutauschen und wie funktioniert das Ganze.

Klar kann ich bei einer erstellten Klassenbibliothek (DLL) diese als Verweis einbinden und somit auf die Methoden dieser DLL zugreifen, jedoch ist es für mich beispielsweie umgekehrt ein Rätsel, also der Zugriff von der DLL auf beispielsweise ein TextBoxFeld des Startprojektes.

Wenn ich mehrere C# Dateien in einem Projekt anlegen kann ich von jeder Klasse ein Objekt erzeugen und damit darauf zugreifen, aber bei Dateien in unterschiedlichen Projekten.

Ich hoffe ihr könnt mir diesbezüglich helfen, da ich wirklich schon nächtelang im Internet disbezüglich auf der Suche war und nichts finden konnte.

Sollte dies vielleicht sogar nicht möglich sein?
 
Ein Projekt entspricht einem .NET Assembly.
Ein Assembly ist entweder ein Programm (Konsole oder Window) oder eine Typenbibliothek.

Eine Typenbibliothek ist passiv. D.h. sie stellt nur eine Dienstleistung zur Verfügung. Ein anderes Assembly kann in der Bibliothek Klassen "ausleihen" und damit anstellen, was es will.

Ein Programm bietet diese "Dienstleistung" nicht an, kann aber eben Klassen aus Dll's nutzen.
Wenn du dein Projekt mehrschichtig, also Startprojekt = Benutzerinterface; Dll als Logik, programmieren willst, muss du die Methoden, die du in die Dll einfügst so programmieren, dass sie in jeder Anwendung verwendet werden können.

Eine Möglichkeit, die ich auch ab und zu nutze, sind die Interfaces.
Du erstellst ein Interface, das alle Methoden und Properties enthält, auf die du von deiner Dll aus zugreifen willst. Im Konstruktor der Bibliotheksklasse verlangst du ein Objekt vom Typ dieses Interfaces, welches du dann als Mitglied der Klasse speicherst. Ich kann dir leider nur VB.Net Code zeigen:
Bibliothek:
Code:
Public Interface App
	ReadOnly Property Textfeld() as TextBox
End Interface


Public Class Bibliotheksklasse
	
	Private app as App

	Public Sub New(hostApp as App)
		app = hostApp
		app.Textfeld.Text = "Hallo Welt!"
	End Sub
End Class
Anwendung:
Code:
Public Class Anwendungsklasse
	Implements App

	Public BibKla As New Bibliotheksklasse(Me)

	[irgendwas]


	Private ReadOnly Property Textfeld() as TextBox Implements App.Textfeld
		Get
			return Me.txtFeld
		End Get
	End Property
End Class
Ich hoffe, ich habe keine Fehler gemacht. Ich beherrsche die C# Syntax leider nicht sooo gut. Wenn nötg soll das doch bitte mal jemand übersetzen und verbessern. Danke.
 
Danke Sunray für deine schnelle Antwort, jetzt ist mir schon einiges klarer geworden.

Sprich: ein Projekt wird erstellt um dieses als Startprojekt festzulegen (Also beispielsweise die Benutzeroberfläche für die Eingaben des Users). Dieses Projekt kann dann natürlich mehrere Quellcodedateien enthalten, welche miteinander kommunizieren.

ein anderes Projekt dient als Klassenbibliothek (sprich DLL) um die Logik des Programmes zu hinterlegen ...

ALSO: Macht es keinen Sinn zwei "Programm-Projekte" anzulegen, die miteinander kommunizieren müssen, dies muss man in einem Projekt machen.

Mehrere Programm-Projekte sind nur dann nötig, wenn es mehrere Exe Files geben soll, die miteinander korrespondieren (beispielsweise Client.exe und Server.exe).

Das war schon mal sehr erhellend für mich (Danke).

Jetzt werde ich mich mal an dein VB Skript zu schaffen machen und versuchen, dieses irgendwie auf C# umzusetzten. Rein logisch ist mir soweit klar, was geschehen soll.

Bin mal gespannt .....
 
So, puuuuuhhhhhh fertig.

Ich habe die letzten Stunden damit verbracht, eine "Konvertierungsmaschine" von VB.NET zu C# zu finden --> gefunden

Dann habe ich den Code getestet und angepasst, dies ist dabei herausgekommen (falls es jemanden interessiert?):

Bibliothek:

Code:
public interface App 
{ 
	TextBox Textfeld{ get; }
} 

public class Bibliotheksklasse
{
	private App app; 

	public Bibliotheksklasse(App hostApp) 
	{ 
		app = hostApp; 
		app.Textfeld.Text = "Hallo Welt"; 
	} 
}
[

Anwendung:

Code:
public class Anwendungsklasse: App
{
	public Anwendungsklasse()
	{
		Bibliotheksklasse BibKla = new Bibliotheksklasse(this); 
	}

	public TextBox Textfeld { 
	get { 
		return this.txtFeld; 
		} 
	} 
}
[

Hierbei sind mir drei Sachen aufgefallen, die ich anpassen musste:

1. Muss dass Interface für das Textfeld mit { get; } initiieiert werten
2. Musste der Konstroktor für die Bibliotheksklasse im Konstruktor der Anwendung aufgerufen werden
3. Musste die Methode "Textfeld" auf public "gestellt" werden.

Auf alle Fälle klappt das Ganze und für deine Hilfe Sunray bin ich dir sehr dankbar.

Nunja weiter gehts mit dem coden .....
Bis zu den nächsten Problemen
 

Neue Beiträge

Zurück