Laden...

Interface optionale Implementierung

Erstellt von csharp_benutzer vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.735 Views
C
csharp_benutzer Themenstarter:in
20 Beiträge seit 2013
vor 7 Jahren
Interface optionale Implementierung

Hallo,

ich brauche dringend euere Hilfe.

Ich habe ein Interface, das aus 2 Methoden besteht


public interface IDataProvider
{
 void TestMethod1(string lastName, string firstName);
 void TestMethod2(string lastName);
}

Wie kann ich nun ermöglichen, dass die TestMethod1 optional wird. Dass die jeweilige Klasse nicht unbedingt TestMethod1 implementieren muss.


public interface Provider: IDataProvider
{
 void TestMethod2(string lastName){}
}

Vielen Dank für euere Unterstützung.

709 Beiträge seit 2008
vor 7 Jahren

Hallo,
du kannst das Interface aufteilen:

public interface IDataProvider
 {
void TestMethod2(string lastName);
 } 
public interface ISpecializedDataProvider : IDataProvider
 {
void TestMethod1(string lastName, string firstName);
 } 

Dann kannst du nach Bedarf Interface 1 oder 2 implementieren.

C
csharp_benutzer Themenstarter:in
20 Beiträge seit 2013
vor 7 Jahren

Ich meinte, ohne dass die jewelige Klasse was an der Signatur ändern muss.

Wir dürfen an der Klasse, die das Interface implementiert, keine Änderungen mehr vornehmen.

16.828 Beiträge seit 2008
vor 7 Jahren

In der Form allein über ein Interface und ohne Änderung der Klasse nicht möglich.

Der Wunsch nach einer optionalen Methode an einem Interface untergräbt den kompletten Sinn des Interfaces.
Ein Interface stellt ein Vertrag dar, welche Methoden definitiv zur Verfügung stehen.

1.029 Beiträge seit 2010
vor 7 Jahren

Hi,

das gibt es so nicht und macht auch eigentlich keinen Sinn wenn du ehrlich bist.

Ein Interface kapselt eine bestimmte Funktionalität, die Nutzer voraussetzen dürfen und müssen. Und da kann es bereits aus logischen Gesichtspunkten nicht richtig sein einzelne Methoden optional zu machen - da man sich bei Nutzung des Interfaces nicht mehr darauf verlassen kann, dass das Interface überhaupt komplett implementiert wurde, womit die optionale Methode aus dem Interface rausfliegen müsste.

Bei deinen Einschränkungen fällt mir dann somit auch nur eines ein:
Implementiere die Schnittstelle vollständig - und wenn es gar nicht anders möglich ist wirfst du bei Aufruf der Methode eine "NotSupportedException".

Empfehlen würde ich die Exception allerdings nicht bei so einem Interface - unschöner Stil - Auswirkungen auf andere Komponenten müssten jetzt und immer wieder geprüft werden.

LG

4.221 Beiträge seit 2005
vor 7 Jahren

Hi,

Bei deinen Einschränkungen fällt mir dann somit auch nur eines ein:
Implementiere die Schnittstelle vollständig - und wenn es gar nicht anders möglich ist wirfst du bei Aufruf der Methode eine "NotSupportedException".

--> NotImplementedException 😃 Ansonsten sehe ich das auch so wie Du.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

709 Beiträge seit 2008
vor 7 Jahren

Siehe während des Entwurfs dazu auch: Interface-Segregation-Prinzip

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

--> NotImplementedException 😃 Ansonsten sehe ich das auch so wie Du.

...und dann die nicht unterstützte Methode am besten explizit implementieren, dann kann sie nur über das Interface aufgerufen werden (nicht mit der normalen ungecasteten Klasseninstanz).

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca