我创建了一个using()而没有指定对象名 我的问题是如何访问我的新对象并打印其名称?
class Program
{
static void Main(string[] args)
{
AnimalFactory factory = new AnimalFactory();
using (factory.CreateAnimal())
{
Console.WriteLine("Animal {} created inside a using statement !");
//How can i print the name of my animal ?? something like this.Name ?
}
Console.WriteLine("Is the animal still alive ?");
}
}
public class AnimalFactory
{
public IAnimal CreateAnimal()
{
return new Animal();
}
}
public class Animal : IAnimal
{
public string Name { get; set; }
public Animal()
{
Name = "George";
}
public void Dispose()
{
Console.WriteLine("Dispose invoked on Animal {0} !", Name);
Name = null;
}
}
public interface IAnimal : IDisposable
{
string Name { get; }
}
答案 0 :(得分:6)
你为什么要这样做?如果您想在此处访问该对象,您应该获得对它的引用。 (假设您的示例代表了您尝试解决的问题)。
using (Animal a = factory.CreateAnimal())
{
Console.WriteLine("Animal {0} created inside a using statement !", a.Name);
}
答案 1 :(得分:4)
你做不到。声明变量:
using (var animal = factory.CreateAnimal())
{
}
答案 2 :(得分:2)
其他答案都是正确的。但是,我想在这里抛出一点language specification(而不是说“你不能”)
第259页:
表格的使用声明
using (expression) statement
具有相同的三种可能的扩展。在这种情况下,ResourceType是隐式表达式的编译时类型(如果有的话)。否则,接口IDisposable本身将用作ResourceType。 资源变量在嵌入语句中不可访问且不可见。
因此,规范明确禁止您想要做的事情。
答案 3 :(得分:0)
也许你想要完成的就像Object Pascal Delphi
with MyClass.Create() do
try
// Access method an properties of MyClass in here
finally
free;
end;
我还没有发现在任何其他语言中,在C#中你需要声明变量:
(using MyClass a = new MyClass())
{
a.properities/methods;
}
您不需要编码的唯一额外代码是最终免费的。