下面我来谈谈abstract关键字在脚本中的作用:为了简单首先我贴上代码
public abstract class Singleton : MonoBehaviour
where T : MonoBehaviour
{
private static T m_instance = null;
public static T Instance
{
get { return m_instance; }
}
protected virtual void Awake()
{
m_instance = this as T;
}
}
首先我谈谈这段代码的目的:在内存中只维护一份脚本单例,防止多份实例的出现,比如我们的对象池一个对象就够了,不需要多个对象池实例。
public class ObjectPool:Singleton
{
}
public class Clicent:MonoBehaviour
{
public ObjectPool pool = ObjectPool.Instance; //得到对象池,并且是唯一的一份。
}
这样我们在其他的地方需要拿到对象池就不会出现多份拷贝最主要的是由于采用了T泛型参数,让子类把自身去填充这个T,所以比如对象池,音效管理类等等只需要继承上面代码即可实现单例。不需要单独为每个脚本去写实现单例代码,不仅节省程序员的时间,也节省内存。只是增加了学习成本。
现在来谈我们为啥要加abstract ,首先我们知道在c#里语言说,抽象类和接口是无法创建实例的。
重点来了,加上了这个关键字,我们就不会无意的去实例化我们的Singleton类。有的程序员可能会说我不new这个对象不就得了。回到我们程序的设计原则,能不让程序员有权限修改和操作的就不让,减少意外浪费资源。好了今天到这吧,谢谢。