-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 ステートメント

using (expression) statement

には、同じ 3 つの可能な展開があります。この場合、ResourceType は暗黙的に式のコンパイル時の型です (存在する場合)。それ以外の場合は、インターフェイス IDisposable 自体が ResourceType として使用されます。リソース変数は、埋め込みステートメントではアクセスできず、見えません。

したがって、あなたがやりたいことは、仕様によって明示的に禁止されています。

于 2013-08-04T13:58:33.340 に答える