-3

我创建了一个 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; }
}
4

4 回答 4

6

你为什么要这样做?如果您想在此处访问该对象,您应该获得对它的引用。(假设您的示例代表您要解决的问题)。

using (Animal a = factory.CreateAnimal())
{
   Console.WriteLine("Animal {0} created inside a using statement !", a.Name); 
}
于 2013-08-04T13:37:57.673 回答
4

你不能。声明变量:

using (var animal = factory.CreateAnimal())
{
}
于 2013-08-04T13:37:26.903 回答
2

其他答案都是正确的。但是,我想在这里抛出一些语言规范(而不是说“你不能”)

第 259 页:

形式的使用语句

using (expression) statement

具有相同的三个可能的扩展。在这种情况下,ResourceType 隐含地是表达式的编译时类型,如果它有的话。否则,接口 IDisposable 本身将用作 ResourceType。资源变量在嵌入语句中是不可访问且不可见的。

因此,规范明确禁止您要做的事情。

于 2013-08-04T13:58:33.340 回答
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;
}

唯一不需要编写的额外代码是 finally free。

于 2013-08-04T13:54:05.200 回答