public virtual void Function و overriding در یونیتی
دوشنبه, ۱۰ خرداد ۱۳۹۵، ۱۱:۵۳ ب.ظ
gameover.blog.ir
توابعی داخل هر کلاس والد که قبل از نوعشون virtual بیاد اجازه ی override شدن دارن.
یعنی میشه همون تابع رو با همون نام در کلاس دیگه ای مجددا به طور دیگه ای تعریف کرد(با ورودی و خروجی و پارامترهای متفاوت)
مثال :
کلاس والد ما اینه(کلاس Parent ) :
using UnityEngine; using System.Collections; public class Parent : MonoBehaviour { void Start () { ParentFunction(); } public void ParentFunction() { print("parent says hello"); FunctionA(); FunctionB(); } public void FunctionA() { print("function A says hello"); } public void FunctionB() { print("function B says hello"); } }
کلاس فرزند Child که از کلاس والد Parent مشتق میشه(تمام توابع و متغیرهاشو به ارث می بره):
public class Child : Parent { void Start () { ParentFunction(); } }
در اینجا برای مثال در کلاس Parent تابعی به اسم FunctionA داشتیم که Ovveride نمیشه چون virtual قبلش نداشت.
اگر بخوایم Override اش کنیم اول باید تعریفش رو در کلاس Parent به این صورت تغییر بدیم :
public virtual void FunctionA () { print("function A says hello"); }
حالا می تونیم اون رو در تابع Start به این صورت Ovveride کنیم برای اینکه خروجیش فرق کنه :
using UnityEngine; using System.Collections; public class Child : Parent { void Start () { ParentFunction(); } public override void FunctionA() { print("Im a new version of function A"); } }
خروجی ها شبیه اینه :
parent says hello
Im a new version of function A
function B says hello
Im a new version of function A
function B says hello