|
|
|
| поставил себе VB 2008 экспресс - кнечно ощущения - лепота так всё продумано и приятно в работе - кайф.
Прочитал книжку - скачками там 500 страниц - но вощем то всё и так всем нам известно - тем кто миф(vba) юзает.
Но вот что не пойму - книга о VB.NET2008
а я потавил немного другое - но всё актуально и для экспресса, причём не NET
тада - где из них, кто? | |
|
| |
|
|
|
| Разисните - кто в курсе этих терминав..... | |
|
| |
|
|
|
| VB2008 и VB.NET2008 - это одно и то же. Просто с 2005 версии язык называется VB2005 и VB2008. Эти языки расширены по сравнению с VB.NET. Начиная с 2005 студии- вижуал бэйсик по своим возможностям совпадает с C#. За исключением возможности перегрузки операторов. Но в VB2008 по-моему это отличие уже устранено. Хотя может и ошибаюсь(насчет перегрузки операторов). | |
|
| |
|
|
|
| Кстати, прежде, чем лезть в VB2008 настоятельно рекомендую изучить работу с классами. Это полностью объектно-ориентированный язык и без классов ты работать полноценно не сможешь. Там даже строки подключения и запросы рекомендуется размещать в отдельных классах в пространсте имен DAL, А затем в формах создавать экземпляры соответствующих классов. | |
|
| |
|
|
|
| спасибо огромное!!!!
Десятки раз читал про классы - не сфомировалось понятие в мозге.
Понял только - ссылаемся на класс, создаём его экземпляр - new MyClass
и пользуемся (используем) его методами и устанавливаем его свойства через переменную экземпляра этого класса.
В чём прелесть ни врубаюся.
Если создать простую Public Function(Str_STR as string) as String , и пользоваться ею во всей программе, создав единожды. Нафига всё в класс засовывать ?
В общем модуле простом не класса лежат Sub и Function для общего доступа....
Где эта блин изюминка | |
|
| |
|
|
|
|
Два слова - НАСЛЕДОВАНИЕ и ПОЛИМОРФИЗМ
Именно в этом вся изюменка и состоит. | |
|
| |
|
|
|
| Ну наследуют они всё от предков...
Ну способны развивать своё - иметь новые свойства методы и .....
Ну то есть типа создаём новый экземпляр - тошно такой как его предок, да ещё добавляем ему новые "качества".....
Ну и ....... и чё
=====================================
блин как жа понять чё в этом хорошего.......
Все хвалят - а я просто не знаю , видимо, красочных примеров по результатам этих метаморфоз - потому и не вижу смысла......
======================================
А если не в лом - - опиши какой нить простой пример применения - где наглядно видны плюсы такого использования....
======================================== | |
|
| |
|
|
|
| Хорошо.
Допустим у тебя есть 25 форм на которых на событии OnLoad нужно выставить длину текстбоксов = 500.
В случае НЕ ИСПОЛЬЗОВАНИЯ классов тебе придется 25 раз на каждой форме прописывать процедуру OnLoad
В случае ИСПОЛЬЗОВАНИЯ КЛАССОВ тебе придется сделать следующее:
(Извини, код на С#, поскольку VB я не очень хорошо изучил, но думаю суть уловишь)
Создаем класс в котором определяем процедуру SetInputControls, задающую длинну для текстбоксов, а также переопределяем метод OnLoad
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TDL.BST;
namespace TDL.BST.UI
{
public class Class1: System.Web.UI.Page
{
public Class1(){}
protected override void OnLoad(EventArgs e)
{
SetInputControls(this);
base.OnLoad(e);
}
public static void SetInputControls(Control container)
{
foreach (Control ctl in container.Controls)
{
if ( ctl is TextBox )
{
WebControl wctl = ctl as WebControl;
wctl.Width=500;
}
else
{
if (ctl.Controls.Count > 0)
SetInputControls(ctl);
}
}
}
}
}
|
После все формы наследуем от нашего класса
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TDL.BST;
using TDL.BST.DAL;
namespace TDL.BST.UI
{
public partial class Default2 : TDL.BST.UI.Class1
{
}
}
|
Заметь, что в данном случае процедуру OnLoad нашей формы мы не описываем вааще, но тем не менее, поскольку форма наследует наш созданный класс, то и соответственно наследует все методы этого класса.
Это касается наследования.
По поводу полиморфизма - щас выдерну фрагмент из своего проекта и опишу. | |
|
| |
|
|
|
|
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace TDL.BST.DAL
{
public class BaseForumProvider
{
public BaseForumProvider() { }
public BaseForumProvider(string addedby,
string addedbyip,
string body,
string forumsname,
string title)
{
AddedBy = addedby;
AddedByIP = addedbyip;
Body = body;
Forumsname = forumsname;
Title = title;
}
public BaseForumProvider(int closed,
int postid,
string title)
{
PostID = postid;
Closed = closed;
Title = title;
}
public BaseForumProvider(int closed,
int postid)
{
PostID = postid;
Closed = closed;
}
public BaseForumProvider(string body,
int postid)
{
PostID = postid;
Body = body;
}
public BaseForumProvider(int postid)
{
PostID = postid;
}
public BaseForumProvider(string addedby,
string addedbyip,
string body,
int postid)
{
AddedBy = addedby;
AddedByIP = addedbyip;
Body = body;
PostID = postid;
}
private string _AddedBy;
public string AddedBy
{
get { return _AddedBy; }
set { _AddedBy = value; }
}
private string _AddedByIP;
public string AddedByIP
{
get { return _AddedByIP; }
set { _AddedByIP = value; }
}
private string _Body;
public string Body
{
get { return _Body; }
set { _Body = value; }
}
private string _Forumsname;
public string Forumsname
{
get { return _Forumsname; }
set { _Forumsname = value; }
}
private string _Title;
public string Title
{
get { return _Title; }
set { _Title = value; }
}
private int _Closed;
public int Closed
{
get { return _Closed; }
set { _Closed = value; }
}
private int _PostID;
public int PostID
{
get { return _PostID; }
set { _PostID = value; }
}
private int _ForumID;
public int ForumID
{
get { return _ForumID; }
set { _ForumID = value; }
}
}
}
|
Из всей этой галиматьи тебе нужно увидеть, что все процедуры у мну называются одинаково. Отличаются только количеством и типом входящих параметров.
При дальнейшем вызове экземпляров класса, в зависимости от входящих параметров, система сама разберется какую именно процедуру использовать. | |
|
| |
|
|
|
| Что касается наследования, то у мну описана процедура, выставляющая одинаковую длинну для всех текстбоксов. Этот пример далек от практического использования, но никто не мешеает тебе задать , например, для меню, которые есть на каждой форме источник данных при загрузке формы, и тогда тебе не придется заниматься нудной работой по описанию меню на каждой форме. | |
|
| |
|
|
|
|
Допустим у тебя есть 25 форм на которых на событии OnLoad нужно выставить длину текстбоксов = 500.
В случае НЕ ИСПОЛЬЗОВАНИЯ классов тебе придется 25 раз на каждой форме прописывать процедуру OnLoad
|
Тут могут последовать возражения от часа:
Слушай, но я ведь могу в OnLoad форм прописать одну строчку - вызов общей функции, с передачей ей самой себя в качестве аргумента, которая сделает то-же самое?
Или я могу сварганить менеджер форм, который это сделает за меня для любой/нужной формы, тогда и прописывать OnLoad в каждой форме не придется? | |
|
| |
|
|
|
|
| Можно и так.
Я не утверждаю, что без классов работать не будет. Можно ж обойтись и без паблик функций, каждый раз переписывая код в соответствующую процедуру.
Проблема в том, что через классы работать удобнее и корректнее. Так же удобней править код и ошибки.
Да и проблемы масштабируемости приложения решаются значительно легче.
Тут ,как говорится, хозяин-барин.
Прочувствует работу с классами- поймет, что так удобней. Не хочет изучать - ради бога. Я не настаиваю. | |
|
| |
|
|
|
|
Слушай, но я ведь могу в OnLoad форм прописать одну строчку - вызов общей функции, с передачей ей самой себя в качестве аргумента, которая сделает то-же самое?
|
И придется писать 25 вызовов функций. А в случае с классами этого делать не придется | |
|
| |
|
|
|
| Кстати, есть ситуации, которые без пользовательских классов вообще решить невозможно. Пример - засунуть в грид датапикер. Без использования классов эту проблему решить вообще невозможно. | |
|
| |
|
|
|
| Ни в коем случае никого не отговариваю от использования классов. | |
|
| |
|
|
|
| А в варианте с наследованием не надо 25 раз указывать от кого наследовать? | |
|
| |
|
|
|
| Одно дело указать от кого наследовать, другое дело - прописать сами процедуры. К тому же в классе можно переопределить не только форм лоад, но и другие события. | |
|
| |
|
|
|
| но и другие
А тут уж и возразить нечего. | |
|
| |
|