Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Этот выпуск посвящен "отношениям" между несколькими языками - C#, Java и С++.


Информационный Канал Subscribe.Ru


.Net Собеседник 2

Содержание:
  1. От автора
  2. Обзор новостей
  3. C# vs Java vs C++
  4. Время кода - Передача значений между веб-формами в ASP.NET
  5. Форумы .Net на www.sql.ru

От автора

Здравствуйте, коллеги!

Вот и наступил новый, 2004 год, а следовательно пришло время следующего выпуска .Net Собеседника. Этот выпуск будет посвящен "отношениям" между несколькими языками - C#, Java и С++. Дело в том, что с появлением языка C#, позиционирующегося в качестве основного языка платформы .Net, в разных источниках появляются намёки на то, что C# - язык, полностью или в какой-то степени скопирован с языка компании Sun – Java. Не думаю что это так. Скорее всего, C# можно назвать языком, один из создателей которого, Андерс Хейльсберг, стремился вложить в него всё то положительное, что было создано в этой области за последние десятилетия. Несомненно, можно увидеть в C# «гены» языков C, C++, Object Pascal(Delphi), кто-то заметит заимствования из Visual Basic’a (например, знаменитый цикл foreach). Но сегодня хотелось бы перечислить некоторые отличия языка C# от Java. Итак, попробуем разобраться, являются ли эти два языка близнецами?

  1. В языке Java не существует беззнаковых типов данных, но в C# такие типы есть – sbyte, ushort, uint, ulong.
  2. В языке Java не существует аналога типу enum. Пример: enum WeekDays {Mon, Tue, Wed, Thu, Fri, Sat, Sun};
  3. Язык Java позволяет помещать квадратные скобки как после обозначения типа, так и после идентификатора. В языке C# скобки помещаются только после обозначения типа.
    Пример: string[] sCounter = {“раз”, “два”,”три”};
  4. C# не имеет операции правого сдвига с распространением нуля (>>>).
  5. В Java оператор switch принимает целочисленные значения, C# принимает строки, так же как и целочисленные. Кроме того, Java дает возможность «проваливаться» сквозь case’ ы, а C# не позволяет этого. В С# опреаторы break являются обязательными, если только два case не следуют один за другим без опреаторов между ними.
  6. В Java нет оператора goto. В С# опреаторы goto имеют ограничения, которые делают их похожими на помеченные операторы break в Java.
  7. Java, как и С++, имеют значения параметров по умолчанию, что обеспечивает необходимую гибкость, позволяющую пользователям порождать объект различными способами. C# не имеет значений по умолчанию, но тот же эффект достигается использованием нескольких конструкторов и вызовом их по умолчанию.
  8. В Java эквивалентом деструктора является метод Finalize().
    Пример деструктора для C#:
    public class Connector
    {
    ~Connector() {}
    }
  9. В Java средства доступа формализованы при помощи предопределенных образцов сигнатуры. Тем не менее, это все-таки методы, тогда как свойства C# не являются методами. Они обеспечивают средства для получения доступа к полю с использованием свойства, как будто бы оно и есть непосредственно поле.
  10. В языке Java не имеется индексаторов. Напомню, что индексаторы дают возможность получить доступ к членам класса подобно тому, как это делается в массивах.
  11. В языке Java перегрузка операторов не поддерживается, в то время как язык C# предоставляет полную поддержку этой возможности.
  12. В отличие от событий в Java, которые вызываются с помощью переходов, в C# события для той же цели используют делегаты.
  13. Пространства имен аналогичны пакетам Java с единственным, но существенным различием. В C# отсутствуют встроенные правила, в соответствии с которыми пространство имен должно размещаться в файлах заданного каталога. Пространство имен в C# скорее логическое понятие, чем физическое.
  14. Java не имеет атрибутов, и хотя этот язык имеет широкие возможности отражения, он не обладает возможностью создания пользовательских метаданных, доступных с помощью атрибутов.

    О чём же говорит этот список?
    По-моему, он ясно свидетельствует о том, что разница между языками существует, и, скорее всего, она увеличится с выходом спецификации языка C# 2.0. В то же время существует и много общего, что не удивительно для языков, являющимися наследниками языка С.

    Вобщем, можно сделать такой вывод – если на братьев эти языки похожи, то на близнецов уж никак нет. В тоже время нельзя не заметить, что в настоящее время выбор того или иного языка не ограничивается только синтаксисом, большую роль также играют другие факторы – платформы, на которых могут исполняться приложения, написанные с его использованием, стандартизированность языка, поддержка и развитие его крупными корпорациями, доступные средства разработки, наличие развитой библиотеки классов и большой рынок компонент сторонних производителей.

    Все эти различия (дополненные мною примерами) приведены в книге Джозефа Димайо «С#: искусство программирования.» (СПб.: «ООО ДиаСофтЮП», 2002.-656 с.).

