Reaktoryzuję bazę kodu projektu, nad którym obecnie pracuję, aby klasy/interfejsy, które nie są użyteczne poza ograniczeniami zespołu, powinny być zadeklarowane jako wewnętrzne (a nie publiczne) . Ale ja napotkasz problem z następującego kodu:Jak zaimplementować elementy interfejsów wewnętrznych?
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
moje pytania:
Dlaczego członkowie interfejsów wewnętrznych muszą być publicznie wdrożony? Jeśli implementujesz interfejs na wewnętrznej klasie, czy członkowie nie powinni być wewnętrzni? Nie jest to duży problem, ponieważ członkowie interfejsu i tak nie będą publicznie dostępni, ponieważ klasa jest wewnętrzna. Po prostu wydaje się to sprzeczne z intuicją.
Głównym problemem jest to, ze scenariuszem powyżej ponieważ nie mogę mieć getter publicznego dla IFirstInterface ponieważ jest rzekomo wewnętrzna czyli interfejs pojawia się następujący komunikat o błędzie z kompilatora:
Niekonsekwetne dostępności : własność typu 'IFirstInterface' jest mniej dostępny niż własności 'Implementer.First'
Czy Ther e w inny sposób?
Uwaga: Zdaję sobie sprawę, że nie ma chyba trochę wartość w tym refactoring ćwiczenia, ale myślałem, że będzie to dobry sposób dla mnie głębiej rozumieć konsekwencje wewnętrznego modyfikatora.
Jeśli jej rozwiązaniem, można obejść ograniczenia metody interfejsu jest publiczny za pomocą abstrakcyjnej klasy bazowej zamiast. –