Click here to Skip to main content
15,887,485 members
Home / Discussions / C#
   

C#

 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
stovesy25-Jun-08 2:27
stovesy25-Jun-08 2:27 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
leppie25-Jun-08 4:51
leppie25-Jun-08 4:51 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
stovesy25-Jun-08 5:33
stovesy25-Jun-08 5:33 
AnswerRe: Interfaces and Casting - I'm struggling. Pin
leppie25-Jun-08 4:54
leppie25-Jun-08 4:54 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
stovesy25-Jun-08 5:36
stovesy25-Jun-08 5:36 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
leppie25-Jun-08 5:43
leppie25-Jun-08 5:43 
GeneralRe: Interfaces and Casting - I'm struggling. Pin
stovesy25-Jun-08 5:54
stovesy25-Jun-08 5:54 
AnswerRe: Interfaces and Casting - I'm struggling. Pin
Mark Churchill25-Jun-08 15:35
Mark Churchill25-Jun-08 15:35 
Generics having full covariance is a common expectation, and I find the easiest way to explain it is to give a counter-example.

Say you have IBusinessObject< T > { IList< T > ListOfChildren; }.

So with our IBusinessObject< Customer > foo, we can .ListOfChildren and get a IList< Customer >.

Good so far.

Then if we could cast foo to IBusinessObject< object > - if we did .ListOfChildren we could have a IList< object >.

Still everything is peachy until we take that IList< object > and break type-safety by doing .Add(someRandomObject). We obviously can't actually Add any object to that IList, it must be a Customer. So IBusinessObject< object > is not an equivalent type.

IIRC the compiler can be nice to us and provides covariance in the case of a "read-only" generic type, identified by the type parameter being used for read-only properties, and return values only. IEnumerable< T > is probably one of these.

So in summary, IFactoryBase< Customer > cannot be cast to IFactoryBase< IBusinessObjectBase >, they are different types - it is specialized in dealing with Customers, not any IBusinessObjectBase. You might be able to get away with it if IFactoryBase< T > only uses T on the return side of it's members (like IEnumerable< T >), but I'm not sure if this behaviour is fully documented/guaranteed. (Check for me and reply? Wink | ;) )


GeneralRe: Interfaces and Casting - I'm struggling. Pin
stovesy25-Jun-08 22:07
stovesy25-Jun-08 22:07 
Questionfilesystemwatcher Pin
arkiboys24-Jun-08 23:39
arkiboys24-Jun-08 23:39 
AnswerRe: filesystemwatcher Pin
leppie25-Jun-08 2:17
leppie25-Jun-08 2:17 
AnswerRe: filesystemwatcher Pin
Michael Bookatz25-Jun-08 2:42
Michael Bookatz25-Jun-08 2:42 
QuestionRegex.Split with a pipe | as separator Pin
GDavy24-Jun-08 23:38
GDavy24-Jun-08 23:38 
AnswerRe: Regex.Split with a pipe | as separator Pin
Guffa25-Jun-08 0:09
Guffa25-Jun-08 0:09 
GeneralRe: Regex.Split with a pipe | as separator Pin
GDavy25-Jun-08 0:19
GDavy25-Jun-08 0:19 
Questioncannot implicitly convert type 'int' to 'string' Pin
twistz24-Jun-08 23:34
twistz24-Jun-08 23:34 
AnswerRe: cannot implicitly convert type 'int' to 'string' Pin
Christian Graus24-Jun-08 23:46
protectorChristian Graus24-Jun-08 23:46 
GeneralRe: cannot implicitly convert type 'int' to 'string' Pin
leppie25-Jun-08 2:14
leppie25-Jun-08 2:14 
GeneralRe: cannot implicitly convert type 'int' to 'string' Pin
Christian Graus25-Jun-08 12:05
protectorChristian Graus25-Jun-08 12:05 
AnswerRe: cannot implicitly convert type 'int' to 'string' Pin
Harvey Saayman24-Jun-08 23:47
Harvey Saayman24-Jun-08 23:47 
AnswerRe: cannot implicitly convert type 'int' to 'string' Pin
SteveNY25-Jun-08 3:59
SteveNY25-Jun-08 3:59 
Questionhowto: Image right-click context menu upload Pin
Sazarella24-Jun-08 23:24
Sazarella24-Jun-08 23:24 
AnswerRe: howto: Image right-click context menu upload Pin
Christian Graus24-Jun-08 23:34
protectorChristian Graus24-Jun-08 23:34 
GeneralRe: howto: Image right-click context menu upload Pin
Sazarella24-Jun-08 23:45
Sazarella24-Jun-08 23:45 
GeneralRe: howto: Image right-click context menu upload Pin
Christian Graus24-Jun-08 23:49
protectorChristian Graus24-Jun-08 23:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.