используя новое ключевое слово Ontrigger в предупреждении единства - PullRequest
1 голос
/ 26 сентября 2019

Я наследую родительский класс, и я добавил новый закрытый void OnTriggerEnter2D в класс chid, и у родительского класса также есть метод OnTriggerEnter2D, но он говорит, что новое ключевое слово не требуется.Я просто хотел пояснить, почему встроенному OnTriggerEnter2D не нужно новое ключевое слово.

1 Ответ

0 голосов
/ 26 сентября 2019

В C # ключевое слово new требуется только в том случае, если любой родитель вашего класса использует члена с таким же именем и подписью, и вы хотите полностью игнорировать член в родительском классе.

например:

public class Parent
{
    public void OnTriggerEnter()
    {
        UnityEngine.Debug.Log("Message From Parent");
    }
}

public class Child : Parent
{
    public new void OnTriggerEnter()
    {
        UnityEngine.Debug.Log("Message From Child");
    }
}

public class Test
{
    public void TestRunner()
    {
        Parent parent = new Child();
        parent.OnTriggerEnter(); // output Message From Child.
    }
}

Это поведение точно такое, как если бы вы переопределяли виртуальный метод, не вызывая его base.VirtualMethod.

public class Parent
{
    public virtual void OnTriggerEnter()
    {
        UnityEngine.Debug.Log("Message From Parent");
    }
}

public class Child : Parent
{
    public override void OnTriggerEnter()
    {
        //base.OnTriggerEnter();
        UnityEngine.Debug.Log("Message From Child");
    }
}

public class Test
{
    public void TestRunner()
    {
        Parent parent = new Child();
        parent.OnTriggerEnter(); // output Message From Child.
    }
}
...