C# 在unity warning中使用新关键字Ontrigger

C# 在unity warning中使用新关键字Ontrigger,c#,unity3d,game-development,C#,Unity3d,Game Development,我继承了一个父类,并在chid类上添加了新的私有void OnTiggerEnter2D,父类也有一个OnTiggerEnter2D方法,但它表示new关键字不是必需的。我只是想澄清一下为什么内置的OnTiggerEnter2D不需要新的关键字。在C#中,只有当类的任何父级使用具有相同名称和签名的成员,并且希望完全忽略父级类中的成员时,才需要new关键字 例如: public class Parent { public void OnTriggerEnter() {

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

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

这是统一魔法:D。基本上,如果你不在你的类中定义它,基本方法不会被调用,也不存在。这不是统一魔法…这是统一魔法:D。基本上,如果你不在你的类中定义它,基本方法不会被调用,也不存在。这不是统一魔法…是的,我在我的基本类中有一个相同的方法名称是的,我有一个相同的名称我的基类中的方法名