例如:
Enemy enemy;
if(enemy == null)
{
Enemy enemy = new Enemy();
}
如果这个敌人死了,以某种方式删除实例并在上面声明的同一个变量中重新实例化。
编辑:我正在将它用于地牢爬虫控制台游戏,我希望,在你杀死一个怪物之后,你会遇到另一次遭遇。
答案 0 :(得分:2)
是的,这是可能的,但您必须了解以下两行代码之间的区别。
这是分配的一个例子:
a = 10;
这是带有初始化程序的变量声明的示例。
var a = 10;
变量可以根据需要分配多次,但只能声明一次(在范围内)。
所以你绝对可以这样做:
var enemy = new Enemy(); //Declaration
enemy = new Enemy(); //Assignment
enemy = null; //Assignment
enemy = new Enemy(); //Assignment
但你不能这样做:
var enemy = new Enemy(); //Declaration
var enemy = new Enemy(); //Declaration - will not compile
回到您的示例,工作版本可能如下所示:
class Game
{
private Enemy enemy = null; //You have to initialize a field before you can check it, even if you're just checking for null
public Enemy GetEnemy()
{
if (enemy == null)
{
enemy = new Enemy(); //Here I am only assigning, not declaring
}
return enemy;
}
}
以上不是一种不常见的模式,使用支持字段作为缓存并在即时基础上加载它。
如果你想要的只是这样的延迟加载,你也可以考虑使用Lazy<T>
类。
答案 1 :(得分:1)
删除.net中的对象是垃圾收集器的责任,因此您不必像在C ++中那样删除它们。
只要没有(根)引用,对象就会被垃圾回收器删除。因此,如果您只是重新分配变量,旧对象将不再被引用,垃圾收集器将在一段时间后处理它。
如果对象被破坏的时刻很重要(它保留并且必须释放一些重要资源),那么你必须实现#!/usr/bin/python
。
IDisposable