我正在学习初学者Pluralsight课程(C#Fundamentals),我遇到过这个问题:
FileStream stream = File.Open("textfile.txt", FileMode.Open);
我的问题是,为什么会发生这种情况?
我的印象是stream
应该像这样分配:
FileStream stream = new FileStream();
那么为什么以及如何将File.Open("textfile.txt", FileMode.Open)
分配给FileStream
有效?
在做了一些搜索之后,我发现File.Open
的返回类型是FileStream
...
任何人都可以澄清这是有效的原因吗?只是为了让我知道我正确理解这一点。
答案 0 :(得分:3)
由于:
File.Open("textfile.txt", FileMode.Open);
返回FileStream
请参阅MSDN Docs和方法签名:
public static FileStream Open(string path, FileMode mode)
答案 1 :(得分:2)
是的,这是有效的,因为File.Open
的返回类型是FileStream
。
您始终可以将函数的返回类型分配给该类型的变量,因为它返回的是该类型的对象!
另一个赋值完全有效,因为new
运算符返回一个给定类型的新对象(在您的示例中为FileStream
)。它实际上是相同的概念。
答案 2 :(得分:1)
这个工作的原因是因为File.Open是一种方法。方法可以有返回类型。
string mystring = 1
int q = CreateInt(mystring);
private void CreateInt(string x)
{
return Convert.ToInt32(x);
}
Create Int接受一个字符串,并返回一个int。所以上面的代码将编译。就像File.Open一样获取文件并打开它,然后将文件内容作为流返回。
这不是一个愚蠢的问题。在显示为不同类型"类型分配"类型之前,指导员在澄清返回类型和方法方面确实是一项糟糕的工作。