Schnittstellenproblem - public, private, Implementierung C#

17/11/2008 - 19:42 von Sandra Baum | Report spam
Hallo,

ich habe eine Klasse, die eine Schnittstelle implementiert.
public class RData : IControlSystem
{
//public System.Timers.Timer TimerPartMissing;

public RData()
{
...

Wenn ich das schreibe kommt bei public string IControlSystem.Folder


private string _Folder;
public string IControlSystem.Folder
{
set { this._Folder = value; }
get { return this._Folder; }
}


Fehler 1 Der public-Modifizierer ist für dieses Element nicht gültig.
C:\Data\RData.cs 163 19 RData



ein Fehler?

Wenn ich public weglasse geht es.

Rufe ich eine andere Funktion auf.
case State.On:
Folder = @"C:\file_WQT\";
break;

kann ich das so nicht machen.
Fehler 1 Der Name "Folder " ist im aktuellen Kontext nicht vorhanden.
C:\Data\RData.cs 119 13 RData

Mit _Folder geht es wieder.

Sieht da jemand Ungereimheiten?


Hauptanwendung:
Wie ist da jetzt korrekt vorzugehen?
Im Objekt sehe ich die Funktionen nicht.
Weil, wenn nichts angeben ist, private,oder?
RData = new RData.RData();
RInterfaces.IControlSystem interfaceTest = RData;
interfaceTest.ProgramName = "Hallo";
this.ucControlPanel.IControlSystem = interfaceTest;

Das Interface ruft die Werte/Funktionen auf, nicht aber Zuweisungen, oder?

public interface IControlSystem
{
/// <summary>Interface -> Kunde</summary>
string ProgramName { get; }
Müßte ich hier überall public davorschreiben?

Viele Fragen. Ich hoffe man versteht mein Problem.

Grüße Sandra
 

Lesen sie die antworten

#1 Joachim Fuchs
18/11/2008 - 10:17 | Warnen spam
Hallo Sandra,

public string IControlSystem.Folder
{
set { this._Folder = value; }
get { return this._Folder; }
}


Fehler 1 Der public-Modifizierer ist für dieses Element nicht gültig.



ja, bei der expliziten Implementierung des Interfaces sind keine
Modifizierer wie public etc. erlaubt.


Folder = @"C:\file_WQT\";
kann ich das so nicht machen.
Fehler 1 Der Name "Folder " ist im aktuellen Kontext nicht vorhanden.



richtig. Der Zugriff auf explizit implementierte Interface-Member kann nur
über eine Referenz vom Typ des Interfaces erfolgen.

Wie ist da jetzt korrekt vorzugehen?



entweder explizite Implementierung und Typecast auf das Interface
oder implizite Implementierung:

public string Folder
{
set { this._Folder = value; }
get { return this._Folder; }
}


Gruß
Joachim


Dr. Joachim Fuchs - Autor - Dozent - Softwarearchitekt
http://www.fuechse-online.de/beruflich/index.html -
http://vbnet.codebooks.de

Ähnliche fragen