sagen, ich habe diese beiden SchnittstellenNichtgenerisches Kontra
public interface A
{
}
public interface B
{
A a {get;}
}
Und diese beiden Betontypen
public class ConcreteA : A
{
}
public class ConcreteB : B
{
public ConcreteA a {get;}
}
Diese nicht kompiliert, da Schnittstelle B eine Schnittstelle A anstelle eines ConcreteA erwartet.
Zur Zeit erzeuge ich Code mit Schnittstellen automatisch, und ich lief in diesen Senario. Anstatt alle meine Modelle zu implementieren und die explizite Schnittstellendefinition zu ändern, in der die Schnittstellenversion meiner konkreten Klasse zurückgegeben würde, würde ich dies gerne mit einer Version der Kovarianz machen, aber ich bin mir nicht sicher, ob es einen Weg gibt dies oder wenn dies eine Beschränkung von C# ist.
Gibt es eine Schnittstelle Art und Weise Version von Kontra, die mich, dies zu tun erlauben würde?
1.1 Wenn nicht, gibt es einen expliziten Grund, warum dies nicht implementiert wird, oder gibt es ein Szenario, in dem ein Problem auftreten würde, wenn dies implementiert wäre?
Sie benötigen Generics, weil 'B b = new ConcreteB();' es Ihnen erlauben würde, 'a' auf alles zu setzen, das' A' implementiert, nicht nur 'ConcreteA'. – juharr
@juharr dein Recht danke, ich sah das aus. Angenommen, Sie hätten nur die Schnittstelle bekommen, wäre aber immer noch in der Lage, aber das wäre eine spezielle Nischenanwendung. –