C# : interface : gleiche Methode in 2-Schnittstellen
Ich habe 2 interfaces,
public interface I1
{
string GetRandomString();
}
public interface I2
{
string GetRandomString();
}
und eine Klasse, die ich eingepflanzt, beide,
public class ClassA : I1, I2
{
string I1.GetRandomString()
{
return "GetReport I1";
}
string I2.GetRandomString()
{
return "GetReport I1";
}
}
Nun in der main-Methode die ich aufrufen will , sind diese interface-Methode, aber nicht in der Lage,
static void Main(string[] args)
{
var objClassA = new ClassA();
objClassA.GetRandomString(); //not able to do this, comile time error ...
}
Ich weiss das , ich bin fehlen einige grundlegende OOPS Zeug , wollte nur wissen, dass.
keine Hilfe ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie manchmal wollen, verwenden Sie eine Schnittstelle und mal der andere, wird es wahrscheinlich nötig sein, eine Besetzung für mindestens einen von Ihnen. Wenn Sie die Kontrolle der Art und kann einen der interface-Funktionen werden direkt und nicht als eine explizite Umsetzung, das wird vermeiden Sie die Anforderung für Gießen auf. Um zu vermeiden, dass zu festgelegten, entweder funktioniert, sollten Sie zur Verfügung stellen, die unter separaten Namen innerhalb des Objekts. Da in C# keine Methode die Umsetzung anyInterface.Boz sein muss, genannt Boz, die beste Wette Ansatz ist wahrscheinlich die Implementierungen von "ifoo") vom.Boz und IBar.Boz rufen Sie einfach die öffentlichen Methoden aufgerufen FooBoz und BarBoz, was könnte dann als "direkt", ohne Zweideutigkeit.
Obwohl casting-Schnittstellen ist preiswert mit Klassen, kann es teuer werden mit Strukturen. Diese Kosten können in einigen Fällen vermieden werden durch die Verwendung von statischen Methoden wie die folgenden:
Dieser Ansatz ermöglicht es, entweder 'foo' - Methode verwendet werden, ohne dass typecast nichts.
Das problem ist, dass diese Funktionen sind keine Memberfunktionen von MyClass, weil Sie definiert sind und I1.GetRandomString als I2.GetRandomString. Sie kann nur rufen Sie Sie auf eine der Schnittstellen:
oder
Können Sie CASTET das Objekt zum Typ der Schnittstelle, die Sie benötigen, und rufen Sie dann die Methode.
Sollten Sie werfen Sie Ihre Objekt auf bestimmte interface-Typ.
Du hast explizit implementiert die Schnittstellen. Also die Implementierungen von Methoden gehören zu den Schnittstellen, nicht die Art, die Sie definiert haben. Soweit die compiler betrifft, die Methode existiert nicht für diesen Typ.
Müssen Sie explizit die Besetzung Ihrer Instanz für die Schnittstelle, die Sie anrufen möchten, und rufen Sie die Methode (wie die anderen gezeigt haben).
Oder besser, wählen Sie eine der Schnittstellen als das "Haupt-interface" ein und lassen das explizite Umsetzung.
d.h.,
Alternativ benutzen Sie einfach eine einzelne Implementierung der Methode (und lassen das explizite Implementierungen).
Markieren Sie Ihre zwei GetRandomString Methoden als public ClassA. Wenn Sie nicht bieten eine access-modifier, es sind standardmäßig privat.
Müssen Sie werfen Sie Ihre Objekt die Schnittstelle, die definiert die version der Methode, die Sie anrufen möchten.
Wenn Sie nur eine einzige version der Methode definiert werden, die in Ihrer Klasse, entfernen Sie die explizite definition der Schnittstelle (in anderen Worten, entfernen Sie den I1. von der ersten definition der Funktion und des gesamten I2.* Methode vollständig)