【问题标题】:using new keyword Ontrigger in unity warning在统一警告中使用新关键字 Ontrigger
【发布时间】:2019-09-26 11:16:47
【问题描述】:

我正在继承一个父类,我在 chid 类上添加了新的私有 void OnTriggerEnter2D,父类也有一个 OnTriggerEnter2D 方法,但它说不需要 new 关键字。我只是想澄清一下为什么内置 OnTriggerEnter2D 不需要新关键字。

【问题讨论】:

  • 这是统一的魔法:D。如果你没有在你的类中定义它,基本方法将不会被调用并且不存在。
  • 这不是 Unity 魔法......

标签: c# unity3d game-development


【解决方案1】:

在 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.
    }
}

【讨论】:

  • 是的,我的基类中有相同的方法名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多