2011-03-10 13 views
26

Zauważyłem, że czasami gdy wywołuję metody w C#, nazwy parametrów dla metody, którą wywołuję, pojawią się na liście intellisense dołączonej z dwukropek, i że mogę sformatować wywołanie metody w następujący sposób:Wywołanie metody C# z nazwą parametru i dwukropkiem

MethodCall(parameter1:value1, parameter2:value2); 

Czy to jest funkcja nowego języka? Przypomina mi sposób, w jaki można wywoływać procedury składowane w SQL i określać nazwy parametrów w następujący sposób:

spDoSomeStuff @param1 = 1, @param2 = 'other param' 

Czy to jest podobna funkcja? Jeśli tak, do jakiego końca? Jeśli nie, co to jest i do czego służy.

Odpowiedz

31

To nowa funkcja. Zobacz tutaj: http://msdn.microsoft.com/en-us/library/dd264739.aspx nazwane parametry są standardem w ObjectiveC na przykład. Przyzwyczajenie się do nich zajmuje trochę czasu, ale są one dobre. Tylko patrząc, możesz określić, do czego służy dany parametr.

+7

widzę wiele wartości posiadaniem nazwa parametru jest od razu widoczna bez konieczności przechodzenia do definicji metody lub pozwól intellisense powiedzieć Ci, czym one są. – Zannjaminderson

16

nazwane parametry pozwalają jawnie ustawić wartość argumentów w niestandardowe zamówienie niezależnie od podpisu. podpisy metody są określone typy argumentów, tj Foo (int i, bool b), która będzie akceptować tylko argumenty typu int i bool w tej kolejności. Nazwane argumenty umożliwiają przekazanie b pierwszego i drugiego.

+1

jestem zaznajomiony z pojęciem podpisu metody i zastanawiałem się, czy byłoby to pozwalają zmienić kolejność parametrów w wywołaniu. Ciekawi mnie jednak - jaki sens ma możliwość zmiany kolejności? – Zannjaminderson

+1

To naprawdę tylko "czytelność" kodu. Sygnatura metody jest statyczna, ponieważ gdy zostanie wywołana, argumenty zostaną umieszczone na stosie w kolejności, w jakiej są zdefiniowane w sygnaturze metody. Funkcja "Nazwane argumenty" pozwala tylko na zmianę kolejności argumentów zgodnie z własnymi preferencjami. –

+3

@Zannjaminderson Dla mnie prawdziwa wartość pojawia się, gdy masz metody z wieloma wartościami domyślnymi. Jeśli potrzebujesz tylko zmienić niektóre z nich, możesz je wybrać używając nazwanych parametrów. W ten sposób nie trzeba powtarzać wszystkich wartości domyślnych poprzedzających tę, którą chcemy zmienić. –

9

Warto wspomnieć, w przeciwieństwie do opcjonalnych parametrów, można pominąć pewne argumenty i przechodzą tylko te parametry, które są zainteresowane.

public void Example(int required, string StrVal = "default", int IntVal = 0) 
{ 
    // ... 
} 

public void Test() 
{ 
    // This gives compiler error 
    // Example(1, 10); 

    // This works 
    Example(1, IntVal:10); 
} 
0

@Krumelur powiedział, że „nazwanych parametrów są standardem w ObjectiveC na przykład.”

To nie jest poprawne. Objective-C używa notacji Infix, tak, że ta wiadomość rozmowy:

[foo setRed:255 Green:255 Blue:0]; 

jest setRed: Zielony: Niebieski: wiadomość (w tym tych dwukropkami!) Ze (255,255,0) argumenty przeplatane w komunikacie Nazwa.

Chociaż przyznane, na pierwszy rzut oka, składnia Objective-C daje wrażenie, że Objective-C używa nazwanych parametrów. Ale to nie jest poprawne, a niezrozumienie różnicy może być przeszkodą w uczeniu się Objective-C.

(bym odpowiedział w komentarzu, ale jakoś straciłem wszystkie moje punkty reputacji i zaczynam się. Drat. C'est la vie.)