28. november 2012 - 15:59
Der er
12 kommentarer og 1 løsning
C# Generics spørgsmål
Jeg leger med en lille stump generic kode: public T Instance<T>() where T : class, new() { return new T(); } Når jeg så bruger den fx. Instance<Bil>().Add...bla...bla..bla Er der nogen måde, jeg kan bruge den oprettede instance på? Jeg ved ikke hvordan, jeg tilgår min instantierede objekt. Når jeg skriver this. så havde jeg regnet med, jeg kunne se mit instantierede objekt, men jeg får blot mulighed for at lave en ny Instance<>. Kan det lade sig gøre at mit instantierede objekt er tilgængeligt?
Annonceindlæg fra Bazoom
Få styr på gamer computerens hardware
I gaming-verdenen kan det rigtige hardware være forskellen mellem en uforglemmelig spiloplevelse og konstant frustration. Her er hvad du bør overveje.
22. juli 2024
28. november 2012 - 19:01
#1
Du skal jo have en variabel at tilgå: var instance = Instance<Bil>(); instance.Add(...
28. november 2012 - 19:27
#2
Det behøver jeg jo ikk, når jeg laver en Instance<Bil>().Add. Spørgsmålet er bare hvordan det objekt, der bliver instantieret i den generiske del dvs. public T Instance<T>() where T : class, new() { return new T(); } her returnerer jeg en new T(). Hvordan kan jeg tilgå den... hvad hedder den reference, der peger på i heap'en?
28. november 2012 - 19:41
#3
Din kode virker fint. Hvis Bil har en Add metode. Hvis du vil gemme en ref til det createde objekt skal du goere som angivet i #1.
28. november 2012 - 20:12
#4
Jeps, den har en add metode, som jeg bruger inline...tænkte om jeg kune (gen)bruge mit objekt, nu da det jo var instantieret i baggrunden... Havde faktisk laven en variable var x = Instance<Bil>(); ..men tænkte jeg kunne tilgå det direkte...
28. november 2012 - 20:33
#5
Saa skulle du modificere Instance metode til at gemme og returnere det samme objekt igen. Lyder ikke rigtigt.
28. november 2012 - 20:45
#6
Hmmm kan jeg ikke la' public T Instance<T>() where T : class, new() { return new T(); } om at returnere mig et objekt? Denne metode ligger i en abstract klasse som min anden klasse nedarver / implementerer.
28. november 2012 - 20:55
#7
Jo. Men saa faar du et forskelligt objekt ved hvert kald. Og deraf foelger at hvis du skal bruge det objekt mere end en gang er du noedt til at gemme en ref til det.
28. november 2012 - 20:59
#8
Hmmm....
29. november 2012 - 18:59
#9
Jeg afgiver svar, selvom jeg har har gjort som angivet i svar eksemplet, inden jeg oprettede et spørgsmål her.
01. december 2012 - 19:32
#10
02. december 2012 - 02:37
#11
Du taenker paa noget a la: using System; namespace E { public class MySingleton { private static MySingleton _instance = null; private static object mylock = new object(); private MySingleton() { } public static MySingleton Instance { get { lock(mylock) { if(_instance == null) { _instance = new MySingleton(); } } return _instance; } } public void DoInt(int v) { Console.WriteLine("DoInt: " + v); } public void DoDouble(double v) { Console.WriteLine("DoDouble: " + v); } public void DoString(string v) { Console.WriteLine("DoString: " + v); } } public class MyFluentSingleton { private static MyFluentSingleton _instance = null; private static object mylock = new object(); private MyFluentSingleton() { } public static MyFluentSingleton Instance { get { lock(mylock) { if(_instance == null) { _instance = new MyFluentSingleton(); } } return _instance; } } public MyFluentSingleton DoInt(int v) { Console.WriteLine("DoInt: " + v); return this; } public MyFluentSingleton DoDouble(double v) { Console.WriteLine("DoDouble: " + v); return this; } public MyFluentSingleton DoString(string v) { Console.WriteLine("DoString: " + v); return this; } } public class Program { public static void Main(string[] args) { // refer every time MySingleton.Instance.DoInt(123); MySingleton.Instance.DoDouble(123.456); MySingleton.Instance.DoString("ABC"); // save ref MySingleton ms = MySingleton.Instance; ms.DoInt(123); ms.DoDouble(123.456); ms.DoString("ABC"); // fluent MyFluentSingleton.Instance.DoInt(123).DoDouble(123.456).DoString("ABC"); // Console.ReadKey(); } } } ? Det er ikke helt aabenlyst at fluent syntaxen er mere laesbar. Jeg tror at jeg ville vaelge den foerste loesning (bruge Instance property hver gang).
02. december 2012 - 03:43
#12
Endvidere er fluent god til mange metoder som aendrer state og faa metoder som returnerer data men ikke naer saa god til mange metoder som returnerer data.
02. december 2012 - 13:48
#13
Helt enig Arne_v ... men Fluent Interface lyder til at være hvad han efterspørger siden han ville kunne: var obj = new Some().Add(10).Add(20).Add(30); At jeg så også synes det lugter mærkeligt er en helt anden ting. Det gør det i hvert fald som du selv siger mere besværligt at læse. Men et Fluent Configuration API er top dollar i min verden.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.