虚方法和抽象方法比较

抽象方法只有声明没有实现,需要在子类中实现;虚方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现。

今天把类,子类,继承,virtual, abstract, override各种情况都试一下

规则1:覆盖父类同名函数要用new, 重写则要用override
相关代码:
class a
{
  public void aaa()
  {
  }
}

class b : a
{
  public void aaa()
  {
  }
}
错误提示:“b.aaa()”上要求关键字 new,因为它隐藏了继承成员“a.aaa()”
覆盖,重写区别:强制父项时,效果不一样:(a)bb.aaa();

规则2:父项要virtual, abstract, override, 才能重写
相关代码:
class a
{
  public void aaa()
  {
  }
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:“b.aaa()” : 无法重写继承成员“a.aaa()”,因为它未标记为 virtual、abstract 或 override

规则3:virtual类型的要有实体
相关代码:
class a
{
  public virtual void aaa();
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:“a.aaa()”必须声明主体,因为它未标记为 abstract 或 extern

规则4:抽象方法只能在抽象类中
class a
{
  public abstract void aaa();
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:“a.aaa()”是抽象的,但它包含在非抽象类“a”中

规则5:抽象方法不能声明主体
abstract class a
{
  public abstract void aaa()
  {
  }
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:“a.aaa()”无法声明主体,因为它被标记为 abstract

规则6:重写的类一定是子类
class a
{
  public override void aaa()
  {
  }
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:“a.aaa()” : 没有找到适合的方法来重写

规则7:virtual、abstract不能并用
class a
{
  public abstract virtual void aaa()
  {
  }
}

class b : a
{
  public override void aaa()
  {
  }
}
错误提示:抽象方法“a.aaa()”不能标记为 virtual
但override、abstract居然可以
class a
{
  public virtual void aaa()
  {
  }
}

abstract class b : a
{
  public override abstract void aaa();
}

规则8:virtual、override不能并用
class a
{
  public virtual void aaa()
  {
  }
}

class b : a
{
  public override virtual void aaa()
  {
  }
}
错误提示:标记为 override 的成员“b.aaa()”不能标记为 new 或 virtual

规则9:override无法更改访问修饰符
class a
{
  public virtual void aaa()
  {
  }
}

class b : a
{
  protected override void aaa()
  {
  }
}
错误提示:“b.aaa()” : 当重写“public”继承成员“a.aaa()”时,无法更改访问修饰符

最后标准写法
class a
{
  public virtual void aaa()
  {
  }
}

class b : a
{
  public override void aaa()
  {
  }
}
规则10:虚方法必须声明方法体

规则11:class不包含抽象方法和虚方法也可以声明为抽象类

规则12:class 前不加public,其他命名空间不能通过using访问该类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值