public class Klasa : KlasaBazowa
{
public override void SetUp()
{
base.SetUp();
// cośtam dalej
}
public void SetUp(params int[] tab)
{
this.SetUp();
//costam dalej
}
}
Okazuje się że przy takiej strukturze nie da się wywołać metody SetUp
()
Program zawsze będzie wywoływał metodę z params wstawiając tablicę o
zerowej długości
Jak myślicie: Czy to jest błąd frameworka czy poprostu "tak ma być"?
Wg. mnie to jest błąd bo przy dziedziczeniu powoduje że kod trzeba
pisać pod tą konkretną sytuację co powoduje że robi się śmietnik
Pozdrawiam i czekam na Wasze opinie
Zauważyłem że takie zachowanie występuje tylko gdy mamy do czynienia z
override metody.
Jeżeli będziemy mieli po prostu metodę SetUp() która należy tylko do
danej klasy to już chodzi ok
co ciekawe także kod:
public class Klasa : KlasaBazowa
{
public void Metoda()
{
base.Metoda();
}
public void Metoda(params int[] liczba)
{
this.Metoda();
}
public void Metoda(params string[] napisy)
{
this.Metoda();
}
}
przejdzie bez problemu ale jak damy override to kompilator zgłasza
błąd
public class Klasa : KlasaBazowa
{
public override void Metoda()
{
base.Metoda();
}
public void Metoda(params int[] liczba)
{
this.Metoda();
}
public void Metoda(params string[] napisy)
{
this.Metoda();
}
}
jeżeli uważacie że to błąd to jak się to zgłasza do MS?
wszedłem na stronę connect.microsoft.com ale jakoś nie mogę się tam
połapać
po pierwsze - je�li to by�by b��d, to nie frameworka, tylko kompilatora C#.
to kompilator na etapie kompilacji rozstrzyga, metodďż˝ o jakiej sygnaturze
mia�e� zamiar wywo�a�.
tu akurat moim zdaniem to nie jest b��d, tylko konsekwencja zasady, zgodnie
z kt�r� metoda z klasy ma, przy dopasowaniu "bezstratnym", pierwsze�stwo
przy wywo�ywaniu nad metodami z klasy macierzystej o nawet lepszej
sygnaturze. ponadto trafiasz na problem, w kt�rym "params int[]" dopasowuje
siďż˝ do listy pustej.
ja bym to rozwi�za� tak: zmieni�bym sygnatur� tej metody z "params" na tak�
public void SetUp(int[] tab)
{
}
to co prawda utrudnia wywo�anie, bo trzeba w miejscu wywo�ania utworzy�
jawnie tablic�, ale pami�taj, �e po pierwsze "params" to i tak cukier
syntaktyczny, kt�ry rozwija si� do takiego wywo�ania z tablic�, a po
drugie - taka definicja przestaje konfundowa� kompilator, bo wywo�anie z
pustďż˝ tablicďż˝ to SetUp( null ), a bez tablicy - SetUp().
pozdrawiam
Wiktor Zychla
no tak faktycznie mógłby być to błąd kompilatora a nie frameworka
zastanawia mnie jednak dlaczego kompilator uznaje w tym momencie oba
wywołania za jednoznaczne
SetUp() == SetUp(null)
wydaje mi się to nielogiczne