я наткнулся на кое-что, чего я действительно не понимаю.
У меня есть проект, в котором у меня есть внутренний интерфейс. Класс, реализующий этот интерфейс, также является внутренним. При реализации интерфейса я делаю все элементы, которые я реализую, внутренними. Явной реализации не делал.
У меня есть два интерфейса и два класса, которые реализуют те интерфейсы, где это работает нормально.
Это будет выглядеть примерно так:
internal interface IA
{
void X();
}
, а затем
internal class CA : IA
{
internal void X()
{
...
}
}
Это отлично работает для двух вышеупомянутых классов. Но когда я пытаюсь сделать это с другим интерфейсом и классом, это не работает. Фактически, для приведенного выше примера я получаю сообщение об ошибке:
'WindowsFormsApplication1.CA' не реализует член интерфейса 'WindowsFormsApplication1.IA.X ()'. 'WindowsFormsApplication1.CA.X ()' не может реализовать член интерфейса, потому что он не является общедоступным.
Я понимаю, что могу сделать методы общедоступными или выполнить явную реализацию (и опустить внутренние и общедоступные модификаторы), но я просто запутался в том, почему он работает с двумя классами, с которыми он работает, и все же, похоже, я не могу воспроизвести его где-либо еще.
Немного подрезав код (потому что он конфиденциальный), это один из тех, которые действительно работают в моем проекте.
internal interface IScanner
{
void SetHardware(Hardware hardware);
void Start();
void PauseScan();
void ResumeScan();
void Stop();
bool InScan { get; }
event ScanCompleteHandler ScanComplete;
}
Затем у меня есть класс:
internal class MyScanner : IScanner
{
internal void SetHardware(Hardware hardware)
{
...
}
internal void Start()
{
...
}
internal void Stop()
{
...
}
internal void PauseScan()
{
...
}
internal void ResumeScan()
{
...
}
internal bool InScan
{
get
{
...
}
}
internal event ScanCompleteHandler ScanComplete;
}
Чтобы сделать вещи еще более странными, я создал еще один внутренний класс называется Temp. Затем я попросил его реализовать интерфейс IScanner, и я скопировал и вставил в него реализацию из MyScanner, и она не компилируется, давая мне ошибку: «Не удается реализовать член интерфейса, потому что он не является общедоступным».
Может кто-нибудь объяснит это несоответствие?
Спасибо
(Обновлено, чтобы исправить опечатку и прояснить некоторый текст)
РЕДАКТИРОВАТЬ: Дополнительная информация
Я запустил код через отражатель, и мои реализации были скомпилированы как явные реализации, даже хотя они не являются явными. Рефлектор не показывает никаких признаков внутренних ключевых слов. Все, что я могу предположить, это то, что это своего рода сбой в компиляторе, который по какой-то причине позволил мне сделать их внутренними и неявными, и что он каким-то образом решил, что это явная реализация.
Я просматривал код несколько раз. Другого объяснения я найти не могу.