Mam problem z następującą metodą https://pastebin.com/bHSQCBCR Mam napisać metodę wykonaj(), która dla podanych jako argument delegatów (procedur) wykona je kolejno na przechowywanej w klasie tablicy, np.: tablica = new TablicaObliczeniowa(1, 2, 5, 4, 3); tablica.Wykonaj(Array.Sort, Array.Reverse); Console.WriteLine(tablica); // wypisze: [5, 4, 3, 2, 1] Mogę skorzystać z delegata action(), ale nie mam pojęcia jak to zrobić? Pomożecie?
@ksMaras: No to w tym co jest w pastebin jest prawie dobrze. Kilka uwag: 1. Pojedyncza operacja np Array.Sort jako argument bierze tablice intów czyli int[] i nie zwraca niczego czyli odpowiedni delegat dla pojedynczej operacji to: Action. W twoim przypadków chcesz mieć tablice takich delegatów, czyli: Action[] 2. Potem jak wywołujesz to nie musisz i nawet nie możesz przekazywać argumetu przez referencje wieć skasuj słówko kluczowe ref
@extern-int: Dobra, działa to teraz jeszcze mam jedno pytanie może i trywialne, ale mam jeszcze zamienić całą klasę na typ generyczny, przyjmującą dowolny inny typ. W którym miejscu oprócz w nazwie klasy muszę pozmieniać typ, aby działało dla innych typów? https://pastebin.com/kTw6TDK0
@ksMaras: Zależy co chcesz żeby było twoim typem... co ma znaczyć TablicaObliczeniowa? Naturalną odpowiedzią jest, że chcesz, aby elementy tej tablicy były typu T. Obecnie klasa jako elementy ma int'y. Tak więc pierwsze co musisz zrobić to zamienić public int[] tab; na public T[] tab;. Dalej już jak możesz zamieniać int na T tam gdzie kompilator się wywala błędy. Podejrzewam, że w rezultacie zamienisz wszystkie int na T.
@ksMaras: Jak pytasz publicznie, to rozwiązanie podaj też publicznie, może się przydać komuś kto w przyszłości będzie szukał rozwiązania podobnego problemu.
A wiecie, że ten skorumpowany łysy s-------n z FIFA jest na każdym meczu? Czasem różnica to tylko parę godzin, więc aby na nie dotrzeć, wszędzie lata prywatnym odrzutowcem. A ty p0laku z---------j z butelkami plastikowymi do Lidla dla planety xD
tablica = new TablicaObliczeniowa(1, 2, 5, 4, 3);
tablica.Wykonaj(Array.Sort, Array.Reverse);
Console.WriteLine(tablica); // wypisze: [5, 4, 3, 2, 1]
Mogę skorzystać z delegata action(), ale nie mam pojęcia jak to zrobić? Pomożecie?
#csharp #programowanie
1. Pojedyncza operacja np
Array.Sortjako argument bierze tablice intów czyliint[]i nie zwraca niczego czyli odpowiedni delegat dla pojedynczej operacji to:Action. W twoim przypadków chcesz mieć tablice takich delegatów, czyli:Action[]2. Potem jak wywołujesz to nie musisz i nawet nie możesz przekazywać argumetu przez referencje wieć skasuj słówko kluczowe ref
3.
TablicaObliczeniowa? Naturalną odpowiedzią jest, że chcesz, aby elementy tej tablicy były typu T. Obecnie klasa jako elementy ma int'y. Tak więc pierwsze co musisz zrobić to zamienićpublic int[] tab;napublic T[] tab;. Dalej już jak możesz zamieniać int na T tam gdzie kompilator się wywala błędy. Podejrzewam, że w rezultacie zamienisz wszystkie int na T.@ksMaras: Jak pytasz publicznie, to rozwiązanie podaj też publicznie, może się przydać komuś kto w przyszłości będzie szukał rozwiązania podobnego problemu.