通过正在使用的对象访问using块范围内的对象

时间:2012-03-07 06:26:53

标签: c# .net c#-4.0 using-statement

我想知道是否可以执行以下操作:

        using (MyClass o = new MyClass())
        {
            TheClassIWantMyClassToSee x = new TheClassIWantMyClassToSee();
            x.DoStuff();
        }

我想创建一个类(MyClass)并在using块中使用它。在这个块中,我想使用某种类型的对象(TheClassIWantMyClassToSee)。当使用块超出范围时,我想对这些(TheClassIWantMyClassToSee)对象执行某些操作。

是否可以让一个类透明地了解在其作用域中声明的其他对象?

我意识到我可以将对象实例添加到MyClass对象中,但我想让使用我正在构建的API的开发人员更容易。

欢迎任何想法。

感谢。

4 个答案:

答案 0 :(得分:1)

MyClass了解TheClassIWantMyClassToSee的唯一方法是创建从一个到另一个的引用。无法导航和浏览范围内的类。无论范围是否与使用块,方法块,foreach循环或其他相关,该陈述都是正确的。

为什么不使用简单的MyClass.AddRelationship(TheClassIWantMyClassToSee child)方法让这个类知道另一个?

答案 1 :(得分:0)

这些“某些行为”是什么?如果他们是资源清理,那么TheClassIWantMyClassToSee也应该实现IDisposable,您可以使用另一个using语句。否则,您只能使用try / finally块:

using (MyClass o = new MyClass())
{
    TheClassIWantMyClassToSee x = new TheClassIWantMyClassToSee();
    try
    {
        x.DoStuff();
    }
    finally
    {
        // Do stuff here
    }
}

无法在finally块中添加代码,隐含在using语句的末尾。

答案 2 :(得分:0)

您的设计输入越强,其他人使用您的API就越容易。 (intellisense)你应该将它添加到其他对象,很可能。

答案 3 :(得分:0)

您可以尝试将MyClass用作所有“内部”类的工厂,因此您总是有机会将新实例与MyClass实例相关联。