代码之家  ›  专栏  ›  技术社区  ›  Ranhiru Jude Cooray

我可以在C*中使用*块使用不同类型的对象吗?

  •  5
  • Ranhiru Jude Cooray  · 技术社区  · 14 年前
    using (Font font3 = new Font("Arial", 10.0f), 
               font4 = new Font("Arial", 10.0f))
    {
        // Use font3 and font4.
    }
    

    我知道同一类型的多个对象可以在 使用 条款。

    我不能在里面使用不同类型的对象吗? 使用 条款?

    我试过了,但是尽管他们是不同的名字和不同的对象,他们的行为是相同的=有相同的方法集

    使用不同类型的using类还有其他方法吗?

    如果没有,最合适的使用方法是什么?

    7 回复  |  直到 14 年前
        1
  •  28
  •   Jesper Palm    14 年前
    using(Font f1 = new Font("Arial",10.0f))
    using (Font f2 = new Font("Arial", 10.0f))
    using (Stream s = new MemoryStream())
    {
    
    }
    

    像这样吗?

        2
  •  10
  •   Pranay Rana    14 年前

    不,你不能这样做,但你可以 nest 这个 using 阻碍。

    using (Font font3 = new Font("Arial", 10.0f))
    { 
        using (Font font4 = new Font("Arial", 10.0f))
        {
            // Use font3 and font4.
        }
    }
    

    或者像其他人说的那样,但我不建议这样做,因为它具有可读性。

    using(Font font3 = new Font("Arial", 10.0f))
    using(Font font4 = new Font("Arial", 10.0f))
    {
        // use font3 and font4
    }
    
        3
  •  6
  •   Doctor Blue    14 年前

    您可以使用语句进行堆栈以完成此操作:

    using(Font font3 = new Font("Arial", 10.0f))
    using(Font font4 = new Font("Arial", 10.0f))
    {
        // use font3 and font4
    }
    
        4
  •  5
  •   João Angelo    14 年前

    using语句的目的是确保通过调用 Dispose 方法由 IDisposable 接口。规范不允许您在一个using语句中获取不同类型的资源,但是记住第一句话,您可以用编译器编写这个完全有效的代码。

    using (IDisposable d1 = new Font("Arial", 10.0f),
        d2 = new Font("Arial", 10.0f), 
        d3 = new MemoryStream())
    {
        var stream1 = (MemoryStream)d3;
        stream1.WriteByte(0x30);
    }
    

    然而, 我不推荐这个 我认为这是一种虐待,所以这个答案只是说你可以绕过它,但你可能不应该这样做。

        5
  •  3
  •   Adam Houldsworth    14 年前

    你可以用逗号分隔同一类型的项目——我只知道编译器不会抱怨。您还可以使用()语句(使用一组不同类型的方括号)进行堆栈。

    http://adamhouldsworth.blogspot.com/2010/02/things-you-dont-know.html

        6
  •  3
  •   Oded    14 年前

    在每个对象中只能初始化一种类型的对象 using 块。但是,您可以根据需要嵌套这些内容:

    using (Font font3 = new Font("Arial", 10.0f))
    {
        using (Brush b4 = new Brush())
        {
    
        }
    }
    
        7
  •  2
  •   Paul Michaels    14 年前

    您可以将它们嵌套:

    using (Font font3 = new Font("Arial", 10.0f))
    using (font4 = new Font("Arial", 10.0f))
    {
        // Use font3 and font4.
    }
    

    它们应该按相反的顺序处理(先处理font4)。

    编辑:

    这与以下内容完全相同:

    using (Font font3 = new Font("Arial", 10.0f))
    {
        using (font4 = new Font("Arial", 10.0f))
        {
            // Use font3 and font4.
        }
    }