Я поразил то, что я действительно не понимаю.
У меня есть проект, где у меня есть внутренний интерфейс. Класс, который реализует этот интерфейс, также является внутренним. В реализации интерфейса я делаю все члены, которые я реализую, внутренние. Я не делал явной реализации.
У меня есть два интерфейса и два класса, которые реализуют те интерфейсы, где это прекрасно работает.
Он будет выглядеть примерно так:
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 на него, и он не будет компилироваться, что даст мне ошибку, которая: "не может реализовать член интерфейса, потому что он не является общедоступным".
Может ли кто-нибудь объяснить эту несогласованность?
Спасибо
(Обновлено, чтобы исправить опечатку и прояснить некоторый текст)
EDIT: Дополнительная информация
Я запустил код через отражатель, и мои реализации были скомпилированы как явные реализации, хотя они не явны. Отражатель не показывает признаков внутренних ключевых слов. Все, что я могу догадаться, это что-то вроде сбоя в компиляторе, который по какой-то причине позволил мне сделать их внутренними и неявными и что он каким-то образом решил это как явную реализацию.
Я просматривал код несколько раз. Я не могу найти никаких других объяснений.