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 TypIFoo'1
müssen den gleichen Deklarationstyp haben, falls vorhanden.
Er kompiliert ohne Warnung, wenn ich FooContracts
aus der Klasse Foo
herausbekomme.
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.
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.
Tags und Links c# generics interface code-contracts