Обзор новостей

  1. Вышел OOReport.NET
    OOReport.NET - это объектно-ориентированный компонент отчётов для приложений .NET Windows Forms и приложений, использующих базы данных. OOReport.NET поможет вам создать высококачественные и гибкие отчёты в виде веб-страниц за короткий период времени. Отчёты, выполненные с помощью OOReport.NET можно модифицировать без изменения исходного кода приложения, перекомпиляций и переустановок. Позволяет динамически подключаться к любому OLEDB источнику данных или MS SQL Server/MSDE. OOReport.NET предлагает широкий спектр форматов отчётов, а также богатый набор свойств, методов и событий для контроля поведения отчёта во время выполнения приложения. OOReport.NET может переходить к определённому объекту и затем создать отчёт о нём. Он хорошо оптимизирован и дружественен к пользователю – всё, что должен сделать пользователь – это нажать на кнопку мыши.
    Дата выхода – 28.12.2003.
    Кстати, если кто-нибудь из вас, уважаемые читатели, будет использовать этот компонент в работе, буду рад получить ваши отзывы о нём – впрочем, так же как и обо всех компонентах/наборах компонент, описываемых в новостях. По возможности кратко – плюсы, минусы, проблемы с которымии вы столкнулись в работе с ними.
  2. Вышел ComponentOne Studio Enterprise 2004 v1
    ComponentOne LLC объявила о выходе ComponentOne Studio Enterprise 2004 v1. Последняя версия этого набора компонент включает PDF for .NET, 15 новых особенностей у ComponentOne VSFlexGrid® Pro 8, более 60 улучшений для .NET и ASP.NET продуктов.
    Дата выхода – 29.12.2003.
  3. Открыт новый .Net-сайт - DotNetAlbum.com
    Статьи, исходный код, рецензии на книги и продукты для разработчиков на C#, ASP.NET и Visual Basic .NET.
    Дата открытия – 01.01.2004.
  4. MMM-Experts Add-In for Visual Studio .NET
    MMM-Experts – набор инструментов для увеличения продуктивности разработчиков, использующих C++/C#/VB, путём добавки нескольких особенностей к IDE: быстрый доступ к любой функции в исходном коде или файлу в вашем решении, переключение между объявлением/реализацией функции для программистов на C++ и многое другое.
    Дата выпуска - 5.01.2004
  5. DevPartner Studio 7.1 Professional Edition
    Продукт компании Compuware DevPartner Studio 7.1 (профессиональная редакция) это набор приложений, разработанных для того, чтобы помочь разработчикам (извините за тавтологию) строить высокоэффективные приложения и компонентыдля платформ Microsoft .NET Framework и Win32. Теперь DevPartner Studio 7.1 предлагает интеграцию с Microsoft Visual Studio .NET 2003 и Windows Server 2003, позволяя разработчикам, использующим последние продукты Microsoft, строить приложения, соответствующие требованиям современного бизнеса.
    Одним из новых возможностей в DevPartner Studio 7.1 является анализ использования приложением .NET памяти, что даёт возможность разработчикам просматривать использование памяти конкретным объектом или классом, отслеживать ссылки на объект, находящийся в памяти и определять строки кода в методах, ответственные за выделение и использование памяти. Используя точный профиль использования памяти приложением, разработчики могут улучшить эффективность выполнения и использования ресурсов приложением путём оптимизирования кода, использующего (или попусту занимающего) наибольшее количество памяти.
    Анализатор исходного кода DevPartner Studio был существенно улучшен для предоставления разработчикам возможности применения правил безопасности к коду. Анализатор автоматизирует процесс проверки кода путём предоставления доступа к базе данных правил, выведенных из множества общепризнанных практик кода, которые могут быть применены к вашему приложению. Анализатор автоматически детектирует общие проблемы кода и предоставляет информацию о причинах этих проблем и пути их решения. Пользователь может быстро выбрать, какие из правил он хотел бы применить и внести соответствующие поправки.
    Ну и цена соответствует возможностям - 1,495USD.
  6. NetAdvantage 2003 Volume 3 / Infragistics DevCenter
    Компания Infragistics начала поставки продукта Infragistics NetAdvantage 2003 Vol. 3, который позволяет разработчикам распространять «ink-enabled» приложения Windows Forms посредством эксклюзивного Presentation Layer Framework’a. NetAdvantage 2003 Vol. 3 также содержит новые .NET UI (интерфейс пользователя), новый ASP.NET компонент, позволяющий выбирать дату, ASP.NET интерфейс к элементам календаря, а также содержит многочисленные улучшения в других важных компонентах этого набора, включая сетку данных, меню, и графопостроению.
    Infragistics также установила партнёрские отношения с ведущими издателями для запуска Infragistics DevCenter, ещё одного направления по усилению сообщества .NET разработчиков. Построенный целиком с использованием компонент Infragistics ASP.NET, этот центр является интегрированным сообществом разработчиков, предоставляя в использование всеобъемлющие онлайн ресурсы. Посетите центр разработчика Infragistics DevCenter по адресу http://devcenter.infragistics.com, где вы можете найти статьи, поддержку, учебники, примеры приложений и многое другое.
    Цена пакета - от 495USD.
  7. Visual Welder 2.0
    Компания sembleWare выпустила следующую версию Visual Welder 2.0 для VS .NET, инструмент быстрой разработки, расширяющий стратегию Microsoft's .NET.
    Visual Welder 2.0 замещает традиционную парадигму построения приложений путём кодирования на новую «сборочную» модель. Visual Welder позволяет разработчикам собирать приложения .NET из .NET "запчастей", которые могут быть загружены непосредственно в приложение из онлайн-каталога «запчастей» или корпоративного хранилища «запчастей».
    «Склеивая запчасти» (Parts) вместе в уникальном 3-D пространственном редакторе, разработчики могут собирать и изменять готовые .NET приложения, просматривать сущности и отношения, модифицировать индивидуальные «запчасти» - всё в полностью контролируемом пользователем 3-D окружении.
    Цена – от 495USD.
  8. 5-ти минутный ролик, демонстрирующий работу в Delphi 8 for .Net

