2002 mh advanced c sharp programming

578 101 0
2002   mh   advanced c sharp programming

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Advanced C# Programming About the Author Paul Kimmel founded Software Conceptions, Inc., in Okemos, Michigan in 1990 Paul specializes in object-oriented architecture and software design He is the frameworks columnist for Windows Developer Magazine, a bimonthly columnist for codeguru.com, and a contributing columnist to InformIT Paul has written several books on object-oriented programming He is currently the lead architect for a C# and ASP.NET enterprise application for managing the corrections division of the sherrif’s office in Oregon, and he has successfully implemented dozens of corporate and commercial applications in the telecom, insurance, and financial industries and for law enforcement and government agencies, with customers throughout the United States, Canada, and Puerto Rico Advanced C# Programming Paul Kimmel McGraw-Hill/Osborne New York Chicago San Francisco Lisbon London Madrid Mexico City Milan New Delhi San Juan Seoul Singapore Sydney Toronto Copyright © 2002 by The McGraw-HIll Companies, Inc All rights reserved Manufactured in the United States of America Except as permitted under the United States Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system, without the prior written permission of the publisher 0-07-222828-8 The material in this eBook also appears in the print version of this title: 0-07-222417-7 All trademarks are trademarks of their respective owners Rather than put a trademark symbol after every occurrence of a trademarked name, we use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringement of the trademark Where such designations appear in this book, they have been printed with initial caps McGraw-Hill eBooks are available at special quantity discounts to use as premiums and sales promotions, or for use in corporate training programs For more information, please contact George Hoare, Special Sales, at george_hoare@mcgraw-hill.com or (212) 904-4069 TERMS OF USE This is a copyrighted work and The McGraw-Hill Companies, Inc (“McGraw-Hill”) and its licensors reserve all rights in and to the work Use of this work is subject to these terms Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior consent You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited Your right to use the work may be terminated if you fail to comply with these terms THE WORK IS PROVIDED “AS IS” McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE McGraw-Hill and its licensors not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will be uninterrupted or error free Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error or omission, regardless of cause, in the work or for any damages resulting therefrom McGraw-Hill has no responsibility for the content of any information accessed through the work Under no circumstances shall McGraw-Hill and/or its licensors be liable for any indirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, even if any of them has been advised of the possibility of such damages This limitation of liability shall apply to any claim or cause whatsoever whether such claim or cause arises in contract, tort or otherwise DOI: 10.1036/0072228288 Want to learn more? , We hope you enjoy this McGraw-Hill eBook! If you d like more information about this book, its author, or related books and websites, please click here For Trevor, Douglas, and Noah, I love you for the good-natured, loving boys that you are and the fine men I know you will be Love, Fat Daddy This page intentionally left blank For more information about this title, click here Contents at a Glance Part I Windows Applications Chapter Language Foundations Chapter Assembly Viewer 35 Chapter Video Kiosk 63 Chapter Terrarium 101 Chapter Building Database Applications with ADO.NET 133 Part II Tools and Components Chapter Customizing Visual Studio NET 169 Chapter Event Logger 201 Chapter Creating UserControls 231 Chapter Special Effects Text 261 Chapter 10 Creating Custom Attributes 301 Chapter 11 Practical Reflection 319 Part III Web Applications—IBUYSPY Portal Chapter 12 Implementing Web Services 371 Chapter 13 IBuySpy and Dynamic User Interfaces in ASP.NET 399 Chapter 14 Creating Custom Web Controls 435 Copyright 2002 by The McGraw-Hill Companies, Inc Click Here for Terms of Use vii viii Advanced C# Programming Chapter 15 Output Caching and Persisting State Information 469 Chapter 16 Security and Authentication 505 Index 529 538 Advanced C# Programming F Fields defining, implementing, 9–12 Fields, accessing properties and, 343–347 setting and getting fields using FieldInfo, 345–346 setting and getting fields using InvokeMember, 344–345 File dependency, creating, 493–495 File management, embedded resource, 57–58 Files adding for Wizard Library templates, 177–178 completing sample wizard launch, 196 creating VSDir, 182–184 creating wizard launch, 181–182 Machine.config, 509 saving emitted assemblies to, 352–353 Web.config, 507, 507–508 FileStream, writing to, 131–132 FileVersion information, 224–225 Fill method, invoking adapter, 146–147 Filling shapes, 81–82 FillSchema method, invoking adapter, 148 Finally block, 139 Finally handler, try, 139 Form data, posting, 443 Form posts, retaining control value between, 441–443 Form strategies, dialog, 193–194 Formats, reviewing Web Services wire, 378–379 Forms attributes, defining, 510 Forms authentication, implementing with cookies, 509–520 authenticating users, 511–516 modifying Web.config files for forms authentication, 509–511 programming with cookies, 516–520 Forms authentication, modifying Web.config files for, 509–511 defining forms attributes, 510 supplying user credentials, 510–511 Forms Controls, Windows, 52–57 using LinkLabel, 56–57 using MainMenu, 55 using OpenFileDialog, 55 using RichTextBox, 55–56 using StatusBar, 54 working with Form Control, 52–54 Forms designer, defining Windows, 297–298 Forms, using GraphicsPath objects to create shaped, 83–85 FormsAuthentication class, programming with, 514–515 Foundations, language, 3–34 Framework, reviewing Terrarium, 116 Functions, implementing test, 278–279 G Garbage collection, 18–19 Garbage in, garbage out (G.I.G.O.), 192 GDI+ defined, 64–67 GDI+ namespaces, 65 understanding GDI+ programming model, 65–67 GDI+ namespaces, 65 GDI+ programming model, understanding, 65–67 GDIs (graphics device interfaces), 64 General programming strategies, 146 GetPortalSettings stored procedures, invoking, 425–426 G.I.G.O (garbage in, garbage out), 192 Global.asax modules, implementing event handlers in, 416–417 Gradient brushes, linear, 85–87 GradientEditor, creating, 291–293 Graphical user interfaces (GUIs), 71–87 Graphics device interfaces (GDIs), 64 Graphics objects, 79–82 applying transforms to, 82–83 drawing shapes, 81–82 filling shapes, 81–82 implementing PaintEventHandler, 79–80 invalidating controls, 81 overloading OnPaint method, 81 Graphics.DrawImage method, calling, 90–92 GraphicsPath objects, using to create shaped forms, 83–85 GUI is king, 233–234 Guidelines, overloading operator, 32–33 GUIs (graphical user interfaces), 71–87 Index H Handler, implementing page load Init, 426–431 Handlers, try finally, 139 Headers caching by, 478–481 class, 311–312 Hello World, 6–7 HelpProvider, 314–315 implementing, 313–314 specifying class header for, 311–312 Herbivores, creating, 119–126 inheriting from CollectionBase, 123–126 inheriting from ReadOnlyCollectionBase, 123–126 iterating collection of objects, 123 Heuristics, examining performance, 473–476 HTML code, coding script blocks in, 453–454, 453–455 employing DataBinder, 455 using block script, 454–455 using NavigateUrl, 454 HTML tables, using to manage layouts, 411–413 HTTPServerUtility, 466 Hunting behavior, programming, 128 I IBuySpy and dynamic user interfaces in ASP.NET, 399–434 administrating portals, 432–434 creating CSS (cascading style sheets), 401–408 debugging IBuySpy portals, 434 demonstrated topics, 400–401 implementing portal banner, 408–431 introducing mobile modules, 434 secondary topics, 432 IBuySpy portals caching examples in, 482 debugging, 434 integrating custom modules into, 463–465 IConvertible, implementing, 283–287 IDbConnection, switching between databases using, 140–141 Idioms, implementing metaclass, 364–365 IDTWizard interface, implementing, 172 IExtenderProvider interface, implementing, 312–313 IIS, Web.config file is not served by, 507 IL (Intermediate Language), 34, 43, 320 IL, using builder objects to create, 353–355 Image modules, creating, 451–452 Images, adding background, 71–72 Imperative security, 302, 525–527 Implementing AboutBox control, 246–248 AngleEditor, 293–296 attribute constructor, 303–305 Broadcaster, 47–48 constructors, 42 Dispose method, 19 elapsed time clock, 93–94 events, 19–22 Extender Provider, 311–315 fields, 9–12 HelpProvider, 313–314 IConvertible, 283–287 IExtenderProvider interface, 312–313 interfaces, 24–25 loggers, 216–221 methods, 17–18 PaintEventHandler, 79–80 PaintEventHandler for custom painting, 263 PlayerControl, 67–71 properties, 9–12 test functions, 278–279 Tracker control, 87–92 trap behavior, 279–280 type editor, 291–296 TypeConverter, 287–290 UserControl, 248–250 Web Services, 371–397 Indexed properties, 14–17 Information displaying in DataGrid, 159–160 requesting type, 338–340 writing debug, 225 Information, output caching and persisting state, 469–504 caching data, 486–495 caching partial pages, 484–486 configuring session state servers, 501–502 configuring SQL Server for session management, 503–504 demonstrated topics, 470 539 540 Advanced C# Programming output caching pages, 471–484 secondary topics, 500–501 using Application caches, 500 using Session caches, 495–500 Inheritance, 25–28 example, 26–28 extending UserControls through, 254–255 general guidelines for, 26 terminology, 25–26 Init handler, implementing page load, 426–431 Initializing adapters, 144–146 Inline objects, creating, 154 Input parameters, defining for stored procedures, 420–425 Installing Terrarium, 103–106 Instances of classes, creating, 22–23 Interface strategies, user, 191–193 Interfaces defining, 23–24, 48–49 designing UserControl visual, 235–239 generating user, 333–337 implementing, 24–25 implementing IDTWizard, 172 implementing IExtenderProvider, 312–313 implementing ISerializable, 394–397 implementing wizard user, 191–194 programming with IPrincipal, 515–516 using ADO.NET, 139–143 Intermediate Language (IL), 34, 43, 320 Interop, COM, 99 Invocation, dynamic member, 323–331 defining Binder, 327–330 defining member to invoke, 324 passing parameters to InvokeMember, 330–331 specifying BindingFlags, 324–327 Invocation, Windows Forms synchronous method, 62 InvokeMember passing parameters to, 330–331 setting and getting fields using, 344–345 setting and getting properties using, 346 IPostBackEventHandler, implementing, 443 IPrincipal interface, programming with, 515–516 ISerializable interface, implementing, 394–397 J Jscript NET, returning to, 198–199 K Kiosk, Video, 63–100 demonstrated topics, 64 examining PlayerControl, 67–92 GDI+ defined, 64–67 secondary topics, 93–99 L Language foundations, 3–34 attributes, 33–34 object-oriented basics, 4–31 operator overloading, 31–33 Reflection, 34 Languages Delphi, 447 NET, 323 spoken, 447 Languages, support for multiple programming, 115 Layouts, using HTML tables to manage, 411–413 Libraries creating class, 268–277 creating Control, 234 Library project templates, using WebControl, 446 Limitations, overloading operator, 32–33 Linear gradient brushes, 85–87 Lines, writing of OpCodes, 355–362 LinkLabel, 56–57 Links modules creating, 452–456 creating script blocks using Template Editor, 456 Links modules, creating, coding script blocks in HTML code, 453–455 List, adding TODO items to Task, 96–99 ListBoxes adding elements from, 244–246 using ThreadPool to load, 256–258 ListBoxes, loading, 255–258 using BeginUpdate, 256 using EndUpdate, 256 using ThreadPool to load ListBox, 256–258 Index ListBoxes, removing elements from, 244–246 Listener, adding Trace, 221 Listing, code, 36–49 Loggers, event, 201–230 creating dialog boxes, 221–224 demonstrated topics, 202–203 dumping stack, 209–211 exploring System.Diagnostics namespace, 203 FileVersion information, 224–225 implementing loggers, 216–221 managing debug code automatically, 211–216 measuring performance, 228–230 secondary topics, 221 tracing as debugging strategy, 207–209 using debug class, 225–228 using EventLog component, 203–207 Loggers, implementing, 216–221 adding Trace listener, 221 creating event source, 219 deleting custom log, 220 deleting event source, 220 determining if source exists, 220 Logging events to remote machines, 206–207 Logic, using arrays for conditional, 77–79 LoginUrl attribute, 510 Logs deleting custom, 220 tracing to event, 208–209 M Machine.config file, 509 Machines, logging events to remote, 206–207 Macros testing wizards with, 197 writing, 185–186 writing code with, 187–188 MainMenu, 55 Manage layouts, using HTML tables to, 411–413 Management configuring SQL Server for session, 503–504 embedded resource file, 57–58 Manager, code listing for assembly, 36–49 Mappings, creating data column, 153–154 Master-detail relationships, creating, 151–152 Media Player, ActiveX, 69 Member invocation, dynamic, 323–331 defining Binder, 327–330 defining member to invoke, 324 passing parameters to InvokeMember, 330–331 specifying BindingFlags, 324–327 Member modifiers, 31 Member promotion, viable alternatives to, 241–244 Memory, emitting assemblies in, 349–352 MemoryStream objects, serializing organisms using, 130–131 Merge Module, creating, 281–282 Metaclass idioms, implementing, 364–365 Method parameters, 341–343 Methods calling Graphics.DrawImage, 90–92 coding operator, 31–32 control Dispose, 76 CreateChildControls, 444 defined, 146 Dispose, 76–77 emitting Add, 357–359 implementing, 17–18 implementing Dispose, 19 invoking adapter Fill, 146–147 invoking adapter FillSchema, 148 Object.Finalize, 18 overloading OnPaint, 81 passing instance of control to, 263 reflecting, 341–343 SetStyle, 88–89 Microsoft Desktop Engine (MSDE), 139 Microsoft Mobile Internet Toolkit (MMIT), 434 MMIT (Microsoft Mobile Internet Toolkit), 434 Mobile modules, introducing, 434 Models introduction to Common Environment Object, 186–187 understanding GDI+ programming, 65–67 Modes configuring ecosystem, 106 configuring screen saver, 105 configuring Terrarium, 105–106 Modifiers class, 31 member, 31 using, 30–31 541 542 Advanced C# Programming Modifying common.js script, 180–181 default.js script, 178–180 stored procedures, 426 Module, creating Merge, 281–282 Modules creating custom portal, 462–465 creating image, 451–452 creating Links, 452–456 implementing event handlers in Global.asax, 416–417 implementing SignIn, 520–521 implementing XML/XSL transform, 457–462 introducing mobile, 434 programming in code-behind, 415–431 visually designing SignIn, 449–451 MS SQL Server data store, connecting to, 139 MSDE (Microsoft Desktop Engine), 139 Multicasting, workings of, 22 Multiple programming languages, support for, 115 Multithreading, 58–62 queuing work items in ThreadPool, 61 ThreadPool threading, 60–61 Windows Forms synchronous method invocation, 62 N Name, defining one’s namespace, 40–41 Named arguments, 304–305 Namespace and Description, providing, 384 Namespace name, defining one’s, 40–41 Namespaces exploring System.Diagnostics, 203 GDI+, 65 quick review of ADO.NET, 135 Naming conventions, property, 12 NavigateUrl, 454 Navigating, binding and, 252–253 Navigation tabs, adding DataList to implement, 414–415 NET framework, exploring with Reflection, 337–348 accessing properties and fields dynamically, 343–347 binding to events dynamically, 347–348 reflecting method parameters, 341–343 reflecting methods, 341–343 requesting type information, 338–340 returning to CLR Reference application, Assembly Viewer 2, 338 NET languages, 323 Net start servicename, 502 Net stop servicename, 502 No BSDs! (No Blue Screen of Death), 71 Non-deterministic destruction, 18–19 NT Lan Manager (NTLM), 507 NTLM authentication, Windows, 507–509 allowing authorization, 508–509 denying authorization, 508–509 modifying Web.config file for Windows authentication, 507–508 NTLM (NT Lan Manager), 507 O Obj.Command(0), 17 Object Model, introduction to Common Environment, 186–187 Object-oriented basics, 4–31 aggregation, 28–29 creating instances of classes, 22–23 defining classes, 5–22 defining interfaces, 23–24 encapsulation, 28–29 implementing interfaces, 24–25 inheritance, 25–28 polymorphism, 29–30 using modifiers, 30–31 Object-oriented programming language (OOPL), Object.Finalize method, 18 Objects adding DataTable, 150–151 applying transforms to graphics, 82–83 caching in Session caches, 497–499 command, 161–162 creating DataTable, 156 creating inline, 154 generating user interfaces with reflected, 333–337 graphics, 79–82 instantiating with Reflection, 322–323 iterating collection of, 123 type, 321–322 using GraphicsPath, 83–85 Index Objects, serializing, 129–132, 365–366 serializing organisms using MemoryStream objects, 130–131 writing to FileStream, 131–132 Objects, serializing organisms using MemoryStream, 130–131 OLE DB data store, connecting to, 136–139 OnPaint method, overloading, 81 OOPL (object-oriented programming language), OpCodes, writing lines of, 355–362 emitting Add method, 357–359 emitting constructor that calls base class constructor, 361–362 emitting indexer property and property methods, 359–361 OpenFileDialog, 55 Operations, broadcasting, 45–49 Operator guidelines, overloading, 32–33 Operator limitations, overloading, 32–33 Operator methods, coding, 31–32 Operator overloading, 31–33 coding operators methods, 31–32 overloading operator guidelines, 32–33 overloading operator limitations, 32–33 Organisms, serializing using MemoryStream objects, 130–131 Output caching and persisting state information, 469–504 caching data, 486–495 caching partial pages, 484–486 configuring session state servers, 501–502 configuring SQL Server for session management, 503–504 demonstrated topics, 470 output caching pages, 471–484 secondary topics, 500–501 using Application caches, 500 using Session caches, 495–500 Output caching, enabling, 484 Output caching pages, 471–484 caching examples in IBuySpy portal, 482 using declarative caching, 471–481 using programmatic caching, 482–484 Output parameters, defining for stored procedures, 420–425 Output window, writing debug information to, 225 Overloading operator, 31–33 guidelines, 32–33 limitations, 32–33 P Page load Init handler, implementing, 426–431 Pages caching partial, 484–486 incorporating custom server controls into Web, 438–440 Pages, output caching, 471–484 caching examples in IBuySpy portal, 482 using declarative caching, 471–481 using programmatic caching, 482–484 Paint event handler, implementing, 79–80 PaintEventHandler, implementing for custom painting, 263 Painting custom, 253–254 implementing PaintEventHandler for custom, 263 PaintValueEventArgs argument, 293 Parameters caching by, 476–478, 484 method, 341–343 passing to InvokeMember, 330–331 tabid, 417 tabindex, 417 Partial pages, caching, 484–486 Path, cookie, 519 Peer-to-peer computing, 115 Pens, 87 Performance heuristics, examining, 473–476 Performance, measuring, 228–230 Persisting state information, output caching and, 469–504 PickList control, creating, 244–246 adding elements from ListBoxes, 244–246 BeginUpdate, 246 EndUpdate, 246 removing elements from ListBoxes, 244–246 Plants creating, 116, 117–118 introducing to Terrarium, 128–129 PlayControl, 69 adding background images to, 71–72 adding custom controls to, 72–75 Player, ActiveX Media, 69 PlayerControl, creating GUIs (graphical user interfaces) for, 71–87 543 544 Advanced C# Programming PlayerControl, examining, 67–92 creating GUIs (graphical user interfaces) for PlayerControl, 71–87 implementing PlayerControl, 67–71 PlayerControl, implementing, 67–71 Polymorphism, 29–30 Portal banner, implementing, 408–431 designing user controls, 408–409 programming in code-behind module, 415–431 working with design view, 409–415 Portal caching, 487–493 Portal, caching examples in IBuySpy, 482 Portal design, reviewing, 431 Portal settings, reading from databases, 417–426 creating stored procedures, 426 debugging stored procedures, 426 defining input parameters for stored procedures, 420–425 defining output parameters for stored procedures, 420–425 implementing stored procedures, 417–420 invoking GetPortalSettings stored procedures, 425–426 modifying stored procedures, 426 Portal, using cookies in, 518–520 PortalModuleControl base controls, reviewing, 446–447 exploring base control properties, 447 using control attributes, 447 Portals administrating, 432–434 debugging IBuySpy, 434 integrating custom modules into IBuySpy, 463–465 reviewing custom controls in, 446 Positional arguments, 303–304 Positioning controls, 258 Posts, retaining control value between form, 441–443 Practical Reflection, 319–367 demonstrated topics, 320 discovering and using types dynamically, 320–337 emitting dynamic assemblies, 348–363 emitting regular expression assemblies, 366–367 exploring NET framework with Reflection, 337–348 implementing metaclass idioms, 364–365 Reflection and Web Services, 363 secondary topics, 363 serializing objects, 365–366 Printing, basic, 57 Private constructors for dialogs, 222–223 Procedures creating stored, 426 debugging stored, 426 defining input parameters for stored, 420–425 defining output parameters for stored, 420–425 implementing stored, 417–420 invoking GetPortalSettings stored, 425–426 modifying stored, 426 Process class, 99 Processing, asynchronous, 385 Programmatic caching, 482–484 caching by parameters, 484 specifying cache expiration, 483–484 Programming in code-behind module, 415–431 with cookies, 516–520 with FormsAuthentication class, 514–515 hunting behavior, 128 with IPrincipal interface, 515–516 languages, support for multiple, 115 model, understanding GDI+, 65–67 strategies, general, 146 XML Web Service, 107–111 Project templates, copying existing, 176–177 Projects, creating wizard, 172 Promotion, viable alternatives to member, 241–244 Prompt, reading from command, 7–8 Properties Bounds, 293 defining, 11 exploring base control, 447 implementing, 9–12 indexed, 14–17 read-only, 12–14 surfacing constituent, 247–248 write-only, 14 Properties and fields, accessing dynamically, 343–347 setting and getting properties using InvokeMember, 346 setting and getting properties using PropertyInfo, 346–347 Index Property naming conventions, 12 PropertyInfo class, working properties of, 157–158 PropertyInfo, setting and getting properties using, 346–347 Protection block, resource, 139 Prototyping, rapid control, 262–268 creating brushes, 264–265 creating rectangle, 265 creating StringFormat object, 265–268 drawing text, 264 examining problem, 263–268 implementing PaintEventHandler for custom painting, 263 passing instance of control to methods, 263 Provider, implementing Extender, 311–315 ProviderPropertyAttribute, applying, 312 Providers, switching between data, 141–143 Q @-quoted string, 138 Quoted string, 138 R RAD (Rapid Application Design), 262 RaisePostDataChangedEvent, 443 Rapid Application Design (RAD), 262 Read-only data, using DataReader for, 159 Read-only properties, 12–14 Reading attributes, 307–309 from command prompt, 7–8 ReadOnlyCollectionBase, inheriting from, 123–126 Refactoring defined, 146 Reference, passing arguments by, 173 Reference types, value types versus, 49–51 Reflected objects, generating user interfaces with, 333–337 Reflecting methods, 341–343 Reflection, 34 defined, 43 instantiating objects with, 322–323 loading assemblies using, 331–333 using, 43–45 walking assembly using, 43–45 and Web Services, 363 Reflection, exploring NET framework with, 337–348 accessing properties and fields dynamically, 343–347 binding to events dynamically, 347–348 reflecting method parameters, 341–343 reflecting methods, 341–343 requesting type information, 338–340 returning to CLR Reference application, Assembly Viewer 2, 338 Reflection, practical, 319–367 demonstrated topics, 320 emitting dynamic assemblies, 348–363 emitting regular expression assemblies, 366–367 exploring NET framework with Reflection, 337–348 implementing metaclass idioms, 364–365 Reflection and Web Services, 363 secondary topics, 363 serializing objects, 365–366 Regasm utility, 199 Register statement is case-sensitive, 438 Relationships, creating master-detail, 151–152 Remote machines, logging events to, 206–207 Removing elements from ListBoxes, 244–246 Repeater control, 467 Resize event handler, implementing UserControl, 236–237 Resource file management, embedded, 57–58 Resource protection block, 139 Reviewing DesignerSerializationVisibilityAttribute, 316–318 EditorBrowsableAttribute, 315–316 RichTextBox, 55–56 RTTI (run-time type information), 320 Rules in common for animals, 118–119 Run-time conversion with TypeDescriptor class, 290 Run-time type information (RTTI), 320 Running Terrarium client, 105–106 545 546 Advanced C# Programming S Scope, defining using, 40 Screen saver mode, configuring, 105 Script blocks, coding in HTML code, 453–454, 453–455 employing DataBinder, 455 using block script, 454–455 using NavigateUrl, 454 Scripts block, 454–455 modifying common.js, 180–181 modifying default.js, 178–180 Secondary topics adding controls to Toolbox, 95 adding TODO items to Task List, 96–99 catching specific exceptions, 95–96 COM Interop, 99 handling specific exceptions, 95–96 implementing elapsed time clock, 93–94 implementing ISerializable interface, 394–397 SoapFormatter, 393–394 using Process class, 99 using ToolTip control, 94–95 Security code access, 115 declarative, 302, 525 imperative, 302, 525–527 Security and authentication, 505–528 administering users, 521–522 demonstrated topics, 506–507 implementing code access security, 523–527 implementing forms authentication with cookie is, 509–520 implementing SignIn module, 520–521 secondary topics, 522 using Windows NTLM authentication, 507–509 Security, implementing code access, 523–527 declarative security, 525 imperative security, 525–527 Security, introducing code access, 129 Sentinel, 513 Serializing objects, 129–132 Server controls, creating custom, 437–438 Server data store, connecting to MS SQL, 139 Servers configuring session state, 501–502 configuring SQL, 503–504 configuring Terrarium, 106 Service implementing Web, 371–397 stop and start Windows, 502 Servicename, net start, 502 Servicename, net stop, 502 Session caches, 495–500 caching objects in, 497–499 caching objects in Session caches, 497–499 managing, 500 managing Session caches, 500 Session, caching data in, 496–497 Session management, configuring SQL Server for, 503–504 Session state servers, configuring, 501–502 Session states, converting to cookieless, 495 SetStyle method, 88–89 Shaped forms, using GraphicsPath objects to create, 83–85 Shapes drawing, 81–82 filling, 81–82 SignIn modules, visually designing, 449–451 SignIn module, implementing, 520–521 SignIn.ascx control, 520 Singleton defined, 47 Sizing controls, 258 SoapFormatter, 393–394 Source, deleting event, 220 Source, determining if it exists, 220 Special effects text, 261–299 Specific exceptions catching, 95–96 handling, 95–96 Spoken languages, 447 SQL, generating with CommandBuilder, 162 SQL Server, configuring for session management, 503–504 Stack, dumping, 209–211 using StackFrame as diagnostic tool, 211 using StackTrace as diagnostic tool, 209–210 StackFrame, using as diagnostic tool, 211 StackTrace, using as diagnostic tool, 209–210 State information, output caching and persisting, 469–504 Index caching data, 486–495 caching partial pages, 484–486 configuring session state servers, 501–502 configuring SQL Server for session management, 503–504 demonstrated topics, 470 output caching pages, 471–484 secondary topics, 500–501 using Application caches, 500 using Session caches, 495–500 Statements, 39–40 creating alias with using directive, 40 defining using scope, 40 using, 139 States converting to cookieless session, 495 saving control, 440–443 StatusBar, 54 Stored procedures creating, 426 debugging, 426 defining input parameters for, 420–425 defining output parameters for, 420–425 implementing, 417–420 invoking GetPortalSettings, 425–426 modifying, 426 Strategies connection pooling, 144–146 dialog form, 193–194 general programming, 146 user interface, 191–193 Strings in C#, 138 custom, 478–481 @-quoted, 138 quoted, 138 Style sheets, navigating, 401–404 Subroutine defined, 185 Switches, 215–216 Synchronous method invocation, Windows Forms, 62 System.Convert class, 283 System.Diagnostics namespace, exploring, 203 T Tabid parameters, 417 Tabindex parameters, 417 Tables adding controls to, 413–414 HTML, 411–413 Tabs, adding DataList to implement navigation, 414–415 Tabs data, binding, 447–449 Task List, adding TODO items to, 96–99 Teleporter, 112 Template Editor, creating script blocks using, 456 Templates adding files for Wizard Library, 177–178 copying existing project, 176–177 using WebControl library project, 446 Temporary variables, 154 Terrarium, 101–132 configuring, 103–106 creating critters, 116 creating plants, 116 demonstrated topics, 102–103 downloading, 103–106 installing, 103–106 introducing code access security, 129 introducing plants and critters to, 128–129 introducing plants and critters to Terrarium, 128–129 playing Terrarium, 107–115 reviewing Terrarium framework, 116 secondary topics, 129 serializing objects, 129–132 understanding XML Web Services in, 107 Terrarium client configuring, 104–105 running, 105–106 Terrarium framework, reviewing, 116 Terrarium mode, configuring, 105–106 Terrarium, playing, 107–115 code access security, 115 critter timing, 111 environment reporting every six minutes, 107–111 peer-to-peer computing, 115 smart client updates, 112–115 support for multiple programming languages, 115 teleporter, 112 Terrarium server, configuring, 106 Test functions, implementing, 278–279 Testing, defined, 202 Testing, wizards, 173–174 547 548 Advanced C# Programming Text, special effects, 261–299 adding components to Toolbox, 280–281 applying custom editor with EditorAttribute, 296 creating class library, 268–277 creating Merge Module, 281–282 creating type converters, 282–290 defining Windows forms designer, 297–298 demonstrated topics, 262 implementing type editor, 291–296 rapid control prototyping, 262–268 secondary topics, 282 testing your components, 278–280 Threading, ThreadPool, 60–61 ThreadPool queuing work items in, 61 threading, 60–61 using to load ListBox, 256–258 Time clock, implementing elapsed, 93–94 Timestamp column, 327 Timing, critter, 111 TODO items, adding to Task List, 96–99 Toolbox adding components to, 280–281 adding controls to, 95 Tools history of debugging, 226–227 using StackFrame as diagnostic, 211 using StackTrace as diagnostic, 209–210 ToolTip control, 94–95 Trace listener, adding, 221 TraceListener, implementing, 164–165 Tracing as debugging strategy, 207–209 to event log, 208–209 Tracker control defining, 88 implementing, 87–92 Transform modules, implementing XML/XSL, 457–462 Transforms, applying to graphics objects, 82–83 Trap behavior, implementing, 279–280 Try finally handler, 139 Type converters, creating, 282–290 implementing IConvertible, 283–287 implementing TypeConverter, 287–290 Type editor, implementing, 291–296 creating GradientEditor, 291–293 implementing AngleEditor, 293–296 Type information, requesting, 338–340 Type objects, 321–322 TypeConverter, implementing, 287–290 defining ComplexConverter class, 288–289 run-time conversion with TypeDescriptor class, 290 using TypeConverterAttribute, 289–290 TypeConverterAttribute, 289–290 TypeDescriptor class, run-time conversion with, 290 Types reference, 49–51 using ADO.NET interfaces to declare, 139–143 value, 49–51 Types, discovering and using dynamically, 320–337 dynamic member invocation, 323–331 generating user interfaces with reflected objects, 333–337 instantiating objects with Reflection, 322–323 loading assemblies using Reflection, 331–333 using type objects, 321–322 U Unit testing, defined, 202 Updates, smart client, 112–115 Updating assemblies, dynamically, 113–115 User control; See also UserControl User control, creating, 231–259 creating ButtonCluster control, 234–244 creating PickList control, 244–246 custom painting in UserControls, 253–254 defining data bound UserControl, 248–253 demonstrated topics, 232 dynamically positioning and sizing controls, 258 extending UserControls through inheritance, 254–255 implementing AboutBox control, 246–248 loading ListBoxes, 255–258 secondary topics, 255 transparent UserControl background, 254 understanding UserControls, 232–234 User control, designing, 408–409 User credentials, supplying, 510–511 User interfaces Index generating with reflected objects, 333–337 strategies, 191–193 User interfaces, implementing wizard, 191–194 User interfaces, implementing Wizard dialog form strategies, 193–194 user interface strategies, 191–193 User interfaces in ASP.NET, IBuySpy and dynamic, 399–434 administrating portals, 432–434 creating CSS (cascading style sheets), 401–408 debugging IBuySpy portals, 434 demonstrated topics, 400–401 implementing portal banner, 408–431 introducing mobile modules, 434 secondary topics, 432 UserControl custom painting in, 253–254 defined, 233 extending through inheritance, 254–255 implementing, 248–250 UserControl background, transparent, 254 UserControl, defining data bound, 248–253 binding and navigating, 252–253 implementing ContactInformation class, 250–252 implementing UserControl, 248–250 UserControl Resize event handler, implementing, 236–237 UserControl, understanding, 232–234 creating Control Library, 234 GUI is king, 233–234 UserControl defined, 233 UserControl visual interface, designing, 235–239 determining equal subdivisions for buttons, 237–239 implementing UserControl Resize event handler, 236–237 Users, administering, 521–522 Users, authenticating, 511–516 programming with FormsAuthentication class, 514–515 programming with IPrincipal interface, 515–516 Using directive, creating alias with, 40 Using scope, defining, 40 Using statement, 139 Utility, regasm, 199 V Value types versus reference types, 49–51 Values combining BindingFlags, 325 DateTime, 327 Variables, temporary, 154 Video Kiosk, 63–100 demonstrated topics, 64 examining PlayerControl, 67–92 GDI+ defined, 64–67 secondary topics, 93–99 Video Kiosk (VK), 67 VideoKiosk.sln, 69 View, working with design, 409–415 Viewer, Assembly, 35–62 code listing for Assembly Manager, 36–49 demonstrated topics, 36 secondary topics, 49–62 Visual interface, designing UserControl, 235–239 Visual Studio NET, customizing, 169–200 creating custom wizards, 170–174 creating project templates for Visual Studio NET Wizards, 175–184 demonstrated topics, 170 extending Visual Studio NET with wizards, 184–198 returning to Jscript NET, 198–199 secondary topics, 198 using regasm utility, 199 Visual Studio NET, extending with wizards, 184–198 completing sample wizard launch files, 196 creating code generators, 188–191 implementing wizard user interface, 191–194 implementing wizards, 194–196 introduction to Common Environment Object Model, 186–187 registering wizards, 196–197 running wizards from command window, 197–198 testing wizards with macros, 197 writing code with macros, 187–188 writing macros, 185–186 Visual Studio NET Wizards, creating project templates for, 175–184 adding files for Wizard Library templates, 177–178 549 550 Advanced C# Programming copying existing project templates, 176–177 creating VSDir files, 182–184 creating wizard launch files, 181–182 modifying common.js script, 180–181 modifying default.js script, 178–180 VK (Video Kiosk), 67 VSDir files, creating, 182–184 W Web controls, creating custom, 435–468 binding tabs data, 447–449 creating custom portal modules, 462–465 creating image modules, 451–452 creating Links modules, 452–456 demonstrated topics, 436 implementing XML/XSL transform modules, 457–462 rendering controls dynamically, 436–446 reviewing PortalModuleControl base controls, 446–447 secondary topics, 465–466 using HttpServerUtility, 466 using Repeater control, 467 visually designing SignIn modules, 449–451 Web pages, incorporating custom server controls into, 438–440 Web Service exceptions, handling, 384–385 Web Services consuming, 376–378 invoking asynchronously, 385–388 programming XML, 107–111 Reflection and, 363 returning complex data from, 388–392 returning DataSet from, 163–164, 392–393 testing, 379 understanding XML, 107 Web Services, creating simple, 380–388 handling Web Service exceptions, 384–385 invoking Web Services asynchronously, 385–388 providing Namespace and Description, 384 returning simple data, 380–384 Web Services Description Language (WSDL), 375–376 Web Services, discovery and description, 372–379 consuming Web Services, 376–378 DISCO is back, 374–375 reviewing Web Services wire formats, 378–379 WSDL (Web Services Description Language), 375–376 Web Services, implementing, 371–397 creating simple Web Services, 380–388 demonstrated topics, 372 returning complex data from Web Services, 388–392 returning DataSets from Web Services, 392–393 secondary topics, 393–397 testing Web Services, 379 Web Services, discovery and description, 372–379 Web Services wire formats, reviewing, 378–379 Web.config file for Windows authentication, modifying, 507–508 Web.config files, 507–508 are not served by IIS, 507 Web.config files, modifying for forms authentication, 509–511 defining forms attributes, 510 supplying user credentials, 510–511 WebControl library project templates, using, 446 Windows running wizards from command, 197–198 writing debug information to Output, 225 Windows authentication, 513 modifying Web.config file for, 507–508 Windows Forms Controls, 52–57 Windows forms designer, defining, 297–298 Windows Forms synchronous method invocation, 62 Windows NTLM authentication, 507–509 allowing authorization, 508–509 denying authorization, 508–509 modifying Web.config file for Windows authentication, 507–508 Windows service, stop and start, 502 Wire formats, reviewing Web Services, 378–379 Wizard launch files, completing sample, 196 Wizard launch files, creating, 181–182 Wizard Library templates, adding files for, 177–178 Wizard projects, creating, 172 Wizard user interface, implementing, 191–194 dialog form strategies, 193–194 user interface strategies, 191–193 Index Wizards defined, 171 implementing, 194–196 registering, 196–197 running from command window, 197–198 testing, 173–174 testing with macros, 197 Wizards, creating custom, 170–174 creating wizard projects, 172 implementing IDTWizard interface, 172 passing arguments by reference, 173 testing wizards, 173–174 Wizards, creating project templates for Visual Studio NET, 175–184 adding files for Wizard Library templates, 177–178 copying existing project templates, 176–177 creating VSDir files, 182–184 creating wizard launch file, 181–182 modifying common.js script, 180–181 modifying default.js script, 178–180 Wizards, extending Visual Studio NET with, 184–198 completing sample wizard launch files, 196 creating code generators, 188–191 implementing wizard user interface, 191–194 implementing wizards, 194–196 introduction to Common Environment Object Model, 186–187 registering wizards, 196–197 running wizards from command window, 197–198 testing wizards with macros, 197 writing code with macros, 187–188 writing macros, 185–186 Write-only properties, 14 Writing code with macros, 187–188 debug information to Output window, 225 to EventLog, 204–205 to FileStream, 131–132 lines of OpCodes, 355–362 macros, 185–186 X XML control loading XML documents with, 460–462 loading XSL documents with, 460–462 XML documents loading with XML control, 460–462 reviewing, 457–458 XML Web Services programming, 107–111 in Terrarium, 107 XML/XSL transform modules, implementing, 457–462 XSL documents, loading with XML control, 460–462 XSL documents, reviewing, 459–460 selecting data conditionally, 460 sorting XML, 460 551 INTERNATIONAL CONTACT INFORMATION AUSTRALIA McGraw-Hill Book Company Australia Pty Ltd TEL +61-2-9415-9899 FAX +61-2-9415-5687 http://www.mcgraw-hill.com.au books-it_sydney@mcgraw-hill.com SINGAPORE (Serving Asia) McGraw-Hill Book Company TEL +65-863-1580 FAX +65-862-3354 http://www.mcgraw-hill.com.sg mghasia@mcgraw-hill.com CANADA McGraw-Hill Ryerson Ltd TEL +905-430-5000 FAX +905-430-5020 http://www.mcgrawhill.ca SOUTH AFRICA McGraw-Hill South Africa TEL +27-11-622-7512 FAX +27-11-622-9045 robyn_swanepoel@mcgraw-hill.com GREECE, MIDDLE EAST, NORTHERN AFRICA McGraw-Hill Hellas TEL +30-1-656-0990-3-4 FAX +30-1-654-5525 UNITED KINGDOM & EUROPE (Excluding Southern Europe) McGraw-Hill Education Europe TEL +44-1-628-502500 FAX +44-1-628-770224 http://www.mcgraw-hill.co.uk computing_neurope@mcgraw-hill.com MEXICO (Also serving Latin America) McGraw-Hill Interamericana Editores S.A de C.V TEL +525-117-1583 FAX +525-117-1589 http://www.mcgraw-hill.com.mx fernando_castellanos@mcgraw-hill.com ALL OTHER INQUIRIES Contact: Osborne/McGraw-Hill TEL +1-510-549-6600 FAX +1-510-883-7600 http://www.osborne.com omg_international@mcgraw-hill.com ... Copyright 2002 by The McGraw-Hill Companies, Inc Click Here for Terms of Use ix x Advanced C# Programming Secondary Topics Value Types Versus Reference Types Windows Forms Controls... by The McGraw-Hill Companies, Inc Click Here for Terms of Use vii viii Advanced C# Programming Chapter 15 Output Caching and Persisting State Information 469 Chapter 16 Security... the Cache Creating a File Dependency Using the Session Cache Caching Data in the Session Caching Objects in the Session Cache Managing the Session Cache

Ngày đăng: 25/03/2019, 16:00

Từ khóa liên quan

Mục lục

  • Cover

  • About the Author

  • Contents at a Glance

  • Contents

  • Acknowledgments

  • Introduction

  • PART I Windows Applications

    • CHAPTER 1 Language Foundations

    • CHAPTER 2 Assembly Viewer

    • CHAPTER 3 Video Kiosk

    • CHAPTER 4 Terrarium

    • CHAPTER 5 Building Database Applications with ADO.NET

    • PART II Tools and Components

      • CHAPTER 6 Customizing Visual Studio .NET

      • CHAPTER 7 Event Logger

      • CHAPTER 8 Creating UserControls

      • CHAPTER 9 Special Effects Text

      • CHAPTER 10 Creating Custom Attributes

      • CHAPTER 11 Practical Reflection

      • PART III Web Applications— IBUYSPY Portal

        • CHAPTER 12 Implementing Web Services

        • CHAPTER 13 IBuySpy and Dynamic User Interfaces in ASP.NET

        • CHAPTER 14 Creating Custom Web Controls

Tài liệu cùng người dùng

Tài liệu liên quan