【问题标题】:how httpwebrequest.getrequeststream return instance of abstract class system.io.streamhttpwebrequest.getrequeststream 如何返回抽象类 system.io.stream 的实例
【发布时间】:2015-08-13 03:18:46
【问题描述】:

System.io.stream 是一个抽象类,那么 httpwebrequest.getrequeststream() 如何返回流类的实例。 即

 Stream serverStream  = request.GetRequestStream();

流类是如何初始化的?

【问题讨论】:

    标签: c# stream abstract-class


    【解决方案1】:

    httpwebrequest.getrequeststream() 返回从抽象类 System.IO.Stream 继承的具体类之一。

    【讨论】:

    • "GetRequestStream 方法发起向 Internet 资源发送数据的请求,并返回用于向 Internet 资源发送数据的 Stream 实例。"这就是 msdn 所说的,它似乎没有返回具体的继承类,如文件流或内存流
    • 执行 serverStream.GetType().FullName 的 Debug.WriteLine,您将获得实际的具体类。 MSDN 指出它可以是从 Stream 继承的任何具体类(x 的实例主要表示 x 和任何可以填充 x 的类)
    【解决方案2】:

    Stream 是所有流的抽象基类。

    Stream 类及其派生类提供了这些不同类型的输入和输出的通用视图,并将程序员与操作系统和底层设备的具体细节隔离开来。

    httpwebrequest.getrequeststream 
    

    获取用于写入请求数据的Stream对象。

    您必须创建流子类的实例才能进行初始化。

    通过thisthis SO post 了解更多信息。

    【讨论】:

    • 有问题的代码是工作代码,我不是在寻找使用子类初始化流类。我的问题是上面的代码是如何初始化抽象类的
    • 不,我没有创建实例,我无法使用 new 运算符创建流类的实例作为它的抽象类。所以只是想知道这个语句“Stream serverStream = request.GetRequestStream();”是怎么回事正在初始化流类
    【解决方案3】:

    您将引用的类型与对象的类型混淆了。

    方法签名将特定类型声明为其返回类型这一事实并不意味着返回的实例将具有该确切类型,它们可能是从指定的类型派生的类型,如您的情况。

    试试这个:Console.WriteLine(stream.GetType()),应该会理清思路。

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2014-01-11
      • 1970-01-01
      相关资源
      最近更新 更多