c# - What passable value can I use, besides an object instance, to access multiple functions? -


i'm learning c# , i'm looking solution problem perhaps caused bad architecture , doesn't affect real-life programs.

i want pass "something" (not class) holds multiple functions , doesn't need instantiated, example, want have class list of hours , tasks in dictionary, so, example, @ 12:00 want class 'lunch', lunch may depend on other variables, have dict entry check {12, lunchtask}, lunchtask subclass/implementation/derivation of 'task' can safely pass , call sometask.start, sometask.pause, sometask.stop.

i though using dictionary (int,system.type) couldn't working, tried statics can't subclassed , delegates single functions far know. want pass in dict has functions can accessed directly without instantiating. 1 solution know work find inelegant have static class instances of different tasks.

i don't know of better way achieve such basic functionality , perhaps i'm doing terribly wrong. if guys point me in right direction i'd grateful. thank in advance.

here (pseudo-c#) code:

public abstract class task {     public abstract void executetask ();     public virtual void pausetask() {console.writeline ("task paused")}     public virtual void stoptask() {console.writeline ("task stopped")} }  public class lunch : task {     public override void executetask ()     {         console.writeline ("lunch task started");     } }  //the following gonna instantiated public class human {     dictionary<int, something> attributions =  new dictionary<int, something>(){{12, lunch}};     void tobecalledeveryhour () {         int hour = somehour();         if (attributions.containskey(hour))             attributions[hour].executetask();     } } 

in case can use either object pool pattern or factory pattern.

in case of object pool pattern can have map in key should string identify object uniquely, example can class name , value can corresponding object.

like this:

public abstract class task { public abstract void executetask (); public virtual void pausetask() {console.writeline ("task paused")} public virtual void stoptask() {console.writeline ("task stopped")} }  public class lunch : task {    public override void executetask ()    {      console.writeline ("lunch task started");    } }  public class objectcollection{     dictionary<string,task> objectstringmapper= new dictionary<string,string>();     dictionary<string,task> objecttimemapper= new dictionary<string,string>();     public objectcollection(){         objectmapper.add("lunch",new lunchtask());         objecttimemapper.add(12,new lunchtask());             }     public task getobject(string objid){         return objectmapper.get(objid);     }     public task getobject(int time){         return objecttimemapper.get(time);     }    }  public class human {     objetcollection objectsfactory = new objectcollection();     void tobecalledeveryhour () {         int hour = somehour();         if (attributions.containskey(hour))             objectsfactory.getobject(hour).executetask();       } } 

or can opt factory pattern , in can have class creating objects using either reflection or switch case.

note: since i'm java developer , new c# may find syntax's wrong.


Comments

Popular posts from this blog

c# - Better 64-bit byte array hash -

webrtc - Which ICE candidate am I using and why? -

php - Zend Framework / Skeleton-Application / Composer install issue -