C# new void 用法

new void 是代表隐藏父类中的同名方法,用法类似 virtual 和 override,如下所示,Test方法和TT方法作用相同:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
void Start()
{
BB b = new BB();
b.Test();
b.TT();
}
}

class AA
{
public void Test()
{
Debug.Log("AA.Test()");
}

public virtual void TT()
{
Debug.Log("AA.TT()");
}
}

class BB : AA
{
// 用 new void 是代表隐藏父类中同名的方法
public new void Test()
{
Debug.Log("BB.Test()");
}

public override void TT()
{
// base.TT();
Debug.Log("BB.TT()");
}
}

输出:

1
2
BB.Test()
BB.TT()

BB 中的 Test 如果不加 new 会报如下错误:

1
'BB.Test()' hides inherited member 'AA.Test()'. Use the new keyword if hiding was intended.