Verschachtelte Verträge für generische Schnittstellen

9

Ich kann einen verschachtelten Vertragstyp für eine nicht generische Schnittstelle haben:

%Vor%

Aber es beschwert sich, wenn ich versuche, dasselbe mit einer generischen Schnittstelle zu tun:

%Vor%

Die Warnung lautet:

  

Die Vertragsklasse Foo+FooContracts'1 und der Typ IFoo'1 müssen den gleichen Deklarationstyp haben, falls vorhanden.

Er kompiliert ohne Warnung, wenn ich FooContracts aus der Klasse Foo herausbekomme.

  • Warum gibt es diese Einschränkung für generische Schnittstellen?
  • Warum gibt es diese Einschränkung nicht für generische?
Şafak Gür 20.09.2013, 09:20
quelle

2 Antworten

1

Der Grund für die Einschränkung besteht darin, dass wir Verträge vom Deklarationspunkt zu den Einfügepunkten kopieren müssen, und das wird viel komplizierter, wenn generische umgebende Klassen vorhanden sind. Es ist wirklich nicht notwendig, dass Vertragsklassen in anderen Typen, die ich sehe, verschachtelt sind.

    
Manuel Fahndrich 27.09.2013, 17:00
quelle
0

Dieser Code wird auf meinem Computer kompiliert (VS2012, .NET 4.5)

%Vor%

Ich habe das ContractClassForAttribute hinzugefügt, aber ich kann es entfernen.

edit: Auch das ContractClassForAttribute kann auf die äußere oder innere Klasse angewendet werden. Ich weiß nicht, was korrekt ist, aber keiner der Standorte wirkt sich auf die Kompilierung aus.

    
jrv 25.09.2013 18:43
quelle