using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
我知道在使用子句中可以使用多个相同类型的对象。
我不能在使用子句中使用不同类型的对象吗?
我试过但是虽然它们的名称和对象不同,但它们的行为相同=具有相同的方法集
有没有其他方法可以使用不同类型的using类?
如果没有,最合适的使用方法是什么?
答案 0 :(得分:28)
using(Font f1 = new Font("Arial",10.0f))
using (Font f2 = new Font("Arial", 10.0f))
using (Stream s = new MemoryStream())
{
}
喜欢这样吗?
答案 1 :(得分:10)
不,你不能这样做,但你可以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
}
答案 2 :(得分:6)
您可以使用语句堆叠来完成此任务:
using(Font font3 = new Font("Arial", 10.0f))
using(Font font4 = new Font("Arial", 10.0f))
{
// use font3 and font4
}
答案 3 :(得分:5)
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);
}
然而,我不推荐这个,我认为这是滥用的,所以这个答案只是声明你可以破解它,但你可能不应该。
答案 4 :(得分:3)
每个using
块中只能初始化一种类型的对象。您可以根据需要嵌套那些,但是:
using (Font font3 = new Font("Arial", 10.0f))
{
using (Brush b4 = new Brush())
{
}
}
答案 5 :(得分:3)
你可以逗号分隔相同类型的项目 - 好吧,我所知道的是编译器没有抱怨。您还可以使用不同类型的using()语句(使用一组括号{})进行堆栈。
http://adamhouldsworth.blogspot.com/2010/02/things-you-dont-know.html
答案 6 :(得分:2)
你可以嵌套它们:
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.
}
}