mam trochę starszych kod z metodą foo który ma 700 + przeciążeń:C# nie można nazwać przeciążone metody nierodzajową z metody rodzajowe
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structA obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structB obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structC obj);
//and 700 similar overloads for foo...
Chciałbym narazić te przeciążone metody poprzez pojedynczy metoda z zastosowaniem leków generycznych:
public void callFoo<T>(int len)
where T : new() //ensure an empty constructor so it can be activated
{
T obj = Activator.CreateInstance<T>(); //foo expects obj to be empty, and fills it with data
foo(len, ref obj);
//...do stuff with obj...
}
Niestety ta zwraca błędy: "The best przeciążony metodą dopasowania dla 'foo (int, ref StructA)' ma pewne nieprawidłowe argumenty" i "nie można przekonwertować z "ref T" na "ref StructA" ".
Czy istnieje elegancki sposób, aby to osiągnąć?
Czy typy "classA", "classB" są częścią hierarchii klas? Jeśli tak, to czy możesz wyjaśnić strukturę? – Oded
700 przeciążeń? Dość duże dla klasy. – TalentTuner
Uhu, 700 przeciąża? Na pewno chcesz dodać do tego kolejną warstwę złożoności? – Makach