0

次のコードを実行しようとすると、エラーになります。

private sealed class ReqHandler 
{
    public ReqHandler(object @object, IntPtr method);

    public virtual IAsyncResult BeginInvoke(object[] args, AsyncCallback callback, object @object);

    public virtual d0 EndInvoke(IAsyncResult result);

    public virtual d0 Invoke(object[] args);
}

私が得るエラーはです。

HB_Auth.AuthImpl.ReqHandler.ReqHandler(object, IntPtr)' には、abstract、extern、または partial とマークされていないため、本体が必要です (CS0501) (HB_Auth.Patched)

新しい仮想メンバーHB_Auth.AuthImpl.ReqHandler.BeginInvoke(object[], AsyncCallback, object)' is declared in a sealed classHB_Auth.AuthImpl.ReqHandler' (CS0549) (HB_Auth.Patched)

4

3 に答える 3

4

コンパイラ エラーがすべてを物語っています。メソッドを宣言しましたが、ボディがありません。したがって、それらに本文を与えるか、それらを抽象としてマークします。ただし、あなたのクラスはプライベートで封印されていることがわかります。あなたのクラスは封印されているため、クラスを抽象化することはできません。誰もそれを継承することはできません。

しかし、貼り付けたコードは、逆コンパイルされたコードのように見えますか?

于 2012-05-10T21:15:00.753 に答える
3
  • シール クラスに仮想メンバーを含めることはできません。

CS0549 エラー:

シール クラスを基底クラスとして使用することはできず、仮想メソッドは派生クラスで実装する必要があり、矛盾しています。

MSDN

  • 関数を実装する必要があります。

CS0501 エラー:

abstractメソッドには実装が必要です。

MSDN

protectedおそらく、クラスとvirtual関数を作成したいと思うでしょうabstract

于 2012-05-10T21:14:51.393 に答える
1

最初の問題:コンストラクターには本体が必要です。コンストラクターを宣言するだけでなく、定義する必要があります。必要に応じて、空のコンストラクターを使用できます。

public ReqHandler(object @object, IntPtr method) {}

2番目の問題:封印されたクラスを作成しましたが、仮想メソッドがあります。仮想メソッドは、このクラスを拡張するクラスをオーバーライドするためだけに存在しますが、封印されたクラスを拡張することはできないため、エラーが発生します。これらのメソッドを定義するか、クラスのシールを解除する必要があります(この場合、有用なことを行うには、クラスを拡張する必要があります)。

于 2012-05-10T21:17:01.987 に答える