Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 20.01.11 21:43
Оценка:
Добрый день!

Пытаюсь реализовать класс, который наследовал бы WebRequest.
Хочу добавить поддержку отправки multipart данных.

Даже не знаю с чего начать...

Набросал этот код:
namespace Multipart
{
    class MyWebRequest : WebRequest
    {
        public void AddMultiPartForm(string header)
        {         
            // здесь код
        }
    }
}


Но после создания и приведения экземпляра класса к HttpWebRequest, не могу получить доступ к методу.
static void Main(string[] args)
{
    HttpWebRequest webRequest = (HttpWebRequest)MyWebRequest.Create("http://ya.ru");
    // webRequest.AddMultiPartForm этот метод не виден
}


Как в данном случае правильно провести наследование?
Уютный бложикhttp://tdlite.ru
наследование webrequest multipart
Re: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 21:55
Оценка:
Здравствуйте, TDLite, Вы писали:

TDL>Как в данном случае правильно провести наследование?


Вы осознаёте, что C# типизирован статически?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 20.01.11 21:57
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, TDLite, Вы писали:


TDL>>Как в данном случае правильно провести наследование?


A>Вы осознаёте, что C# типизирован статически?



Ммм... нет. А что? Чем это сулит?
Уютный бложикhttp://tdlite.ru
Re[3]: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 22:03
Оценка:
Здравствуйте, TDLite, Вы писали:

A>>Вы осознаёте, что C# типизирован статически?

TDL>Ммм... нет. А что? Чем это сулит?

Доступность членов зависит только от типа, но не от значения.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Наследование от класса WebRequest
От: Lloyd Россия  
Дата: 20.01.11 22:19
Оценка:
Здравствуйте, adontz, Вы писали:

TDL>>Ммм... нет. А что? Чем это сулит?


A>Доступность членов зависит только от типа, но не от значения.


В приведенном примере тип значения будет HttpWebRequest
Re[5]: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 22:20
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>В приведенном примере тип значения будет HttpWebRequest


Соответственно методы наследника HttpWebRequest не будут доступны, потому что это другой тип.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 20.01.11 22:27
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Lloyd, Вы писали:


L>>В приведенном примере тип значения будет HttpWebRequest


A>Соответственно методы наследника HttpWebRequest не будут доступны, потому что это другой тип.


Я просто думал, что все методы определенные в базовом классе отобразятся в наследнике.

А что нужно сделать, чтобы метод проявился?
Уютный бложикhttp://tdlite.ru
Re[7]: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 22:28
Оценка:
Здравствуйте, TDLite, Вы писали:

TDL>Я просто думал, что все методы определенные в базовом классе отобразятся в наследнике.


А разве HttpWebRequest наследуется от вашего класса?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 20.01.11 22:37
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, TDLite, Вы писали:


TDL>>Я просто думал, что все методы определенные в базовом классе отобразятся в наследнике.


A>А разве HttpWebRequest наследуется от вашего класса?


Точно. Что-то прогнал. Думал при приведении, происходит наследование =)

А не подскажите, каким наилучшим образом реализовать отсылку multipart?
Стоит наследовать класс или лучше сделать отдельный класс (без наследования)?

Я так понимаю HttpWebRequest наследовать нет возможности.
Уютный бложикhttp://tdlite.ru
Re[9]: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 22:49
Оценка:
Здравствуйте, TDLite, Вы писали:

TDL>Я так понимаю HttpWebRequest наследовать нет возможности.


Это почему?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[10]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 20.01.11 22:50
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, TDLite, Вы писали:


TDL>>Я так понимаю HttpWebRequest наследовать нет возможности.


A>Это почему?


Тут вроде написано как нельзя http://ru.w3support.net/index.php?db=so&id=400565
Уютный бложикhttp://tdlite.ru
Re[11]: Наследование от класса WebRequest
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.11 22:53
Оценка:
Здравствуйте, TDLite, Вы писали:

A>>Это почему?

TDL>Тут вроде написано как нельзя http://ru.w3support.net/index.php?db=so&id=400565

Да, нет полезных публичных конструкторов. Ну можно взять рефлектор и скопировать его код.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Наследование от класса WebRequest
От: Lloyd Россия  
Дата: 20.01.11 23:21
Оценка:
Здравствуйте, adontz, Вы писали:

