您的位置 首页 > 德语词汇

Using是什么意思?用法、例句 C# using用法

各位老铁们,大家好,今天由我来为大家分享Using是什么意思?用法、例句,以及C# using用法的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

一、using语句

using语句可确保正确使用IDisposable实例:

Using是什么意思?用法、例句 C# using用法

varnumbers=newList<int>();\nusing(StreamReaderreader=File.OpenText("numbers.txt"))\n{\nstringline;\nwhile((line=reader.ReadLine())isnotnull)\n{\nif(int.TryParse(line,outintnumber))\n{\nnumbers.Add(number);\n}\n}\n}

当控件离开using语句块时,将释放获取的IDisposable实例。using语句可确保即使在using语句块内发生异常的情况下也会释放可释放实例。在前面的示例中,打开的文件在处理完所有行后关闭。

使用awaitusing语句来正确使用IAsyncDisposable实例:

awaitusing(varresource=newAsyncDisposableExample())\n{\n//Usetheresource\n}

还可使用不需要大括号的using声明:

staticIEnumerable<int>LoadNumbers(stringfilePath)\n{\nusingStreamReaderreader=File.OpenText(filePath);\n\nvarnumbers=newList<int>();\nstringline;\nwhile((line=reader.ReadLine())isnotnull)\n{\nif(int.TryParse(line,outintnumber))\n{\nnumbers.Add(number);\n}\n}\nreturnnumbers;\n}

在using声明中进行声明时,局部变量在声明它的作用域末尾释放。在前面的示例中,会在某个方法的末尾释放对象。由using语句或声明进行声明的变量是只读的。无法重新分配该变量或将其作为ref或out参数传递。

可在using语句中声明多个相同类型的实例:

using(StreamReadernumbersFile=File.OpenText("numbers.txt"),wordsFile=File.OpenText("words.txt"))\n{\n//Processbothfiles\n}

在一个using语句中声明多个实例时,它们将按声明的相反顺序释放。还可以将using语句和声明与适用于可释放模式的ref结构的实例一起使用。也就是说,它有一个实例Dispose方法,该方法是可访问、无参数的并且具有void返回类型。

using语句也可以采用expression形式:

StreamReaderreader=File.OpenText(filePath);\n\nusing(reader)\n{\n//Processfilecontent\n}

其中expression(此例中的reader)会生成可释放实例。

二、using指令

using指令允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。using指令以基本形式从单个命名空间导入所有类型,如下例所示:

usingSystem.Text;

可以通过using别名指令为名称空间或类型创建别名。

usingProject=PC.MyCompany.Project;

可对using别名指令使用global修饰符。

没有global修饰符的using指令的作用域是显示它的文件。

否则,将生成编译器错误CS1529。

创建using指令,以便在命名空间中使用类型而不必指定命名空间。using指令不为你提供对嵌套在指定命名空间中的任何命名空间的访问权限。命名空间分为两类:用户定义的命名空间和系统定义的命名空间。用户定义的命名空间是在代码中定义的命名空间。

可以将两个修饰符应用于using指令:

向using指令添加global修饰符意味着using将应用于编译中的所有文件(通常是一个项目)。globalusing指令被添加到C#10中。其语法为:

globalusing<fully-qualified-namespace>;

其中fully-qualified-namespace是命名空间的完全限定名称,其类型可以在不指定命名空间的情况下引用。

globalusing指令可以出现在任何源代码文件的开头。单个文件中的所有globalusing指令必须出现在以下内容之前:

可以将globalusing指令添加到任何源文件中。通常,你需要将它们保留在一个位置。globalusing指令的顺序并不重要,无论是在单个文件中,还是在文件之间。

global修饰符可以与static修饰符合并。global修饰符可以应用于using别名指令。在这两种情况下,指令的作用域都是当前编译中的所有文件。

以下示例允许在项目中的所有文件中使用System.Math中声明的所有方法:

globalusingstaticSystem.Math;

还可以通过将<Using>项添加到项目文件(例如<UsingInclude="My.Awesome.Namespace"/>)来全局包含命名空间。

usingstatic指令命名了一种类型,无需指定类型名称即可访问其静态成员和嵌套类型。其语法为:

usingstatic<fully-qualified-type-name>;

<fully-qualified-type-name>是无需指定类型名称即可访问其静态成员和嵌套类型的类型名称。如果不提供完全限定的类型名称(完整的命名空间名称以及类型名称),则C#将生成编译器错误CS0246:“无法找到类型或命名空间名称‘type/namespace’(是否缺少using指令或程序集引用?)”。

usingstatic指令适用于任何具有静态成员(或嵌套类型)的类型,即使该类型还具有实例成员。但是,只能通过类型实例来调用实例成员。

你可以访问类型的静态成员,而无需限定使用类型名称进行访问:

usingstaticSystem.Console;\nusingstaticSystem.Math;\nclassProgram\n{\nstaticvoidMain()\n{\nWriteLine(Sqrt(3*3+4*4));\n}\n}

通常,调用某个静态成员时,即会提供类型名称以及成员名称。重复输入相同的类型名称来调用该类型的成员将生成详细的晦涩代码。例如,Circle类的以下定义引用Math类的许多成员。

usingSystem;\npublicclassCircle\n{\npublicCircle(doubleradius)\n{\nRadius=radius;\n}\n\npublicdoubleRadius{get;set;}\n\npublicdoubleDiameter\n{\nget{return2*Radius;}\n}\n\npublicdoubleCircumference\n{\nget{return2*Radius*Math.PI;}\n}\n\npublicdoubleArea\n{\nget{returnMath.PI*Math.Pow(Radius,2);}\n}\n}

通过消除每次引用成员时,显式引用Math类的需求,usingstatic指令将生成更简洁的代码:

usingSystem;\nusingstaticSystem.Math;\n\npublicclassCircle\n{\npublicCircle(doubleradius)\n{\nRadius=radius;\n}\n\npublicdoubleRadius{get;set;}\n\npublicdoubleDiameter\n{\nget{return2*Radius;}\n}\n\npublicdoubleCircumference\n{\nget{return2*Radius*PI;}\n}\n\npublicdoubleArea\n{\nget{returnPI*Pow(Radius,2);}\n}\n}

usingstatic仅导入可访问的静态成员和指定类型中声明的嵌套类型。不导入继承的成员。可以从任何带usingstatic指令的已命名类型导入,包括VisualBasic模块。如果F#顶级函数在元数据中显示为一个已命名类型(其名称是有效的C#标识符)的静态成员,则可以导入该F#函数。

usingstatic使指定类型中声明的扩展方法可用于扩展方法查找。但是,扩展方法的名称不导入到代码中非限定引用的作用域中。

同一编译单元或命名空间中通过不同usingstatic命令从不同类型导入的具有相同名称的方法组成一个方法组。这些方法组内的重载解决方法遵循一般C#规则。

以下示例使用usingstatic指令来提供Console、Math和String类的静态成员,而无需指定其类型名称。

usingSystem;\nusingstaticSystem.Console;\nusingstaticSystem.Math;\nusingstaticSystem.String;\n\nclassProgram\n{\nstaticvoidMain()\n{\nWrite("Enteracircle'sradius:");\nvarinput=ReadLine();\nif(!IsNullOrEmpty(input)&&double.TryParse(input,outvarradius)){\nvarc=newCircle(radius);\n\nstrings="\\nInformationaboutthecircle:\\n";\ns=s+Format("Radius:{0:N2}\\n",c.Radius);\ns=s+Format("Diameter:{0:N2}\\n",c.Diameter);\ns=s+Format("Circumference:{0:N2}\\n",c.Circumference);\ns=s+Format("Area:{0:N2}\\n",c.Area);\nWriteLine(s);\n}\nelse{\nWriteLine("Invalidinput...");\n}\n}\n}\n\npublicclassCircle\n{\npublicCircle(doubleradius)\n{\nRadius=radius;\n}\n\npublicdoubleRadius{get;set;}\n\npublicdoubleDiameter\n{\nget{return2*Radius;}\n}\n\npublicdoubleCircumference\n{\nget{return2*Radius*PI;}\n}\n\npublicdoubleArea\n{\nget{returnPI*Pow(Radius,2);}\n}\n}\n//Theexampledisplaysthefollowingoutput:\n//Enteracircle'sradius:12.45\n//\n//Informationaboutthecircle:\n//Radius:12.45\n//Diameter:24.90\n//Circumference:78.23\n//Area:486.95

在此示例中,usingstatic指令也已经应用于Double类型。添加该指令使得在未指定类型名称情况下调用TryParse(String,Double)方法成为可能。但是,使用没有类型名称的TryParse创建的代码可读性较差,因为有必要检查usingstatic指令,以确定所调用的数值类型的TryParse方法。

usingstatic也适用于enum类型。通过在枚举中添加usingstatic,该类型不再需要使用枚举成员。

usingstaticColor;\n\nenumColor\n{\nRed,Green,Blue\n}\n\nclassProgram\n{\npublicstaticvoidMain()\n{\nColorcolor=Green;\n}\n}using别名

创建using别名指令,以便更易于将标识符限定为命名空间或类型。在任何using指令中,都必须使用完全限定的命名空间或类型,而无需考虑它之前的using指令。using指令的声明中不能使用using别名。

例如,以下示例生成一个编译器错误:

usings=System.Text;\nusings.RegularExpressions;//Generatesacompilererror.

下面的示例显示如何为命名空间定义和使用using别名:

namespacePC\n{\n//Defineanaliasforthenestednamespace.\nusingProject=PC.MyCompany.Project;\nclassA\n{\nvoidM()\n{\n//Usethealias\nvarmc=newProject.MyClass();\n}\n}\nnamespaceMyCompany\n{\nnamespaceProject\n{\npublicclassMyClass{}\n}\n}\n}

using别名指令的右侧不能有开放式泛型类型。例如,不能为List<T>创建using别名,但可以为List<int>创建using别名。

下面的示例显示如何为类定义using指令和using别名:

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023