New 不只是用来创建对象的(一)

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";
	}
}

对比红色的地方。后者会报错如下







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值