C# 语法理解上的混乱

C# 语法理解上的混乱,c#,using,C#,Using,我无法理解使用c#的语法的。我见过许多使用 代码像 using (StreamReader rdr = File.OpenText("file.txt")) { //do stuff } 该语法的含义是什么?它是某种循环吗?使用“using”可以确保正确处理对象 以下问题有一些很好的答案: 您也可以在MSN上阅读以下内容: 使用语法的是一个包装器,用于确保资源已被释放(对实现IDisposable的事物进行操作),并且您正在为其后面的块的范围使用特定的资源 使用语句的就是这方面的语法糖:

我无法理解使用c#的
语法的
。我见过许多使用

代码像

using (StreamReader rdr = File.OpenText("file.txt"))
{
 //do stuff
}

该语法的含义是什么?它是某种循环吗?

使用“using”可以确保正确处理对象

以下问题有一些很好的答案:

您也可以在MSN上阅读以下内容:


使用
语法的
是一个包装器,用于确保资源已被释放(对实现
IDisposable
的事物进行操作),并且您正在为其后面的块的范围使用特定的资源

使用
语句的
就是这方面的语法糖:

StreamReader rdr = File.OpenText("file.txt");
try
{
    //do stuff
}
finally
{
    rdr.Dispose();
}
是处理需要处理和/或关闭的对象的非常有用的方法

它替代了这样的代码

StreamReader sr = new StreamReader(....)
try
{
     .... use the StreamReader
}
finally
{
    sr.Dispose();
}
如您所见,using initial行中声明的对象总是传递给finally块,并且在异常情况下也会调用其dispose方法

using语句不应与所使用的语句混淆

允许在命名空间中使用类型,以便不必 限定该命名空间中类型的使用,并创建别名 对于命名空间或类型。这称为using alias指令


不,这不是一个循环。它是一条语句,表示另一个代码块中的新代码块。考虑到这一点,您不必处理在
using
语句中初始化的对象,但这意味着它们必须是
IDisposable
,才能像这样使用。较新版本的.NET framework可以很好地处理已处理的对象,从而最大限度地减少应用程序的内存占用。在我看来,它还可以使长过程更好地结构化,更具可读性


请参见答案+1,但必须在
try
之外声明
sr
,才能在
finally
-不同的词法范围shmm中访问。最好更正sr.Dispose()它在那里不起作用:)@mlorbetske你当然是对的
using System.IO;  // Allows to type StreamReader instead of System.IO.StreamReader
using Project = PC.MyCompany.Project;  // Allows to type just Project.MyClass