C# vs Java vs C++

Заинтересовавшись вопросом отношений между языками, я начал поиски дополнительных материалов в интернете на эту тему и наткнулся на очень интересную статью, перевод которой приведен ниже. Прежде всего эта статья интересна не только тем, что в ней можно узнать более детально узнать о различиях языков C#, Java и С++, но и почерпнуть информацию почему была введена та или иная конструкция в язык, какие проблемы во взаимотношениях компаний Sun и Microsoft вызвало появление делегатов и т.д. Т.е. в статье не только рассказывается как что-то сделать, но и почему это делается именно так, а не иначе.
Поскольку статья довольно увесистая, то её публикация растянется на два или три номера, но, как по мне, она стоит того.
Итак, -

Сравнительный обзор C#

ЯЗЫК: C#
Автор: Ben Albahari
Компания: Genamics, http://genamics.com/
Дата: 31.07.2000, обновлено 10 Августа 2000.
Оригинал статьи: A Comparative Overview of C#
Благодарности, в алфавитном порядке: Don Box, C.R. Manning, Joe Nalewabau, John Osborn, Thomas Rhode и Daryl Richter за их отзывы и поддержку

ПЕРЕВОД: Чужа В.Ф. ака hDrummer

В этой статье будет рассказано о новых приёмах программирования, которые предоставляются языком C#, о том, что было улучшено по отношению к его ближайшим «родственникам» - Java и C++. Прогресс C# относительно C++ пошёл путём, во многом похожим на путь Java, поэтому здесь не будут объясняться преимущества иерархии с одним корневым объектом и т.п. Эта статья начинается с короткого обзора общих черт C# и Java, а затем углубляется в исследование особенностей языка C#.

