New 能用来干嘛? 相信学过面向对象的程序员都知道,是用来new 一个对象,申请内存空间的。
而New还有其他用处!!!
用处一: 隐藏父类的方法或者属性
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;
public class TestNew : MonoBehaviour {
void Start () {
StartCoroutine ("StartCor");
}
public IEnumerator StartCor(){
return null;
}
//隐藏 MonoBehaviour 的 StartCoroutine 方法; 如果不加入new关键字这里会有警告如下
<img src="https://img-blog.csdn.net/20160325173420809?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
public Coroutine StartCoroutine(string method){
Debug.Log ("Test new class StopCoroutine");
return null;
}
}
比如这里不希望别人调用startcoroutine方法就可以这样隐藏掉。当然这里只是个例子而已,别当真
用处二:泛型的约束 (new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数)
using UnityEngine;<strong>
</strong>using System.Collections;
public class TestNew : MonoBehaviour {
void Start () {
Genericer<MyCls> gen = new Genericer<MyCls>();
gen.GetItem ();
}
}
class Genericer<T> where T : new()
{
public T GetItem()
{
return new T();
}
}
class MyCls
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
<span style="color:#ff0000;">public </span>MyCls()
{
_name = "Emma";
}
}
好了如果你改成下面的
using UnityEngine;
using System.Collections;
public class TestNew : MonoBehaviour {
void Start () {
Genericer<MyCls> gen = new Genericer<MyCls>();
gen.GetItem ();
}
}
class Genericer<T> where T : new()
{
public T GetItem()
{
return new T();
}
}
class MyCls
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
<span style="color:#ff0000;">private </span>MyCls()
{
_name = "Emma";
}
}
对比红色的地方。后者会报错如下