von allen Ducktypern, die ich bisher so gesehen habe, gefᅵllt mir Gᅵnter
Prossliners NDuck am besten. Das Ding ist klein und schnell.
Es hat aber eine Schwᅵche. Es schmeiᅵt nᅵmlich mit Ausnahmen um sich,
wenn das Interface, auf das getypet werden soll, eine Aggregation von
Interfaces ist. Beispiel:
public class TestClass
{
public int TheInt { get; set; }
public bool TheBool { get; set; }
}
mit
public interface ITheInt
{
int TheInt { get; set; }
}
und
public interface ITheBool
{
bool TheBool { get; set; }
}
und (!)
public interface ITheIntAndBool : ITheInt, ITheBool { } // !!
Die TestClass passt natᅵrlich auf ITheIntAndBool, aber wenn ich durch
Gᅵnters Code debugge, scheppert es wegen
CodeTypeReference codeTypeReferenceInterface = new
CodeTypeReference(interfaceType);
Der Test schlᅵgt fehl mit "Compiler Errors: 'TestClass' implementiert
den Schnittstellenmember 'TheInt' nicht. 'TestClass' implementiert den
Schnittstellenmember 'TheBool' nicht."
Mir scheint fast, dass das eigentlich nicht an Gᅵnters Code liegt,
sondern am CodeDOM.
Weiᅵ hier jemand was dazu, und wie man das geradebiegen kann?
Danke, und schᅵnen 4. Advent!
Carsten
> ...
> public interface ITheIntAndBool : ITheInt, ITheBool { } // !!
> Die TestClass passt nat�rlich auf ITheIntAndBool, aber wenn ich durch
> G�nters Code debugge, scheppert es wegen
> CodeTypeReference codeTypeReferenceInterface = new
> CodeTypeReference(interfaceType);
> Der Test schl�gt fehl mit "Compiler Errors: 'TestClass' implementiert
> den Schnittstellenmember 'TheInt' nicht. 'TestClass' implementiert den
> Schnittstellenmember 'TheBool' nicht."
> Mir scheint fast, dass das eigentlich nicht an G�nters Code liegt,
> sondern am CodeDOM.
Also ich w�rde meinen (ohne Test) dass wohl die Implementierung von
ITheIntAndBool in TestClass fehlt, etwa so:
public class TestClass : ITheIntAndBool {
//...
}
Gruss
Holger
> Also ich w�rde meinen (ohne Test) dass wohl die Implementierung von
> ITheIntAndBool in TestClass fehlt, etwa so:
>
> public class TestClass : ITheIntAndBool {
> //...
> }
Dass das funktioniert, ist klar, aber das ist ja gerade der Clou am
Ducktyping, dass Du die Interfaces zur Laufzeit quasi "auf die Objekte
schmei�t", und wenn die Signaturen passen, kriegst Du einen Proxy
zur�ck, der sich genauso benimmt, als h�ttest Du zur Designzeit
"TestClass : ITheInt" geschrieben. Mit ITheInt funkts ja auch, nur eben
nicht bei dem aggregierten Interface.
Carsten