Generic forståelse
janus_007 foreslog mig i en anden tråd, jeg skulle kigge på generic caching, med reference til:http://johnnycoder.com/blog/2008/12/10/c-cache-helper-class/
Dette har jeg så gjort + googlet en del....Nu vil jeg så gerne bekræftes/afkræftes i om jeg har forstået det korrekt + et par spørgsmål omkring ting, jeg ikke lige fatter en meter af i forbindelse med (constrained) generics:
Jeg tager udgangspunkt i følgende generic metode:
public static void Add<T>(T o, string key)
{
// NOTE: Apply expiration parameters as you see fit.
// I typically pull from configuration file.
// In this example, I want an absolute
// timeout so changes will always be reflected
// at that time. Hence, the NoSlidingExpiration.
HttpContext.Current.Cache.Insert(
key,
o,
null,
DateTime.Now.AddMinutes(1440),
System.Web.Caching.Cache.NoSlidingExpiration);
}
Generic metoder er metoder, hvor du ikke aner hvad typen er, du arbejder med ind i metoden. Altså i ovennævnte tilfælde, kan jeg f.eks. tage et dataset eller en datatabel - eller for den sags skyld en image ind i metoden og så cacher den den type der nu engang puttes ind?
Det der bestemmer om en metode er generic er <T> og at inputtet så er af typen T -> (T o, string key)?
Jeg har så læst mig til, at man kan lave overloads til en generic metode, der bestemmer typen noget i stil med:
public static void Add<T>(T o, string key)
{
SubAdd(o)
}
void SubAdd<T>(T t);
void SubAdd(DataSet t);
void SubAdd(DataDataTable t);
Nu er mit spørgsmål - er det ikke unødvendigt - så kunne man vel lige så godt lave almindelige overloads metoder istedet? Det smarte er vel, at det ikke er type bestemt?
I det link Janus gav mig, ser det for mig ud som om, han implementerer det i selve web projektet. Vil det ikke være smartest at gemme det i ny projekt, som ligger mellem DAL projektet og så Web projektet som janus_007 skrev til mig i tråden: http://www.eksperten.dk/spm/916383 ?
Nu kommer vi så til constrained:
public static void Add<T>(T o, string key) where T : class
{
// NOTE: Apply expiration parameters as you see fit.
// I typically pull from configuration file.
// In this example, I want an absolute
// timeout so changes will always be reflected
// at that time. Hence, the NoSlidingExpiration.
HttpContext.Current.Cache.Insert(
key,
o,
null,
DateTime.Now.AddMinutes(1440),
System.Web.Caching.Cache.NoSlidingExpiration);
}
Det jeg har forstået her (tror jeg), er at det betyder, man kan afgrænse en generic metode til at være en bestemt type?
Men så hører min forståelse også op - for jeg fatter nada og nix af hvorfor at typen skal være class -> where T : class
Hvis det i min verden skulle have nogen type - så ville det da f.eks. være DataSet eller DataTabel..... Men igen, så fatter jeg ikke, hvad den skal gøre godt for - da det jo så bare kunne være en almindelig metode.....
Nogen der på simsen'sk kan forklare, hvad det betyder?
mvh
simsen :-)