我刚刚查看了我的注册表,发现我正在运行.NET 4.5.1版本,因此我可以使用我想要的库。
我尝试包含命名空间:
using System.IO.MemoryStream;
using System.Media.SoundPlayer;
然而,VS抱怨名称空间不存在。
MemoryStream和SoundPlayer的参考页面要求在我的.NET版本中提供这些参考页面。我该如何解决这个问题?
答案 0 :(得分:2)
只使用命名空间
using System.IO;
using System.Media;
答案 1 :(得分:2)
您使用using
语句混淆了类名和命名空间以及using
指令。
System.IO
是一个命名空间。它是一个分组构造,用于逻辑地将类和结构组合在一起并避免名称冲突。 System.IO.MemoryStream
是System.IO
命名空间内的一个类。
如果您想使用MemoryStream
,您可以:
var ms = new System.IO.MemoryStream(...);
或者,为了避免始终指定命名空间(完全限定名称)的详细程度,您可以使用using
指令:
using System.IO;
然后你可以使用类名:
var ms = new MemoryStream(...);
您可以将using
指令视为告诉编译器在查找类时要使用的搜索路径。如果你要求MemoryStream
它将首先在当前命名空间中查找名为MemoryStream
的类,如果它找不到,那么它将查找已导入的所有命名空间using
指令(在VB.NET中,我相信等效指令实际上被称为Imports
,可以说,它更有意义,但你去了)。如果它仍然没有找到MemoryStream
类,您将收到编译时错误。
注意:如果它找到多个MemoryStream
,你也会得到一个编译时错误,因为它不会在第一个停止 - 你的类需要明确无误。这不是在每个using
文件的顶部填充大量不需要的.cs
指令的原因。 MemoryStream
在这里不是特别的问题(我认为它是BCL中唯一的MemoryStream
),但System.IO
中的另一个类是Path
。 BCL中有几个名为Path
的类(System.Windows.Shapes下有另一个类),如果没有命名空间,它们将成为一个噩梦。
现在,您的混淆可能来自using
语句,该语句通常用于实现IDisposable
的类以确保它们被处置。 MemoryStream
实施IDisposable
,因此您经常会看到以下内容:
using (var ms = new MemoryStream(...))
{
// some code here
}
或者,如果他们没有使用using
指令来声明命名空间:
using (var ms = new System.IO.MemoryStream(...))
{
// some code here.
}
这看起来很像您尝试使用using
指令。
查看MSDN中的课程时,您需要注意两件重要事项:
命名空间:System.IO
程序集:mscorlib(在mscorlib.dll中) System.IO(在System.IO.dll中)
命名空间告诉您需要包含在using
指令中或作为完全限定类名的一部分才能使用该类。 程序集部分告诉您需要添加对项目的引用的程序集,以便能够使用这些类。在这种情况下,MemoryStream
是核心库的一部分,因此您不可能不引用所需的程序集。
答案 2 :(得分:0)
使用System是正确的做法,因为MemoryStream本身就是类。 右键单击项目 - >添加引用 - >装配 - >系统
使用System.IO
然后在代码中你可以创建MemoryStream的对象。
答案 3 :(得分:0)
我想我还要补充一点,关于using
指令的格式。 可以使用using
指令,就像创建命名空间或类的别名一样。
例如,为这样的类创建一个别名:
using SP = System.Media.SoundPlayer;
允许您这样做:
var sp = new SP();