0
点赞
收藏
分享

微信扫一扫

C# 难点语法讲解之虚方法(virtual)和隐藏方法的区别---从应用需求开始讲解

烟中雯城 2023-07-01 阅读 42

这里不单独讲虚方法和隐藏方法是什么,很多文章都有讲,这里只讲他们的区别和应用理解。

另外:如果你不懂MonoBehaviour就别管他 Debug.Log就是Console.WriteLine

<一>、隐藏方法

一、隐藏方法的背景故事

从前有个了不起的英雄,他有个绝世武功,叫降龙十八掌,于是,他把这个绝世武功,教给了他儿子。但是儿子偷偷和别人学了个武功,叫九阴真经,但是他偷摸学的,没告诉他爸。

于是,就会出现一个好玩的现象:

他爸自己去打架:用降龙十八掌

他爸叫他去打架:他用降龙十八掌

他自己打架:用九阴真经

二、上述需求的代码实现

1.有个爸爸脚本,里面有个方法是降龙十八掌

public class Father: MonoBehaviour
{
    public void Fight() {
        Debug.Log("降龙十八掌");
    }
}

2.儿子继承了爸爸的降龙十八掌

public class Son : Father { 

}

3.儿子在打架这方面,偷学了九阴真经

public class Son : Father {
    public new void Fight()
    {
        Debug.Log("九阴真经");
    }
}

三、上述代码好玩的结果

    public void Start()
    {
        //爸爸自己去打架
        Father father = new Father();
        father.Fight();   //会输出降龙十八掌

        //爸爸叫你去打架
        Father fCallSon = new Son();
        fCallSon.Fight();   //会输出降龙十八掌

        //你自己去打架
        Son son = new Son();
        son.Fight();        //会输出九阴真经
    }

四、天下代码皆人性(毕竟都是人写的)

这种写法为什么叫做隐藏方法,就是因为瞒上不瞒下,我不想让老爹知道我自己偷着玩,所以叫隐藏方法。

PS:如果再有孙子继承儿子,是直接继承这个隐藏方法,因为老子不能知道,但是告诉儿子就无所谓嘛。

<二>、虚方法

 一、虚方法的背景故事

从前有个学武菜鸟,自己学了一辈子,研究了一个武功,叫菜鸟打法。但是,他自知自己武功非常差,他练的时候就告诉自己儿子:“儿子啊,爸只能教你到这了,如果你有能力,你就继续去研究,如果没能力,你就这么用,爸也不怪你”。

因为儿子不怕爸爸,所以他自己就能随心所欲的改,也不怕他爸知道。

于是,就会出现一个和之前不同的现象:

他爸自己去打架:用菜鸟剑法

他爸叫他去打架:用自创剑法(如果没能力自创【就是没重写】,就继续用菜鸟剑法)

他自己打架:用自创剑法(如果没能力自创【就是没重写】,就继续用菜鸟剑法)

二、上述需求的代码实现

1.有个爸爸脚本,里面有个方法是降龙十八掌

public class Father : MonoBehaviour
{
    public virtual void Fight() {
        Debug.Log("菜鸟剑法");
    }
}

2.儿子继承了爸爸的菜鸟剑法

public class Son : Father {
}

3.儿子在打架这方面,建立了自创剑法

public class Son : Father {
    public override void Fight()
    {
        Debug.Log("自创剑法");
    }
}

三、上述代码好玩的结果

    public void Start()
    {
        //爸爸自己去打架
        Father father = new Father();
        father.Fight();   //会输出菜鸟剑法

        //爸爸叫你去打架
        Father fCallSon = new Son();
        fCallSon.Fight();   //会输出自创剑法

        //你自己去打架
        Son son = new Son();
        son.Fight();        //会输出自创剑法
    }

四、天下代码皆人性(毕竟都是人写的)

这种写法为什么叫做虚方法,就是因为自己知道自己还有很多地方需要补充,很虚,如果儿子补充了,儿子也能光明正大的让爸爸知道。

举报

相关推荐

0 条评论