Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

public class StrawPoll : System.Web.UI.WebControls.WebControl, INamingContainer {

 private string title = "Straw Poll";

 private pollStyle currentPollStyle = pollStyle.voteandvalues;

 public event OptionEventHandler Voted;

 protected void OnVoted(OptionEventArgs e) {

Voted(this, e);

 }

Также мы имеем метод для инициирования события, вызываемый из элементов управления потомков

Option
при нажатии кнопки голосования:

 public void ChildVote(OptionEventArgs e) {

OnVoted(e);

 }

Наконец,

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

protected void btnVote_Click(object sender, System.EventArgs e) {

 Increment;

 StrawPoll parent = (StrawPoll)Parent;

 if (parent.PollStyle == pollStyle.voteonly) {

parent.PollStyle = pollStyle.valuesonly;

 }

 OptionEventArgs eOption = new OptionEventArgs;

 eOption.originatingOption = this;

 parent.ChildVote(eOption);

}

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

<form id=Form1 method= post runat="server">

 <PCS:StrawPoll id=strawPoll1

title="Who is your favorite James Bond?"

Runat="server" OnVoted="strawPoll1_OnVoted" PollStyle="voteonly">

<PCS:Option Name="Sean Connery" Votes="101" />

<PCS:Option Name="Roger Moore" Votes="83" />

<PCS:Option Name="George Lazenby" Votes="32" />

<PCS:Option Name="Timothy Dalton" Votes="28" />

<PCS:Option Name="Pierce Brosnan" Votes="95" />

 </PCS:StrawPoll>

 <br> <br>

 <asp:Label Runat= "server" ID="resultLabel" Text="No vote cast." />

</form>

вместе со связанным объявлением в скрытом коде формы, если он не добавляется автоматически:

public class WebForm1 : System.Web.UI. Page {

 protected StrawPoll strawPoll1;

Затем сделаем что-нибудь в самом обработчике событий:

 protected void strawPoll1_OnVoted(object sender, OptionEventArgs e) {

result.Label.Text = "You voted for " + e.originatingOption.Name + ".";

 }

Теперь, после голосования мы получаем ответную реакцию на наш голос:

Заключение

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

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

более подробно некоторые области (например, расширить рассмотрение свойств и конструкторов элементов управления). Хотя такие вопросы лучше подходят для более специализированных книг.

Эта глава завершает три главы, посвященные Web. Далее мы перейдем к рассмотрению взаимодействия COM и .NET.

Глава 19

Взаимодействие с COM

Компоненты COM и компоненты .NET не являются по своей природе совместимыми, так как они опираются на различные внутренние архитектуры. К счастью, однако, компания Microsoft предоставляет средства в SDK .NET для создания прокси COM для компонентов .NET и прокси .NET для компонентов COM. Используя эти прокси вместе с парой других технологий, организации могут использовать унаследованные компоненты COM в своих проектах .NET и могут также использовать компоненты .NET в своих приложениях, не являющихся приложениями .NET.

В этой главе будет показано, как достичь взаимодействия между COM и .NET, что поможет понять, почему COM и .NET будут играть различные, но жизненно важные роли в будущих приложениях Windows.

Сравнение COM и .NET

COM обозначает "Компонентная объектная модель" (Component Object Model). Для новичков платформы Windows понимание того, что делает COM, может быть трудным, а понимание того, как она действует, может показаться почти невозможным. Для новичков, не интересующихся созданием драйверов устройств или работой на компанию Microsoft, появление .NET и компонентов .NET позволит избежать сложностей программирования COM. Однако, так как COM была до сегодняшнего дня все же существенной частью программирования Windows, желательно быть знакомым с тем, как она действует и какие преимущества она предоставляет.

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

Существует, по крайней мере, два недостатка у статической компоновки: она требует излишнего пространства памяти, размещая избыточные копии идентичных функций в нескольких исполнимых файлах, и, если обнаруживается ошибка в одной из стандартных функций, требуется перекомпиляция и повторное распространение всех исполнимых файлов, использующих эту функцию. Чтобы избежать таких проблем, разработчики нашли способ компилировать библиотеки функций в автономные двоичные файлы, которые могут динамически компоноваться различными исполнимыми файлами. С помощью этой схемы несколько исполнимых программ могут совместно использовать один и тот же двоичный файл динамически компонуемой библиотеки (Dynamic Link Library, DLL). Если требуется исправить ошибку в служебной функции, можно просто распространить заново DLL, в которой находится эта функция, без перекомпиляции или повторного распространения всех исполнимых файлов, которые ее используют.

Несмотря на свое удобство и эффективность, DLL имеют один серьезный недостаток: они зависят от конкретного языка программирования. Другими словами, DLL, компилированная из исходного кода С, может использоваться только из клиентской программы, которая также была написана на С. (Существуют исключения из этого правила, но такие исключения требуют от программиста специальных усилий).

COM была следующим шагом в эволюции повторного использования кода. С ее помощью программисты могли написать библиотеку классов на таком языке, как C++, откомпилировать библиотеку и использовать классы этой библиотеки из другого совместимого с COM языка программирования, такого как Delphi или Visual Basic. COM был технологией, лежащей в основе других технологий, таких как OLE (Связывание и встраивание объектов) и элементов управления ActiveX.

Поделиться с друзьями: