Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Günter Prossliners NDuck / Problem mit aggregierten Interfaces

0 views
Skip to first unread message

Carsten Posingies

unread,
Dec 19, 2009, 4:21:22 PM12/19/09
to
Hallo NG,

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

Holger Boskugel

unread,
Dec 21, 2009, 9:55:26 AM12/21/09
to
Hallo Carsten

> public class TestClass
> {
> public int TheInt { get; set; }
> public bool TheBool { get; set; }
> }

> ...

> 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

--
http://www.vbwebprofi.de

Carsten Posingies

unread,
Dec 22, 2009, 6:40:36 AM12/22/09
to
Hallo Holger,

>> 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."

> 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

0 new messages