none
Как правильно RRS feed

  • Вопрос

  • Как правильно будет и почему:

    1) Dim request As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)

    2) Dim request As HttpWebRequest = WebRequest.Create(URL)

    3) Dim request As HttpWebRequest = HttpWebRequest.Create(URL)

    28 февраля 2014 г. 14:47

Ответы

  • В чем цель Вашего вопроса? Вы решаете тест? Если нет, используйте любой способ, который Вам по душе. Свое мнение я уже высказал.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    1 марта 2014 г. 14:59
  • "Второй способ тоже работает без CType, поэтому и спрашивал в чём разница). В любом случае получается что 3 способ правильнее?" - 3 = 2, в обеих случаях вызывается один и тот же статический метод базового класса WebRequest. В первом варианте тоже вызывается тот же самый метод, результатат тот же. Насколько я знаю явное приведение типов в VB.NET выполняется компилятором, так что метод CType будет вызван автоматически. Т.е. получается в конечном счёте 1=2=3.

    Сделаем содержимое сообщества лучше, вместе!

    1 марта 2014 г. 15:39
    Модератор

Все ответы

  • Правильный вариант 1. Т.к. WebRequest.Create() возвращает WebRequest - ссылку на базовый для HttpWebRequest класс. Присвоить ее непосредственно объекту HttpWebRequest нельзя (вариант 2). Требуется приведение типа. Вариант 3 не подходит, т.к. у HttpWebRequest метода Create нету.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    1 марта 2014 г. 12:03
  • В том то и дело что есть HttpWebRequest.Create и поэтому думаю зачем тогда делать CType(WebRequest.Create(URL), HttpWebRequest) если можно сразу.
    1 марта 2014 г. 12:11
  • У класса HttpWebRequest такого метода нет! Даже если можно вызвать унаследованный метод из класса WebRequest, требуется приведение типа.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    1 марта 2014 г. 12:26
  • Dim request As HttpWebRequest = HttpWebRequest.Create(strURL)
    Dim response As HttpWebResponse = request.GetResponse()
    Dim streamresponse As Stream = response.GetResponseStream()
    Dim streamread As New StreamReader(streamresponse)
    Return streamread.ReadToEnd()
    streamread.Close()
    streamresponse.Close()
    response.Close()

    У меня отлично работает.

    1 марта 2014 г. 12:53
  • Значит VB сам делает такое приведение. Спорить не стану, VB - не моя стихия. Вот C# вряд ли допустил бы, чтобы ссылке на наследника была присвоена ссылка на родителя.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    1 марта 2014 г. 13:01
  • Второй способ тоже работает без CType, поэтому и спрашивал в чём разница). В любом случае получается что 3 способ правильнее?
    1 марта 2014 г. 13:12
  • В чем цель Вашего вопроса? Вы решаете тест? Если нет, используйте любой способ, который Вам по душе. Свое мнение я уже высказал.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    1 марта 2014 г. 14:59
  • "Второй способ тоже работает без CType, поэтому и спрашивал в чём разница). В любом случае получается что 3 способ правильнее?" - 3 = 2, в обеих случаях вызывается один и тот же статический метод базового класса WebRequest. В первом варианте тоже вызывается тот же самый метод, результатат тот же. Насколько я знаю явное приведение типов в VB.NET выполняется компилятором, так что метод CType будет вызван автоматически. Т.е. получается в конечном счёте 1=2=3.

    Сделаем содержимое сообщества лучше, вместе!

    1 марта 2014 г. 15:39
    Модератор
  • Спасибо. Тема закрыта.
    1 марта 2014 г. 15:56