Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Проблема с установкой длины потока (


Автор: Welemir 25.12.2009, 01:52
Добрый вечер всем ! Это снова я)) Привожу код:

Код


Imports System
Imports System.Net
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim client As New WebClient  ' Создаю объект клиент класса вэбклиент(хз,что за класс такой)
        Dim stream As Stream    ' создаю поток(судя по названию)
        stream.SetLength(100) ' Устанавливаю длину потока
        stream = client.OpenRead("http://www.wiw.ru")  ' Соединяюсь по урлу
        Dim reader As New StreamReader(stream)  ' Создаю объект класса StreamReader для чтения
        ...    ' Тут будет код для чтения хД
        reader.Close()   ' Осторожно! двери закрываются.
        stream.Close()  '  Аналогично.




    End Sub
End Class



Выдаёт следующее:

Предупреждение    1    Переменная "stream" используется до присвоения ей значения. Во время выполнения может произойти исключение при ссылке на значение NULL. Что это означает ? Я же не ошибся,а код не до конца компилируется(.

Поскольку не хочется засорять форум дилетантскими темами,приведу здесь краткий перечень волнующих меня вопросов:

1) Сколько конструкторов может быть у класса ? Можно ли определить их количество ?

2)Что означает ошибка: "New" не может использоваться для класса, объявленного как "MustInherit".

3) Почему некоторые свойства помечены как ReadOnly,и,соответственно,не могут использоваться в качестве присваиваемых членов объекта.

4)Вопрос,возможно,сложный,но можно ли интегрировать рнр/mysql с проектом,созданным на VB.NET ?

Автор: diadiavova 25.12.2009, 02:11
Код

Dim client As New WebClient
Dim respText = client.DownloadString("http://www.wiw.ru")
Как бы всё smile 

Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
 Переменная "stream" используется до присвоения ей значения.

Ты объявляешь переменную, но переменная это только ссылка на объект, а о сам объект ещё надо создать. В большинстве случаев это делается при помощи конструктора, но поскольку стрим - абстрактный класс, то вызвать его конструктор нельзя, вместо этого надо создавать экземпляр одного из производных классов(правда здесь это не нужно, смотри код).

Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
Поскольку не хочется засорять форум дилетантскими темами,приведу здесь краткий перечень волнующих меня вопросов:

А ты не стесняйся, этот форум для таких тем и создан, а правила одни(один топик - один вопрос).

Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
1) Сколько конструкторов может быть у класса ? Можно ли определить их количество ?

Столько, сколько тебе нужно. Они должны отличаться сигнатурой(количеством и/или типом параметров).
Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
Что означает ошибка: "New" не может использоваться для класса, объявленного как "MustInherit".

Экземплярами абстрактных(MustInherit) классов являются экземпляры производных классов. Создать экземпляр такого класса непосредственно нельзя.

Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
Почему некоторые свойства помечены как ReadOnly,и,соответственно,не могут использоваться в качестве присваиваемых членов объекта.

Так спроектированны классы. Почему то или иное свойство сделали ридонли надо спрашивать у разработчика класса(или догадаться самому, зачастую это очевидно).
 
Цитата(Welemir @  25.12.2009,  01:52 Найти цитируемый пост)
Вопрос,возможно,сложный,но можно ли интегрировать рнр/mysql с проектом,созданным на VB.NET ? 

Не совсем понятно, что имеется в виду.

Автор: Welemir 25.12.2009, 02:20
Уф,хороший материал для размышленияsmile.Вся страничка,это,конечно,хорошо,но разве нельзя загрузить всего лишь кусочек страницы,а не всю целиком (Ждать долго просто),и считать,к примеру,символов  в буфер ? Я так понимаю,что со свойством SetLength это невозможно (.

ЗЫ: Насчёт последнего вопроса - я имел в виду исполнение кода других языков программирования в среде VB.NET.Читал,что можно это делать через классы,но с классами я незнаком.Нет ли других вариантов ? Что-то вроде вставок js кода в рнр скрипт.

Автор: diadiavova 25.12.2009, 10:29
Цитата(Welemir @  25.12.2009,  02:20 Найти цитируемый пост)
Уф,хороший материал для размышленияsmile.Вся страничка,это,конечно,хорошо,но разве нельзя загрузить всего лишь кусочек страницы,а не всю целиком (Ждать долго просто),и считать,к примеру,символов  в буфер ? Я так понимаю,что со свойством SetLength это невозможно (.

Метод SetLength не поддерживается для этого класса. Если хочешь работать с потоком, то получить его можно при помощи метода DownloadStream, если надо сохранить файл - DownloadFile, Если хочешь получить массив байтов - DownloadData. У этих методов есть асинхронные аналоги, кроме того методы с подобными именами, но начинающиеся с Upload загружают на сервер данные. Разберись со свойствами, методами и прочими делами и увидишь, что штука очень удобная даёт много возможностей. Это не единственный способ выполнить эти операции, но самый простой.


Цитата(Welemir @  25.12.2009,  02:20 Найти цитируемый пост)
Насчёт последнего вопроса - я имел в виду исполнение кода других языков программирования в среде VB.NET.

Мжно, если есть соответствующие библиотеки с интерпретаторами этих языков. Для пхп я таких не встречал.

Цитата(Welemir @  25.12.2009,  02:20 Найти цитируемый пост)
Читал,что можно это делать через классы,но с классами я незнаком.

VB.Net - объектно-ориентированный язык, так что классы - это чуть ли не первое с чем тебе надо познакомиться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)