本人写了两个类:
namespace AspNet.MyClass
{
public class a
{
protected int eye;
protected int face;
public a()
{
eye = 2;
face = 1;
} protected void ShowStr()
{
    System.Web.HttpContext.Current.Response.Write(face);
}
}
}namespace AspNet.MyClass
{
public class b : a
{
public b()
{
eye = 4;
}
override protected void ShowStr()
{
System.Web.HttpContext.Current.Response.Write(eye);
}
}
}这样编译时出错,提示:
D:\Asp.Net\MyClass\b.cs(17): “AspNet.MyClass.b.ShowStr()” : 无法重写继承成员“AspNet.MyClass.a.ShowStr()”,因为它未标记为 virtual、abstract 或 override为什么?

解决方案 »

  1.   

    protected virtual void ShowStr()
    {
        System.Web.HttpContext.Current.Response.Write(face);
    }
      

  2.   

    或者在子类中把
    override protected void ShowStr()
    改为
    new protected void ShowStr()
      

  3.   

    只有写了virtual 的函数,才允许在子类中使用override来重载,否则,使用New来标记这个函数。
      

  4.   

    基类的成员用VIRTUAL来修饰,这样的话,在子类继承之后,可以用OVERRIDE来实现,便于动态联编.
    greenery(greenery)正解,用NEW的话,就只是完完全全的覆盖基类的成员,而在子类中用一个同名的成员罢了,与基类没有任何关系.