Предыстория

В июне 2000, Microsoft объявила о выходе платформы .NET и нового языка программирования, названного C#. C# - строго типизированный объектно-ориентированный язык, созданный в виде оптимальной смеси простоты, экспрессии и эффективности. Платформа .NET является совокупностью Common Language Runtime (среды времени выполнения, подобной JVM) и набора библиотек, которые могут быть использованы всеми языками, способными компилировать в промежуточный язык (IL). C# и .NET в некоторой степени являются симбиотиками: некоторые особенности C# хорошо сочетаются с .NET, а некоторые особенности .NET хороши для C# (хотя .NET и разрабатывалась с возможностью программирования на многих языках). Эта статья более всего сконцентрирована на C#, но кое-где обсуждается и .NET. Язык C# был разработан с оглядкой на многие языки, но более всего он близок к Java и C++. Создателями этого языка являются Anders Hejlsberg (известный созданием языка Delphi) и Scott Wiltamuth.

Содержание

  1. C# и Java
  2. Свойства
  3. Индексаторы
  4. Делегаты
  5. События
  6. Перечисления
  7. Коллекции и Foreach
  8. Структуры
  9. Унификация типов
  10. Перегрузка операторов
  11. Полиморфизм
  12. Интерфейсы
  13. Версионность
  14. Модификаторы параметров
  15. Атрибуты
  16. Конструкции выбора
  17. Предопределённые типы
  18. Модфикаторы полей
  19. Конструкции перехода
  20. Сборки, пространства имён, уровни доступа
  21. Действия с указателями
  22. Прямоугольные массивы
  23. Конструкторы и деструкторы
  24. Управляемая среда выполнения
  25. Библиотеки
  26. Интероперабельность
  27. Выводы

1. C# и Java

