2013-06-14 3 views
0

Я пишу библиотеку классов C#, используя VS 2010. Я ссылаюсь на DLL, которая, как мне кажется, была написана с неуправляемым компилятором, потому что я не считаю, что вы можете отметить метод как закрытый в управляемом .NET коде.Не удается наследовать интерфейс со скрытыми методами

Когда я пытаюсь наследовать интерфейс из связанной DLL и реализовывать абстрактный класс, он жалуется, что я не реализовал конкретный метод. Я пробовал вручную, но подписи явно не совпадают, потому что он говорит, что подходящий метод не найден для переопределения.

«xxx.xxx.xxx.xxx» не реализует унаследовали абстрактный элемент «xxx.xxx.xxx.Foo (строка, xxx.xxx.xxx)»

Я искал, используя объектный браузер и понял, что это не доступен мне. Он скрыт, вероятно, потому, что он не должен был наследоваться?

Мне нужно выяснить, как это сделать. Как я могу найти правильную подпись?

Заранее спасибо вам помочь в этом вопросе MJ

+0

У вас есть это в обратном направлении. Вы наследуете от абстрактного класса и реализуете интерфейс. Пожалуйста, разместите код, чтобы мы могли видеть, какую проблему вы имеете. –

+1

Нам нужно увидеть настоящие объявления, включая все модификаторы. В противном случае невозможно помочь. (Также появляется реальное сообщение об ошибке) –

+0

Можете ли вы отправить какой-то код. Объявление интерфейса, а также ваш код для реализации интерфейса. – Jay

ответ

0

Моя догадка, основанная на ограниченной информации, которую вы в том, что DLL имеет класс, который выглядит примерно так:

namespace Xxx 
{ 
    public abstract class TheirType 
    { 
    // accessible instance constructor 
    protected TheirType() 
    { 
    } 

    // inaccessible abstract member 
    internal abstract void TheMethod() 
    { 
    } 
    } 
} 

Это позволяет люди сначала думают, что они могут быть получены из TheirType вне сборки, потому что этот конструктор доступен. Но у них нет возможности реализовать абстрактный элемент TheMethod, потому что элемент internal недоступен в другой сборке.

Было бы более дружелюбным, если авторы TheirType либо

  • решить их тип должен позволять наследование извне, и, следовательно, сделать TheMethod либо public, protected internal или protected; ИЛИ
  • сделать все конструкторы экземпляров недоступными извне, то есть internal или private, чтобы было очевидно, что они не позволяют людям наследовать TheirType из других сборок.
+0

Спасибо Jeppe за ваш ответ, имеет смысл. – user2487541

Смежные вопросы