C# 多重overide
overide 是覆盖的意思,用在且仅用在虚函数上,虚函数可以是virtual或abstract修饰的,或者是overide修饰的。
文档大概是这么说的。
由此知道,由overide修饰的函数都是虚函数,不需要再使用virtual修饰了(语法上也不允许了),子类也可以使用overide来实现动态绑定。
new则是直接屏蔽掉父类的同名函数,不能实现动态绑定。new可以用在虚函数或一般函数上,一般用在虚函数上。
子类实现一个与父类虚函数的函数签名完全相同的函数时,要么指定new,要么指定override修饰,以明确实现的目的。override表示该函数是一个虚函数,可以被子类覆盖, new表示该函数只是一个普通函数,不能被子类覆盖。
using UnityEngine; using System.Collections; class CBase { public virtual void PrintName () { Debug.Log ("CBase-----"); } public void test () { Debug.Log ("CBase-test-----"); } } class CSon:CBase { public override void PrintName () { Debug.Log ("CSon-----"); } public new void test () { Debug.Log ("CSon-test-----"); } } class CGrandSon1:CSon { public void PrintName () { Debug.Log ("CGrandSon1-----"); } public new void test () { Debug.Log ("CGrandSon1-test-----"); } } class CGrandSon2:CSon { public override void PrintName () { Debug.Log ("CGrandSon2-----"); } } public class testVirtualFunc : MonoBehaviour { // Use this for initialization void Start () { CSon os1 = new CGrandSon1 (); os1.PrintName (); //CSon----- os1.test (); //CSon-test----- CSon os2 = new CGrandSon2 (); os2.PrintName (); //CGrandSon2----- } // Update is called once per frame void Update () { } }