为什么我可以将一种类型分配给明显不同的类型?

时间:2014-09-25 16:21:45

标签: c#

我正在学习初学者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 ... 任何人都可以澄清这是有效的原因吗?只是为了让我知道我正确理解这一点。

3 个答案:

答案 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一样获取文件并打开它,然后将文件内容作为流返回。

这不是一个愚蠢的问题。在显示为不同类型"类型分配"类型之前,指导员在澄清返回类型和方法方面确实是一项糟糕的工作。