0

VS 2010 を使用して C# クラス ライブラリを作成しています。.NET マネージ コードでメソッドをプライベートとしてマークできるとは思えないため、アンマネージ コンパイラで作成されたと思われる DLL を参照しています。

参照先の DLL からインターフェイスを継承して抽象クラスを実装しようとすると、特定のメソッドを実装していないとエラーが表示されます。手動で試しましたが、オーバーライドする適切なメソッドが見つからないため、署名は明らかに一致しません。

'xxx.xxx.xxx.xxx' は、継承された抽象メンバー 'xxx.xxx.xxx.Foo(string, xxx.xxx.xxx)' を実装していません

オブジェクト ブラウザを使用して検索しましたが、使用できないことに気付きました。ひょっとして、継承しないつもりじゃなかったから隠蔽してるんじゃないの?

これを機能させる方法を見つけなければなりません。どうすれば正しい署名を見つけることができますか?

この件についてご協力いただきありがとうございますmj

4

1 に答える 1

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かを作成します。またpublicprotected internalprotected
  • すべてのインスタンス コンストラクターを外部からアクセスできないようにします。つまりinternal、他のアセンブリからのprivate継承を許可しないことを明確にします。TheirType
于 2013-06-14T21:52:38.163 に答える