提问:抽象类不是不能有实例么?为什么WebRequest.Create()方法可以创建抽象类的实例对象呢?WebRequest和 WebResponse 都是抽象类using System;
using System.Net;
using System.IO;
using System.Text;class UWebRequest
{
    static void Main()
    {
        try
        {
            Console.WriteLine("请输入网址:");
            string myAddress = Console.ReadLine();            WebRequest myWebRequest = WebRequest.Create(myAddress);//返回了抽象类的对象
            WebResponse myWebResponse = myWebRequest.GetResponse();//返回了抽象类的对象            Stream myStream = myWebResponse.GetResponseStream();
            byte[] mybyte = new byte[1024];
            string pagecontent = "";
            int readl = 0;
            do
            {
                readl = myStream.Read(mybyte, 0, 1024);
                pagecontent += Encoding.UTF8.GetString(mybyte, 0, 1024);
            } while (readl > 0);            Console.WriteLine();
            Console.WriteLine(" 以下为所获取的网页内容:");
            Console.WriteLine(pagecontent);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        Console.ReadLine();
    }
}

解决方案 »

  1.   

    WebRequest.Create
    不是 new WebRequest 咬你怎么知道Create 内部创建的是抽象类
      

  2.   

    创建的是派生类的实例
    类似Image.FromFile
    public Image FromFile(string fileName)
    {
    return new Bitmap(fileName);
    }
      

  3.   

    WebRequest myWebRequest = WebRequest.Create(myAddress);//返回了抽象类的对象 
    WebResponse myWebResponse = myWebRequest.GetResponse();//返回了抽象类的对象 是返回了抽象类的子类,子类是可以当作父类的。
      

  4.   

    再说了, 那个 Create 还是静态的根据传入字符串, 内部判断创建相应子类是可能 的
      

  5.   

    GetType()WebRequest.Create().GetType()
      

  6.   

    实际测试两个返回类型System.Net.HttpWebRequest和System.Net.HttpWebResponse