2012-12-26 11 views
5

miałem spojrzeć na Path.Combine i zauważyłem, że ma cztery przeciążeń:Kilka przeciążenia dla metody z "params" słowo kluczowe

  1. string, string
  2. string, string, string
  3. string, string , string, string
  4. params string[]

Jak przydatne są trzy pierwsze przeciążenia?
Sposób, w jaki go widzę, czwarty przeciążenie sprawia, że ​​pozostali są zupełnie bez sensu. Spojrzałem na źródło i widziałem, że czwarta implementacja przeciążenia jest trochę inna, ale nawet w tym przypadku spodziewałbym się mieć tylko jedno przeciążenie, które decyduje, której implementacji użyć na podstawie długości tablicy.

+0

Cóż, 'Combine (String, String)' ma na celu kompatybilność wsteczną (wersje sprzed 4 nie miały żadnych innych przeciążeń). – Oded

+0

Jak rozumiem, przeciążenia inne niż params pozwalają pominąć narzut tworzenia tablicy parametrów i iteratora argumentów. Nie pamiętam, gdzie to czytałem, więc raczej komentuję niż odpowiadam. – phoog

+0

@phoog - to ma sens. Większość zastosowań będzie wymagać połączenia do 4 sekcji ścieżek. – Oded

Odpowiedz

5

Zgodnie z tą odpowiedzią, https://stackoverflow.com/a/2796763/385844, ma to na celu uniknięcie narzutu tworzenia tablicy parametrów, a ponieważ przeciążenia inne niż params są wygodne dla użytkowników języków, które nie obsługują list parametrów o zmiennej długości.

Zobacz także

1

Podobnie jak Oded powiedział, okazało się, że to musi być tam dla wstecznej kompatybilności, jak nie mogłem znaleźć go w 2,0, 3,5

I Myślę, że przeciążenie rozpoczęło się w 4.0

  • Path.Combine 4.0 - Jeśli spojrzeć na prawej nawigacji, zobaczysz przeciążenia

Co do innych wielu przeciążeń, nie chciałbym mówić o zespole .net, ale czuję się czują nie ma sensu zwiększanie przeciążeń każdy czas więc zatrzymał się na 4 i pod tablicą ciąg na więcej niż 4 kombinacjach string - co moim zdaniem jest mądry

oparłem wyjaśnienie wyrażenia lambda gdzie zespół zatrzymał się na 16 argumentów

Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

Path.Combine mogło być tak, ale jest bezcelowe.

+1

Tak, ale to nie wyjaśnia 3 i 4 przeciążenia ciągów (w szczególności, ponieważ przeciążenie macierzy params zostało dodane w tym samym czasie). – Oded

+0

@Oded Zobacz moją aktualizację. Mam nadzieję, że jestem na dobrej drodze? – codingbiz

+2

Rzecz "Akcja" jest inna, obecnie nie ma sposobu na ogólną definicję "params". – SWeko

0

mogę mówić tylko z mojego doświadczenia z innych programistów C#.

Nie wszyscy deweloperzy są zaznajomieni lub wygodne ze składnią params (oraz fakt, że nazwa techniczna jest o zmiennej liczbie argumentów parametry funkcyjne nie pomaga).
Wiem, miałem to wytłumaczyć w kółko, więc nie jest niczym niezwykłym, aby zobaczyć połączenia

instance.ParamsMethod(new int[]{1}); 
//or even 
instance.ParamsMethod(new List<int>{1}.ToArray()); 

dla metody napisany jako:

public void ParamsMethod (params int [] Źródło) {}

negowanie wszystkich słodkich cukru syntaktycznego z params (a następnie niektórych).

Tak więc, moim osobistym preferencjom jest zapewnienie przypadku 1 i 2 parametru jako przeciążenia, ponieważ to nieco utrudnia niepotrzebne zagracanie kodu. Połączenie jest nieznacznie wolniejsze z powodu przeciążenia, ale pomaga uzyskać wyraźniejszy kod.

Powiązane problemy