Featured post
oop - Need to abstract collections of objects (C#) -
in following simplified example, need abstract collection classes in such way printfruitsandeaters(oranges, orangeeaters);
or printfruitsandeaters(apples, appleeaters);
becomes possible:
abstract class fruit abstract class fruiteater class apple : fruit class appleeater : fruiteater class orange : fruit class orangeeater : fruiteater class applecollection : list<apple> class orangecollection : list<orange> class appleeatercollection : list<appleeater> class orangeeatercollection : list<orangeeater>
i've tried templatizing method , collection classes, need access methods specific fruit , fruiteater classes:
class fruitcollection<t> : list<t> class fruiteatercollection<t> : list<t> void printfruitsandeaters<t, s>(fruitcollection<t> fruits, fruiteatercollection<s> eaters)
then want this:
void printfruitsandeaters<t, s>( fruitcollection<t> fruits, fruiteatercollection<s> eaters) t : fruit s : fruiteater { // ... }
this constrain t
, s
types require; calling method fruitcollection<t>
, t
cannot guaranteed fruit
or subtype, result in compile-time error. same s
, fruiteater
.
because of constraint, when working value of type t
able access members of fruit
class, , when working value of type s
able access members of fruiteater
class.
note that, per brian's (deleted) answer, might want add constraints collection types too:
class fruitcollection<t> : list<t> t : fruit { } class fruiteatercollection<t> : list<t> t : fruiteater { }
but this still not allow omit constraints on method.
(also, inheriting list<t>
evil thing do, instead use ilist<t>
)
- Get link
- X
- Other Apps
Comments
Post a Comment