密封类中没有主体的虚拟方法

时间:2012-05-10 21:12:53

标签: c# .net virtual abstract sealed

当我尝试运行以下代码时出错。

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 class HB_Auth.AuthImpl.ReqHandler'   (CS0549)(HB_Auth.Patched)

3 个答案:

答案 0 :(得分:4)

编译错误说明了一切: 您已声明方法,但它们没有正文。所以,要么给他们一个身体,要把它们标记为抽象。 然而,正如我看到你的课程是私密的和密封的,将它们抽象化是不可取的,因为你的课程是密封的,所以没有人可以继承它。

但是,您粘贴的代码看起来像反编译代码?

答案 1 :(得分:3)

  • 您不能在密封的班级中拥有虚拟会员。

CS0549错误:

  

密封类不能用作基类,虚拟方法必须在派生类中实现,这是一个矛盾。

MSDN

  • 需要实施这些功能:

CS0501错误:

  

abstract方法必须具有实现。

MSDN

您可能想要制作课程protectedvirtual函数abstract

答案 2 :(得分:1)

第一个问题:构造函数需要一个体。你不能只声明一个构造函数,你需要定义它。如果需要,可以使用空构造函数:

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

第二个问题:你做了一个密封的类,但有虚拟方法。虚方法仅用于覆盖扩展此类的类,但是您不能扩展密封类,因此不能扩展错误。您需要定义这些方法,或者解密该类(在这种情况下,您需要扩展它以执行任何有用的操作)。