Rozumiem, że interfejsy są umowami, a wszelkie zmiany (nawet dodatki) łamią każdy zależny kod. Mogłabym jednak przysiąc, że przeczytałem jakiś czas temu, że jedna z ostatnich wersji .NET (3, 3.5 ??) dodała nowy atrybut, który można zastosować do nowych członków interfejsu. Ten atrybut umożliwiał wersjonowanie i/lub dodawanie członków jako opcjonalnych. Byłoby to coś w rodzaju:C# Interfejsy z opcjonalnymi metodami
interface ITest
{
void MethodOne();
[InterfaceVersion(2)]
void MethodTwo();
}
Wyglądałem wysoko i nisko, ale po prostu nie mogę tego znaleźć. Zastanawiam się, czy po prostu źle zrozumiałem to, co myślę, że czytam i nie ma czegoś takiego. Czy ktoś ma wgląd?
Ok, przytłaczające głosowanie brzmiało "nie, ale ...". Będę więc winić to za długi dzień, a ja będę zmęczony. :) –
Myślałem trochę więcej o tym, jak/jeśli to może działać. O ile się nie mylę, tylko kompilator konsumencki musiałby "wspierać" to. Kompilator interfejsu po prostu doda atrybut do złożenia, podczas gdy kompilator konsumencki będzie tym, który wymusi implementacje. Prawie (choć nie technicznie) byłoby "kodowanie cukru", aby zapobiec ITest1, ITest2, itp. –
Konsument musiałby określić, której wersji używa, ale wtedy masz pewne trudności. A co jeśli twój kod używa obu wersji? Więc masz Class1: [InterfaceVersion (1)] ITest i Class2: [InterfaceVersion (2)] ITest. Następnie robisz "jeśli (Class2 jest ITest)" ... ale który? To tak, jak raz użyjesz atrybutu w jednym miejscu, MUSISZ użyć go WSZĘDZIE. Kompilator musiałby śledzić to wszystko i zmuszać go do działania. Być może łatwiej będzie robić ITest1, ITest2 ... Tak więc ten nowy atrybut "wygody" może w rzeczywistości pogorszyć sytuację. :) –