2012-05-10 10 views
1

次のコードを実行しようとするとエラーになります。封印されたクラスの本体を持たない仮想メソッド

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)' must have a body because it is not marked abstract, extern, or partial (CS0501) (HB_Auth.Patched)

New virtual member HB_Auth.AuthImpl.ReqHandler.BeginInvoke(object[], AsyncCallback, object)' is declared in a sealed class HB_Auth.AuthImpl.ReqHandler' (CS0549) (HB_Auth.Patched)

+0

あなたは何をしようとしていますか? – gdoron

+1

C#はC++ではありません。C#では実装がクラス宣言に入ります。 – Vlad

+0

2つの問題:仮想メソッドにはまだ実装が必要であり、密封されたクラスには仮想メンバを持つことはできません。 – Siege

答えて

3
  • あなたは密閉されたクラスの仮想メンバーを持つことはできません。

CS0549エラー:

CS0501エラー:

A sealed class cannot be used as a base class, and a virtual method has to be implemented in a derived class, which is a contradiction.

MSDN

  • は、機能を実装する必要が

    Non abstract methods must have implementations.

    MSDN

    あなたはおそらくクラスprotectedを作りたい、とvirtual機能abstract

+0

がそれを試したところ、多くのエラーが発生しました – user1388129

+0

@ user1388129。あなたは何をしようとしているのですか?グーグルC#の抽象チュートリアルがあなたを助けることができるように見えます。 – gdoron

4

コンパイラエラーがそれをすべて言う:あなたがメソッドを宣言した 、彼らは身体を持っていません。だから、彼らに身体を与えて、それらを抽象としてマークしてください。 しかし、あなたのクラスはプライベートで封印されているので、抽象クラスを抽象クラスにすることは、あなたのクラスが封印されているので、誰もそれを継承することはできません。

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

+1

私はメモリスティックを失ったときにソースファイルの一部を失ったため、このビットだけではなくすべてが逆コンパイルされています – user1388129

1

第1の問題:コンストラクタにはボディが必要です。コンストラクタを宣言するだけでは定義できません。あなたがしたい場合は、空のコンストラクタを使用することができます。

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

第二の問題を:あなたは、密封されたクラスを作ったが、仮想メソッドを持っています。バーチャルメソッドは、このクラスを拡張するクラスでオーバーライドするためにのみ存在しますが、密接なクラスを拡張することはできません。これらのメソッドを定義するか、クラスのシールを解除する必要があります(この場合、拡張する必要があります)。

+0

(ニッピピング)バーチャルメソッドが_possibility_のために存在します、つまり、オーバーライドする可能性がありますDreivedクラスはそれらをオーバーライドしません。 – Vlad

+1

@Vlad True。しかし、まだ封印されたクラスではない可能性があります。くそったニンピクサー。 ; P –

+0

http://stackoverflow.com/questions/155087/how-can-you-inherit-from-a-sealed-class-using-reflection-in-net Research says ... 「可能です" – Jay

関連する問題