.NET漫游指南-013-C#中隐藏方法和virtual方法浅析

virtual:

virtual关键词修饰的方法我们一般称之为虚方法,这样我们就可以在任何派生类中重写该函数。

        public virtual void virtualMethod()
        {

        }

同样,virtual关键词也可以修饰属性,我们称这个属性为虚属性或者叫‘重写属性’,语法与‘虚方法’的语法一样,在定义部分加上关键词virtual修饰即可。

        public virtual string GetName
        {
            set;
            get;
        }

在C#中函数在默认情况下不是虚函数,但是可以显示的声明成为虚函数(构造函数除外,因为虚函数时用来体现继承中的多态性,构造函数不需要继承)。一般我们将虚函数定义在基类中,因为具体实现方法我们可能没有想清楚,可以在基类中简单实现。可以在后面的继承类中在用override(new用来重写属性)来完善其具体实现。

note:成员字段和静态函数都不能声明为virtual,这个概念只对类中的实例成员有意义。

隐藏方法:

如果基类中实现了一个方法A,但是该方法没有声明为virtual,在派生类实现了一个签名相同的方法A,那么派生类的方法就会‘隐藏’基类的方法。这种情况就造成了隐患,我们在大多数情况下时要重写方法,而不是隐藏方法。因为隐藏方法可能会导致实例调用错误。因为编译器在决定调用那个方法上会产生潜在的冲突,从而导致以外的结果。

抽象方法:

可以发现virtual方法和抽象方法abstract还是又很多相同的地方,尤其是在继承性上。

    abstract public class A
    {
        abstract public void B();
    }

如果一个类继承了一个抽象类,那么这个类必须实现抽象类中的方法。可以说abstract修饰的类和方法就是用来继承的。但是virtual修饰的方法是又方法体的。

采用那种方法更多的是看采用了什么样的设计,如果一开始这个基类就是为了规范开发,可以用abstract对其进行修饰。如果在实现某个方法时,觉得这个方法可能会在子类中被重写,那么就用virtual对其进行修饰。尽量避免采用’隐藏方法‘。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值