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)' 必须有一个主体,因为它没有标记为抽象、外部或部分 (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

您可能想要制作课程protectedvirtual功能abstract

于 2012-05-10T21:14:51.393 回答
1

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

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

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

于 2012-05-10T21:17:01.987 回答