C# 的类型和命名空间别名
介绍
C# 中的命名空间有两个主要用途:组织类和功能以及控制类和方法的范围。类型别名是 C# 的一个鲜为人知的功能,当您为了清晰起见想要从命名空间为特定方法或类设置别名时,它会派上用场。这些功能的核心是using关键字。
本指南将教您如何正确使用别名并使您的代码或应用程序易于阅读并能够灵活地适应随时间的变化。
使用
C# 中的using关键字有三个主要用例。在第一个用例中,您定义一个范围,在该范围的末尾会释放一个对象。在第二个用例中,您为命名空间创建别名或从其他命名空间导入特定类型。在第三个用例中,您使用 static 指令导入单个类的成员。
当您开始学习 C# 编程时,您可能会使用此关键字。人们通常会学习如何与控制台交互、写出一些字符串或读取输出。大多数此类功能来自 System.Console命名空间。
别名
以下是一个常见的例子:
using System;
namespace scopesandaliases
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("I'm coming from the System namespace");
Console.Write("Say something nice:");
var said = Console.ReadLine();
Console.WriteLine($"You said: {said}");
Console.ReadKey();
}
}
}
如果你说:说什么?输出看起来会像这样。
I'm coming from the System namespace
Say something nice:Say what?
You said: Say what?
这里发生了什么?应用程序顶部的第一个using语句告诉编译器您需要System命名空间中的所有内容。这样,您可以使用Console.前缀引用WriteLine、Write和ReadLine函数。如果需要,您可以通过修改脚本来进一步深入了解。您可以为类Console创建一个别名,并使用 using为其添加别名。
using C = System.Console;
namespace scopesandaliases
{
class Program
{
static void Main(string[] args)
{
C.WriteLine("I'm coming from the System namespace");
C.Write("Say something nice:");
var said = C.ReadLine();
C.WriteLine($"You said: {said}");
System.Console.WriteLine("This is still working!");
C.ReadKey();
}
}
}
回复后,输出如下所示:别名类也很有趣。
I'm coming from the System namespace
Say something nice:Aliasing classes are fun, too.
You said: Aliasing classes are fun, too.
This is still working!
基本功能保持不变。请注意,尽管有别名,但完全限定的System.Console.WriteLine仍可供您的应用程序访问,因为您可以使用其完全限定的名称引用类和方法。它通过允许开发人员更快、更高效地编写代码来添加额外的功能,因为可以缩短对命名空间中功能的访问时间。它不会对开发速度产生负面影响。
这是 Math 类的另一个示例。如前所述,在别名的三个用例中,一个是从类中拉出对静态成员的引用并为其添加别名。在 Math 类中,有两个静态成员:E和PI。如果要在不使用别名的情况下引用它们,则需要使用完全限定名称,例如System.Math.E或System.Math.PI。
让我们使用 static关键字创建一个更短的版本。
using static System.Math;
using System;
namespace scopesandaliases
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"The value of E is: {E}");
Console.WriteLine($"The value of PI is: {PI}");
Console.ReadKey();
}
}
}
输出如下所示:
The value of E is: 2.71828182845905
The value of PI is: 3.14159265358979
想象一下一个应用程序在整个过程中多次引用PI或E。这种技术不仅节省时间,而且使代码更易于阅读。
using关键字的另一个常见用例是操作文件或与网络相关的对象。让我们看一个将一些文本写入文件的示例。
using System;
using SW = System.IO.StreamWriter;
namespace scopesandaliases
{
class Program
{
static void Main(string[] args)
{
string[] linesToWrite = { "Written", "Guides", "Are", "Really", "Cool!" };
using (SW myFile = new SW(@"C:\Temp\MyFile.txt"))
{
foreach(string line in linesToWrite)
{
myFile.WriteLine(line);
}
}
Console.ReadKey();
}
}
}
该应用程序的输出是一个名为MyFile.txt的文件,其中包含以下内容:
Written
Guides
Are
Really
Cool!
让我们看看这里发生了什么。您为System.IO.StreamWriter类创建了一个名为SW 的别名。您有一个包含五个项目的字符串数组。using块用于将这些项目一次一个项目地写入文件。您也可以为 FileStream 创建别名,但区别在于它将字节写入输出,而 StreamWriter 对输出进行编码。
using语句环绕您执行的操作,因为一旦操作完成,就会在流对象上调用IDisposable.Dispose ,并且释放与此操作相关的资源(如文件句柄和内存)。这有助于应用程序在任务完成后进行清理,并且不会使用比实际需要更长的资源。除了文件之外, StreamWriter还有一个重要且有用的附加参数,可以是true或false。当它为 true 时,文件不会被覆盖,但会附加新内容。
类型别名可帮助您在处理多种类型时解决歧义问题。这还意味着您可以避免导入整个命名空间来执行操作。这与命名空间别名的工作方式相同,但它会为其出现的文件范围添加别名。它不允许您创建跨项目的全局别名。您还可以选择为泛型类型设置别名,但要使其工作,您需要传递参数类型。
以下是特定类型的示例别名:
using SW = System.IO.StreamWriter
using FS = System.IO.FileStream
以下是类型的通用别名的示例:
using NINT = System.Nullable<System.Int32>;
using UDBL = System.Nullable<System.Double>;
结论
在本指南中,您了解了别名。您了解了如何通过别名命名空间和类型来构建更强大、更简洁的应用程序。首先,我们阐明了using关键字和别名的概念,然后将目光转向了更具技术性的示例。您看到了四个示例,它们演示了别名的核心用例以及它如何使您的应用程序受益。
我希望这篇文章对您有所帮助,也希望您找到了想要的东西。如果您喜欢本指南,请点赞并继续关注更多内容。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~