2010-06-02 113 views
1

在Visual Studio网站中,我创建了一个用户控件。此控件是从派生自System.Web.UI.UserControl的类(在App_Code中)派生的。这是一个带有抽象方法的抽象类。然后我试图实现在用户控件的方法,但我从Visual Studio中的以下错误:在网站项目中从抽象基类派生用户控制的问题

Error 1 'WebUserControl.AbstractMethod()': no suitable method found to override C:\Users\User\Documents\Visual Studio 2010\WebSites\Delme\WebUserControl.ascx.cs 10 28 C:\...\Delme\  
Error 2 'WebUserControl' does not implement inherited abstract member 'AbstractBaseClass.AbstractMethod()' c:\Users\User\AppData\Local\Temp\Temporary ASP.NET Files\delme\0eebaa86\f1a48678\App_Web_nrsbzxex.0.cs 14 

错误1说,我的抽象方法的覆盖是无效的,它不承认抽象方法在基类中。错误2表示由asp.net自动构建的部分类不实现抽象方法!

请注意,在Web应用程序项目中使用该代码时,此工作正常。

这是怎么发生的?

回答

1

答案是基类中的抽象方法被标记为内部。虽然这对于所有类都在同一个程序集中的Web应用程序项目都是适用的,但网站会以不同的方式做事。我猜想,部分类的自动创建的一半不会以与我的一半相同的程序集结束,因此内部关键字正在破坏它。

+0

一般来说,抽象方法应该是'protected',这样只有* derived *分类才能访问/覆盖基本方法。 – RPM1984 2010-12-03 07:58:05