L>>В приведенном примере тип значения будет HttpWebRequest


A>Соответственно методы наследника HttpWebRequest не будут доступны, потому что это другой тип.


Не так. Правильно — соответственно всякое упоминание динамики — не к месту.
Re[9]: Наследование от класса WebRequest
От: Lloyd Россия  
Дата: 20.01.11 23:23
Оценка:
Здравствуйте, TDLite, Вы писали:

TDL>А не подскажите, каким наилучшим образом реализовать отсылку multipart?

TDL>Стоит наследовать класс или лучше сделать отдельный класс (без наследования)?

А покажите, как будет выглядеть реализация этого функционала? Возможно, вам будет достаточно extension-методов.
Re: Наследование от класса WebRequest
От: HowardLovekraft  
Дата: 21.01.11 08:02
Оценка:
Здравствуйте, TDLite, Вы писали:

TDL>Пытаюсь реализовать класс, который наследовал бы WebRequest.

TDL>Как в данном случае правильно провести наследование?
WebRequest — хитрая штука.

Он создает конкретную реализацию запроса по префиксу, определяющему схему (http, ftp и т.д.), через фабричный метод Create. Для того, чтобы создавался правильный наследник WebRequest, префикс схемы должен быть зарегистрирован с помощью своей реализации интерфейса IWebRequestCreate и метода WebRequest.RegisterPrefix.

После чего такой код будет работать:
var request = (MyProtocolWebRequest)WebRequest.Create("myprotocol://server");


При этом зарегистрировать своего наследника WebRequest для HTTP — нельзя:

The HttpWebRequest class is registered to service requests for HTTP and HTTPS schemes by default. Attempts to register a different WebRequest descendant for these schemes will fail.


Наверное, можно придумать свою схему и отправлять через нее HTTP-запросы.
Но, судя по вот этому примеру, действительно, должно хватить extension-метода(-ов), как предположил
Автор: Lloyd
Дата: 21.01.11
Lloyd.

З.Ы. IMHO, в MS придумали дурацкую схему наследования WebRequest'ов.
Re[10]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 21.01.11 16:28
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, TDLite, Вы писали:


TDL>>А не подскажите, каким наилучшим образом реализовать отсылку multipart?

TDL>>Стоит наследовать класс или лучше сделать отдельный класс (без наследования)?

L>А покажите, как будет выглядеть реализация этого функционала? Возможно, вам будет достаточно extension-методов.


Вот написал класс для multipart данных http://pastebin.com/UpmrLDc9
Хотелось бы выслушать критику, скорей всего есть недочеты.
Уютный бложикhttp://tdlite.ru
Re[11]: Наследование от класса WebRequest
От: Lloyd Россия  
Дата: 21.01.11 16:33
Оценка:
Здравствуйте, TDLite, Вы писали:

L>>А покажите, как будет выглядеть реализация этого функционала? Возможно, вам будет достаточно extension-методов.


TDL>Вот написал класс для multipart данных http://pastebin.com/UpmrLDc9

TDL>Хотелось бы выслушать критику, скорей всего есть недочеты.

Как это связано с наследованием от WebRequest?
Re[12]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 21.01.11 16:35
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, TDLite, Вы писали:


L>>>А покажите, как будет выглядеть реализация этого функционала? Возможно, вам будет достаточно extension-методов.


TDL>>Вот написал класс для multipart данных http://pastebin.com/UpmrLDc9

TDL>>Хотелось бы выслушать критику, скорей всего есть недочеты.

L>Как это связано с наследованием от WebRequest?


Хоть тема и называется наследование от WebRequest, сама цель была написать свой класс для удобного использования multipart.
Чтобы не создавать тему, решил здесь спросить.
Уютный бложикhttp://tdlite.ru
Re[2]: Наследование от класса WebRequest
От: TDLite http://tdlite.ru
Дата: 21.01.11 16:43
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, TDLite, Вы писали:


TDL>>Пытаюсь реализовать класс, который наследовал бы WebRequest.

TDL>>Как в данном случае правильно провести наследование?
HL>WebRequest — хитрая штука.

Что-то ответ не отобразился. Продублирую...

Вот написал класс для multipart данных http://pastebin.com/UpmrLDc9
Хотелось бы выслушать критику, скорей всего есть недочеты.
Уютный бложикhttp://tdlite.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.