2014-11-24 17 views
5

Co jakiś czas (np NUnit na TestCaseData), widzę obiekt, który ma jeden lub kilka konstruktorów następująco:Dlaczego oba parametry i konstruktory obiektów Muti-Object?

MyObject(object arg) 
MyObject(object arg1, object arg2) 
MyObject(object arg1, object arg2, object arg3) 
//guess they got tired of writing constructors? 
MyObject(params object[] args) 

Jeśli obiekt ma konstruktora params, chociaż, co jest zaletą definiowania poprzednich ?

+1

Jedyną zaletą w porównaniu z poprzednimi jest to, że można podać domyślne wartości tych parametrów. –

+0

Widziałem to samo z 'string.Format', moje czyste przypuszczenie, że to jakieś optymalizacje (aby uniknąć używania ciężkich' params'ów tylko dla kilku parametrów). – Sinatr

+0

Amol: Nie jedyny powód, ale wciąż wart +1. – Arithmomaniac

Odpowiedz

6

Zazwyczaj jest to wydajność.

W twoim przykładzie prawdopodobnie jest tak, że MyObject jest alokowany z 1, 2 lub 3 parametrami, a zatem programista jest zoptymalizowany pod kątem tego. Po pierwsze, podstawowa implementacja może być zoptymalizowana, a także w miejscu wywołania parametry mogą być przekazywane bez dodatkowej alokacji pamięci. Przy użyciu params kompilator będzie musiał wstawić kod, aby utworzyć tablicę, a następnie przypisać parametry do tej tablicy przed wywołaniem go. Jeśli jest to norma do wywoływania z 1, 2 lub 3 parametrami, możesz uniknąć tej alokacji.