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

本文关键字:对象 范围内 访问 | 更新日期: 2023-09-27 18:26:55

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

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

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

是否可以使类透明地知道在其作用域中声明的其他对象?

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

欢迎提出任何想法。

谢谢。

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

使MyClass知道TheClassIWantMyClassToSee的唯一方法是创建从一个到另一个的引用。没有办法导航和探索作用域中的类。无论作用域是与using块、方法块、foreach循环还是其他循环相关,此语句都为true。

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

这些"特定动作"是什么?如果它们是资源清理,那么TheClassIWantMyClassToSee也应该实现IDisposable,并且您可以使用另一个using语句。否则,您可以只使用try/finally块:

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

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

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

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