Ниже идёт перечисление качеств, присущих как C#, так и Java, отражающих улучшения относительно C++. Эти качества не будут обсуждаться в данной статье, однако вы должны о них знать.
  • Компилируются в машинно-независимый язык, который выполняется в управляемой среде.
  • Сборка мусора на пару с отказом от указателей (в C# возможно ограниченное использование в коде, помеченного как unsafe)
  • Мощные возможности отражения (reflection)
  • Отсутствие файлов заголовков, весь код находится в упаковках или сборках, возможность декларирования одного класса перед другим без возникновения циклической зависимости
  • Поддержка нитей путём блокировки объектов при входе в код, помеченный как блокированный/синхронизируемый (locked/synchronized)
  • Интерфейсы, с множественным наследованием
  • Вложенные классы
  • Отсутствие концепции наследования класса с указанием уровня доступа
  • Отсутствие глобальных функций/констант, всё находится в классе
  • Массивы и строки со встроенной проверкой границ и размерами
  • Везде используется оператор "." , и больше никаких «->, ::»
  • null и boolean/bool являются ключевыми словами
  • Все переменные инициализируются перед использованием
  • Нельзя использовать целые для управления конструкцией «if»
  • Блоки «Try» могут иметь «finally»

2. Свойства

Концепция свойства должна быть известна пользователям Delphi и Visual Basic. Мотивация введения этого понятия в язык – необходимость формализации концепции методов, служащих для записи/чтения полей. Так подход является широко используемым, например в инструментах быстрой разработки приложений RAD (Rapid Application Development).
Типичный код, который вы можете написать на Java или C++:

foo.setSize (getSize () + 1);
label.getFont().setBold (true);

Тот же код на C#:

foo.size++;
label.font.bold = true;

Код на C# выглядит читабельнее. Подобную же простоту и удобство вы заметите, реализуя свойства:

Java/C++:

public int getSize() {
return size;
}

public void setSize (int value) {
size = value;
}

C#:

public int Size
{
  get {return size;}
  set {size = value;}
}

Особенно удачной выглядит реализация концепции на C#, если дело касается свойств для чтения/записи. Взаимоотношения между методами записи и чтения, свойства - «get» и «set» выглядят естественно в C#, создавая впечатление некоторой искусственности в Java или C++. У этого подхода есть много преимуществ. Он вынуждает программиста мыслить в терминах свойств, определяя, должно ли это свойство быть только для чтения, для чтения и записи, да и должно ли оно вообще быть свойством. Если вам нужно изменить имя свойства, то вам понадобится внести изменения только в одно место кода, (я видел методы «get» и «set» в нескольких сотнях строк кода друг от друга. Комментарии тоже создаются лишь в одном месте и не рассинхронизируются друг с другом. Возможно, среда разработчика IDE могла бы помочь решить эту проблему (и вобщем-то так и должно быть). Кроме того, необходимо помнить один из важнейших принципов программирования – создавать такие абстракции, которые хорошо моделируют нашу проблемную область. Язык, поддерживающий свойства, пожнёт плоды более высококачественной абстракции.

Одним из аргументов против использования свойств в таком синтаксическом виде – это неизвестность того, что вы сейчас используете – свойство или поле класса. Однако, практически все классы, хоть со сколько-нибудь реальной сложностью, написанные на языке Java (и, конечно на C#) вообще не имеют общедоступных (public) полей. Поля обычно имеют ограниченный доступ (private/protected/default) и доступны только через методы чтения и записи, которые, естественно, могут иметь и более красивый синтаксис. Также совершенно очевидно, что среда разработчика может отделять цветом свойства от полей и предоставлять программисту информацию в заполнителе кода (code completion) о том, свойство ли это. Также нужно заметить, что в случае правильно созданного класса пользователь должен заботиться только о его спецификациях, но не о его реализации. Ещё один аргумент против – меньшая эффективность свойств. На самом деле, хороший компилятор в состоянии заставить работать метод чтения свойства практически также быстро, как будто происходит доступ к самому полю. В конце концов, даже если использование полей напрямую более эффективно, вы всегда можете позже заменить использование свойства на использование поля без коренной переделки кода, использующего свойства.

3. Индексаторы

C# реализует концепцию «индексаторов», позволяющих трактовать объекты как массивы, в которых каждый элемент, подобно свойствам, доступен через методы get и/или set.

public class Skyscraper
{
Story[] stories;
public Story this [int index] {
get {return stories [index];}

set {
 if (value != null) {
 stories [index] = value;}
}

}
...
}

Skyscraper empireState = new Skyscraper (...);
empireState [102] = new Story ("The Top One", ...);

4. Делегаты

Делегат можно представлять себе как объектно-ориентированный указатель на функцию, поддерживающий строгую типизированность и способный указывать на несколько методов, а не на один. Делегаты решают те же проблемы, что и указатели на функции в C++, а интерфейсы – в языке Java. Его преимущества относительно указателей на функции выражаются в поддержке строгой типизированности и способности указывать на несколько методов. Его преимущества перед интерфейсами в том, что есть возможность вызова метода без необходимости создания внутриклассовых адаптеров или дополнительного кода для обработки вызова нескольких методов. Наиболее важны делегаты в обработке событий, которая обсуждается в следующем параграфе.

5. События

В C# реализована прямая поддержка событий. И хотя обработка событий есть фундаментальной частью программирования с появления самого программирования, найдётся не много языков, в которых пытались формализовать эту концепцию. Если мы посмотрим на то, как сейчас обрабатываются события в основных продуктах , то увидим указатели на функции языка Delphi, адаптеры в Java, и, конечно, систему обработки сообщений Windows API. В C# обработка событий осуществляется с помощью делегатов и ключевого слова «event», для предоставления наиболее понятной реализации. Нижеприведенный пример – лучший путь продемонстрировать процесс создания, вызова и обработки события:

// Объявление делегата, который определяет сигнатуру вызываемого метода
public delegate void ScoreChangeEventHandler (int newScore, ref bool cancel);

// Класс, который сгенерирует событие
public class Game {
//Отметьте использование ключевого слова «event»
public event ScoreChangeEventHandler ScoreChange;

int score;
// Свойство Score
public int Score {
get {
return score;
}
set {
if (score != value) {
bool cancel = false;
ScoreChange (value, ref cancel);
if (! cancel)
score = value;
}
}
}
}

// Класс для обработки события
public class Referee
{
public Referee (Game game) {
// Отслеживаем, когда в игре изменится счёт
game.ScoreChange += new ScoreChangeEventHandler (game_ScoreChange);
}

// Заметьте, что сигнатура метода здесь совпадает с сигнатурой ScoreChangeEventHandler'а
private void game_ScoreChange (int newScore, ref bool cancel) {
if (newScore < 100)
System.Console.WriteLine ("Хороший результат!");
else {
cancel = true;
System.Console.WriteLine ("Такого просто не может быть!");
}
}
}

// Класс для тестирования всего этого
public class GameTest
{
public static void Main () {
Game game = new Game ();
Referee referee = new Referee (game);
game.Score = 70;
game.Score = 110;
}
}

В классе GameTest мы создаём игру, рефери, следящего за игрой, а затем изменяем результат для того, чтобы посмотреть, как рефери прореагирует на это. В этой системе объект класса Game не обладает никакими знаниями об объекте класса Referee, а просто предоставляет любому классу реагировать на изменение результата игры. Ключевое слово «event» позволяет организовать взаимодействие с делегатом путём добавления += или удаления -= методов для реакции на событие.
Возможно, что впервые вы встретили такую систему в графическом интерфейсе пользователя, где объект класса Game аналогичен элементам пользовательского интерфейса, генерирующий события в зависимости от ввода пользователя, а рефери похож на форму, обрабатывающую события.

Делегаты впервые были представлены в Microsoft' Visual J++ и также были придуманы Anders’ом Hejlsberg’ом, став причиной большого технического и юридического спора между Sun и Microsoft. James Gosling, человек, создавший Java, сделал снисходительно-юмористический комментарий, назвав Anders’а Hejlsberg’а, имея ввиду его причастность к языку Delphi сделало его Мистером Указателем-на-Методы ("Mr. Method Pointers"). После ознакомления аргументов Sun против делегатов, можно с уверенностью назвать Gosling’a Мистером Всё-Через-Классы ("Mr. Everything's-a-Class"). Последние несколько лет программирования «через абстракции, которые стараются хорошо смоделировать реальность» начали многими заменяться на концепцию «реальность объектно-ориентирована, так давайте моделировать её с помощью объектно-ориентированных абстракций».

Аргументы компаний Sun и Microsoft «против» и «за» делегаты приведены здесь:

Время кода

Передача значений между веб-формами в ASP.NET

ЯЗЫК: C#
ВЕРСИИ ASP.NET: 1.0 | 1.1
АВТОР: Jeff Prosise,
http://www.aspnetpro.com/
ПЕРЕВОД: Чужа В.Ф ака hDrummer

Вступление
Веб-формы ASP.NET предлагают прекрасную событийно-управляемую программную модель для разработчиков. В целом она упрощает дизайн вашего приложения, но и сама по себе порождает некоторые проблемы. Например, в традиционном ASP можно было легко передавать значения от одной страницы к другой странице с использованием метода POST. Этим подходом нельзя воспользоваться в ASP.NET, если вы хотите использовать модель веб-форм (т.е. форма и элементы управления обрабатываются на стороне сервера). Однако есть несколько подходов, с помощью которых можно преодолеть эти ограничения. Например, значения можно передавать в строке запроса, используя сессионные переменные или с использованием метода Server.Transfer.

Использование строк запроса
Механизм использования строк запроса для передачи значений от страницы к странице не нов.
Основным преимуществом этого метода является его простота.
Недостатками же являются видимость значений передаваемых переменных в адресной строке и отсутствие возможности передачи таким образом объектов. Наилучшее применение этот метод может получить в случае необходимости передачи небольшого числа значений, которые нет необходимости скрывать. Чтобы воплотить этот метод в жизнь, нужно выполнить следующие шаги:

- создать веб-форму с элементами управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick создать строку, содержащую URL для перехода;
- добавить значения из элементов управления к нашему URL’у как параметры в строке запроса;
- выполнить Response.Redirect к другой веб-форме по нашему URL.

Следующий кусочек кода покажет, как это работает:

Исходная Web Form’a (передача параметров)
private void Button1_Click (object sender, System.EventArgs e)
{
string url;
url="anotherwebform.aspx?name=" +
TextBox1.Text + "&email=" +
TextBox2.Text;
Response.Redirect(url);
}

Web Form’a, на которую уходим (приём и обработка параметров)
private void Page_Load (object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}

Использование переменных сессии

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

- создать веб-форму с элементами управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick добавить сессионные переменные и установить в некоторые значения;
- выполнить Response.Redirect к другой веб-форме;
- в этой «другой» веб-форме взять значения из переменных сессии и очистить их при необходимости.

Следующий код продемонстрирует сказанное в действии:

Исходная Web Form’a (передача параметров)
private void Button1_Click (object sender, System.EventArgs e)
{
//textbox1 и textbox2 это элементы управления веб-формы
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Server.Transfer("anotherwebform.aspx");
}

Web Form’a, на которую уходим (приём, обработка и очистка параметров)
private void Page_Load (object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}

Использование Server.Transfer

Это довольно сложный способ передачи значений между страницами. Для передачи значений в другие страницы нужно создать дополнительные свойства класса исходной страницы. Этот метод потребует от вас дополнительного кодирования, но эти усилия будут стоить того. В целом, этот подход более объектно-ориентирован, чем предыдущие методы. Весь процесс выглядит так:

- создать веб-форму с элементами управления;
- создать для свойства процедуру Get, которая будет возвращать значения элементов управления;
- создать кнопку для отсылки формы на сервер (т.н. postback’a);
- в обработчике события onClick вызвать метод Server.Transfer, который передаст выполнение указанной форме;
- во второй форме можно получить ссылку на исходную форму с использованием свойства Context.Handler.
Затем можно использовать созданные свойства для получения значений, находящихся в элементах управления формы.

Теперь код:

Исходная Web Form’a (передача параметров)
Добавим следующие свойства к веб-форме:
public string Name
{
 get
 {
  return TextBox1.Text;
  }
}

public string EMail
{
 get
 {
 return TextBox2.Text;
 }
}

Теперь выполним Server.Transfer.

private void Button1_Click (object sender, System.EventArgs e)
{
 Server.Transfer("anotherwebform.aspx");
}

Web Form’a, на которую уходим (приём, обработка параметров)

private void Page_Load (object sender, System.EventArgs e)
{
//создаём экземпляр исходной формы
WebForm1 wf1;
//получаем ссылку на хэндлер текущего экземпляра 
 wf1=(WebForm1)Context.Handler;
//получаем значения
 Label1.Text=wf1.Name;
 Label2.Text=wf1.EMail;
}

Итого
В этой статье мы рассмотрели три способа передачи данных между двумя ASP.NET веб-страницами – с помощью строки запроса, сессионных переменных и метода Server.Transfer. Также рассмотрели плюсы и минусы всех подходов.

Надеюсь, что статья оказалась вам полезной.

Форумы .Net - вопросы оставшиеся без ответа

ADO: Fetch u Cancel
Как сделать TreeView прозрачным?
Конект с базой
Data Grid set column Format
Формат ввода в текстбокс
Доступ с КПК к MSSQL server
реализация DAL - Как правильно
Вопрос: Event Log и XP ....



На этом второй выпуск .Net Собеседника закончен.
Поздравляю всех с наступившим Новым 2004 Годом и Рождеством, желаю здоровья и удачи!

Чужа Виталий Ф. aka hDrummer,
hdrummer@mail.ru - жду ваши предложения, вопросы и замечания.


Рассылки Subscribe.Ru
.Net Собеседник - Новости мира Net, C#, ASP.Net

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное