Przekazanie metody jako parametru funkcji - prośba o nakierowanie

0

Cześć.
Chciałbym ulepszyć poniższy kod w taki sposób, aby unikać niepotrzebnych powtórzeń.

        static void Main(string[] args)
        {
           Stopwatch stopwatch = new Stopwatch();
           string pathFileA = "C:\temp\a.xml";
           string pathFileB = "C:\temp\b.xml";

            stopwatch.Start();
            DownloadFileA(pathFileA);
            stopwatch.Stop();            
            Console.WriteLine(stopwatch.Elapsed.ToString());
            stopwatch.Restart();

            stopwatch.Start();
            DownloadFileB(pathFileB); 
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed.ToString());
            stopwatch.Restart();

            stopwatch.Start();
            ParseFiles();
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed.ToString());
            stopwatch.Restart();
        } 

W tym celu potrzebuję utworzyć odrębną metodę do której jako parametr przekażę funkcję którą uruchomię wewnątrz niej. Coś w tym stylu:

        static void RunAndCheckElpasedTime(//nie wiem co powinienem tutaj przekazać)
        {
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            //tutaj uruchamiana byłaby wydelegowana metoda
            stopwatch.Stop();            
            Console.WriteLine(stopwatch.Elapsed.ToString());
            stopwatch.Restart();
       }

Czy mógłby mnie ktoś pokierować jak mógłbym zrealizować taką logikę? A przede wszystkim: czy ona jest słuszna?

0

A czym metoda DownloadFileA różni się czymś od DownloadFileB? Czy tylko ścieżką?

0
cSharpKazik napisał(a):

A czym metoda DownloadFileA różni się czymś od DownloadFileB? Czy tylko ścieżką?

To jest tylko przykład. Chodziło mi o ukazanie problemu. W praktyce DownloadFileA i DownloadFileB mają całkowicie różną logikę - nie można je scalić w jedną metodę.

2

To w takim razie poczytaj sobie o delegatach.

2

A ja polecam zapoznać się ze wzorcem strategia.

0

Dzięki wielkie za odpowiedzi. Zapoznam się z delegatami i wzorcem strategii.
Jeśli ktoś ma jeszcze inne propozycje to zachęcam do ich przedstawienia.

1

Raczej nie bardzo jest co więcej proponować, co najwyżej zamiast łysych delegatów wygodniej napisać: static void RunAndCheckElpasedTime(Action action)a następnie ją wywołać przez:action.Invoke();`.

Jeśli Twoim celem ma być mierzenie czasu wykonywania jakiegoś kawałka kodu, to robisz to źle, bo np. mierzysz tylko jedno wywołanie, nie rozgrzewasz CLRa. Jeśli chcesz to zrobić porządnie, to najprościej użyć gotowego rozwiązania: http://benchmarkdotnet.org/

1 użytkowników online, w tym zalogowanych: 0, gości: 1