Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Visual C Consolidada PT BR
Apostila Visual C Consolidada PT BR
Nvel I - Iniciante
Autor: Elzevir Jr.
Janeiro, 2007
Visual C# Consolidado 2
NDICE
VISUAL C#......................................................................................................................................................................16
GUIA DE INTRODUO AO VISUAL C#......................................................................................................17
GUIA DA DOCUMENTAO DO VISUAL C#....................................................................................................................17
INTRODUO LINGUAGEM C#E AO .NET FRAMEWORK ............................................................................................18
O QUE H DE NOVO NO VISUAL C#2005.......................................................................................................................20
O QUE H DE NOVO NA C#2.0 IDIOMA E COMPILER......................................................................................................22
ATUALIZANDO APLICATIVOS VISUAL C#PARA VISUAL STUDIO 2005..........................................................................24
CRIANDO SEU PRIMEIRO APLICATIVO C#.....................................................................................................................25
USANDO STARTER KITS C#...........................................................................................................................................26
RECURSOS DE AJ UDA ADICIONAIS (VISUAL C#)...........................................................................................................26
COMO FAZER EM C#.....................................................................................................................................................27
USANDO O IDE DO VISUAL C#.......................................................................................................................29
INTRODUO IDE (VISUAL C#).................................................................................................................................29
CRIANDO UM PROJ ETO (VISUAL C#).............................................................................................................................31
PROJ ETANDO UMA INTERFACE DE USURIO (VISUAL C#) .............................................................................................34
O INTELLISENSE ...........................................................................................................................................................36
LISTAS DE CONCLUSO.................................................................................................................................................37
INFORMAES RPIDAS................................................................................................................................................37
MEMBROS DA LISTA......................................................................................................................................................37
INFORMAES DE PARMETRO.....................................................................................................................................37
ADICIONANDO DIRETIVAS 'USING'.................................................................................................................................38
REFATORAO..............................................................................................................................................................38
TRECHOS DE CDIGO ....................................................................................................................................................38
SUBLINHADO ONDULADO..............................................................................................................................................38
AJ UDA DE LEGIBILIDADE..............................................................................................................................................39
Estrutura de tpicos ................................................................................................................................................39
COLORIZAO..............................................................................................................................................................39
NAVEGANDO E PROCURANDO.........................................................................................................................40
EXIBIO DE CLASSE ....................................................................................................................................................40
NAVEGAO CTRL+TAB............................................................................................................................................40
BARRAS DE NAVEGAO ..............................................................................................................................................41
LOCALIZAR EM ARQUIVOS ............................................................................................................................................42
CRIANDO E DEPURANDO (VISUAL C#) .....................................................................................................43
MODELAGEM E ANLISE DE CDIGO (VISUAL C#)............................................................................46
ADICIONANDO E EDITANDO RECURSOS (VISUAL C#)....................................................................49
OBTENDO AJUDA (VISUAL C#)......................................................................................................................51
IMPLANTANDO APLICATIVOS C#.................................................................................................................54
RECURSOS DO CODE EDITOR DO VISUAL C#.................................................................................................................54
Refatorao .............................................................................................................................................................54
TRECHOS DE CDIGOS (C#)...........................................................................................................................................55
CDIGO COLORIZATION................................................................................................................................................56
METADADOS COMO FONTE............................................................................................................................................58
CONFIGURAES DO IDE VISUAL C#...........................................................................................................................59
ATALHOS DE TECLADO VISUAL C#...............................................................................................................................60
Teclas de atalho.......................................................................................................................................................60
TECLAS DE ATALHO PADRO CONFIGURAES DEVELOPMENT GERAIS........................................................................62
ESCREVENDO APLICATIVOS COM O VISUAL C#..................................................................................64
USANDO A BIBLIOTECA DE CLASSE DO .NET FRAMEWORK (VISUAL C#).....................................................................64
CRIANDO APLICATIVOS DO WINDOWS FORMS (VISUAL C#) .........................................................................................65
CRIANDO APLICATIVOS DE CONSOLE (VISUAL C#) ......................................................................................................65
ACESSAR E EXIBIR DADOS (VISUAL C#)........................................................................................................................65
CRIANDO APLICATIVOS MVEIS E INCORPORADOS (VISUAL C#) .................................................................................66
Visual C# Consolidado 3
CRIANDO E ACESSANDO SERVIOS DA WEB (VISUAL C#)...........................................................67
CRIANDO COMPONENTES (VISUAL C#)....................................................................................................68
DESENVOLVENDO NA PLATAFORMA DO OFFICE (VISUAL C#) ......................................................................................68
Programao do Office (Como Fazer em C#).........................................................................................................68
Como: Atualizar solues das Ferramentas do Visual Studio para o Office ..........................................................69
O EXCEL USANDO EXPLICAES PASSO-A-PASSO.............................................................................71
COLETA DE DADOS USANDO UM FORMULRIO DO WINDOWS WALKTHROUGH.............................................................71
ALTERANDO PLANILHA FORMATAO USANDO CONTROLES CHECKBOX WALKTHROUGH: .........................................73
EXIBINDO TEXTO EM UMA CAIXA DE TEXTO EM UMA PLANILHA USANDO UM BOTO WALKTHROUGH:........................76
PROGRAMAO CONTRA EVENTOS DE UM CONTROLE NAMEDRANGE WALKTHROUGH:...............................................78
PASSO-A-PASSO: CONCEDENDO E REMOVENDO PERMISSES PARA UMA SOLUO DO OFFICE .....................................81
PASSO-A-PASSO: LIGANDO UMA CLULA DE PLANILHA A UM CAMPO DE BANCO DE DADOS..........................................84
WALKTHROUGH: VINCULAO CLULAS PARA VRIAS COLUNAS EM UMA TABELA .....................................................87
CRIANDO UMA RELAO MESTRE / DETALHES USANDO UM DATASET EM CACHE WALKTHROUGH: .............................91
WALKTHROUGH: ATUALIZANDO UM GRFICO EM UMA PLANILHA USANDO BOTES DE OPO....................................94
VINCULAO DE DADOS PARA CONTROLES EM UM PAINEL AES DO EXCEL WALKTHROUGH:..................................99
IMPLANTANDO UM WORD OU SOLUTION DO EXCEL USANDO UM MANIFESTO DEPLOYMENT WALKTHROUGH:..........103
IMPLANTANDO UM WORD OU SOLUTION DO EXCEL USANDO UM ARQUIVO DO WINDOWS INSTALLER WALKTHROUGH:
....................................................................................................................................................................................107
PASSO-A-PASSO: CONCEDENDO E REMOVENDO PERMISSES PARA UMA SOLUO DO OFFICE ...................................112
O WORD USANDO EXPLICAES PASSO-A-PASSO..........................................................................116
WALKTHROUGH: CHANGING DOCUMENT FORMATAO USANDO CONTROLES CHECKBOX .......................................116
EXIBINDO TEXTO EM UMA CAIXA DE TEXTO EM UM DOCUMENTO USANDO UM BOTO WALKTHROUGH:....................119
WALKTHROUGH: CRIANDO MENUS DE ATALHO PARA INDICADORES...........................................................................121
WALKTHROUGH: ATUALIZANDO UM GRFICO EM UM DOCUMENTO USANDO BOTES DE OPO................................124
VINCULAO DE DADOS PARA CONTROLES EM UM PAINEL AES DO WORD WALKTHROUGH: ................................128
WALKTHROUGH: CRIAR UMA MARCA INTELIGENTE QUE CONVERTE TEMPERATURES DE FAHRENHEIT PARA CELSIUS133
IMPLANTANDO UM WORD OU SOLUTION DO EXCEL USANDO UM MANIFESTO DEPLOYMENT WALKTHROUGH:..........135
IMPLANTANDO UM WORD OU SOLUTION DO EXCEL USANDO UM ARQUIVO DO WINDOWS INSTALLER WALKTHROUGH:
....................................................................................................................................................................................139
PASSO-A-PASSO: CONCEDENDO E REMOVENDO PERMISSES PARA UMA SOLUO DO OFFICE ...................................144
COMO: ADICIONAR CONTROLES A DOCUMENTOS DO OFFICE ...................................................................................147
COMO: EXECUTAR CLCULOS DO EXCEL POR PROGRAMAO.................................................................................149
COMO: CRIAR MENUS DO OFFICE PROGRAMATICAMENTE...........................................................................................149
COMO: CRIAR BARRAS DE FERRAMENTAS DO OFFICE POR PROGRAMAO.............................................................150
DESENVOLVIMENTO CORPORATIVO (VISUAL C#)...........................................................................152
PROGRAMAO DO TABLET PC (VISUAL C#) ..........................................................................................152
UDIO, VDEO, JOGOS E ELEMENTOS GRFICOS (VISUAL C#)......................................................152
CRIANDO STARTER KITS (VISUAL C#).......................................................................................................154
MIGRANDO PARA O VISUAL C#...................................................................................................................155
C#PARA DESENVOLVEDORES J AVA ............................................................................................................................155
CONVERTENDO APLICATIVOS J AVA PARA VISUAL C#.................................................................................................155
PARA DESENVOLVEDORES C++C#.............................................................................................................................155
GUIA DE PROGRAMAO C#.........................................................................................................................158
EM UM PROGRAMA C#................................................................................................................................................158
Hello world-seu primeiro programa (guia de programao C#)..........................................................................159
Estrutura geral de um programa C# (guia de programao C#)..........................................................................160
MAIN() E ARGUMENTOS DE LINHA DE COMANDO (GUIA DE PROGRAMAO C#) ........................................................160
ARGUMENTOS DE LINHA DE COMANDO (GUIA DE PROGRAMAO C#)........................................................................161
COMO: EXIBIR ARGUMENTOS DE LINHA DE COMANDO (GUIA DE PROGRAMAO C#)..............................................162
COMO: ACESSAR ARGUMENTOS DE LINHA DE COMANDO USANDO FOREACH (GUIA DE PROGRAMAO C#).............163
MAIN() RETORNA VALORES (GUIA DE PROGRAMAO C#).........................................................................................163
TIPOS DE DADOS (GUIA DE PROGRAMAO C#) ..........................................................................................................164
MATRIZES (GUIA DE PROGRAMAO DO C#).....................................................................................165
MATRIZES COMO OBJ ETOS (GUIA DE PROGRAMAO C#)...........................................................................................165
Visual C# Consolidado 4
MATRIZES MULTIDIMENSIONAIS (GUIA DE PROGRAMAO C#)..................................................................................166
MATRIZES PASSAGEM COMO PARMETROS (GUIA DE PROGRAMAO C#)..................................................................166
PASSANDO REF USANDO MATRIZES E OUT (GUIA PROGRAMAO C#) .......................................................................168
SEQNCIAS (GUIA DE PROGRAMAO C#)................................................................................................................169
USANDO STRINGS (GUIA DE PROGRAMAO C#)........................................................................................................169
ESPECIFICAO DA LINGUAGEM C#........................................................................................................173
REFERNCIA C#....................................................................................................................................................174
PALAVRAS-CHAVE C#.................................................................................................................................................174
PALAVRA-CHAVE ABSTRACT.......................................................................................................................................174
PALAVRA-CHAVE EVENT.............................................................................................................................................177
PALAVRA-CHAVE NEW................................................................................................................................................181
OPERADOR NEW....................................................................................................................................................181
MODIFICADOR NEW..............................................................................................................................................184
PALAVRA-CHAVE STRUCT..................................................................................................................................186
PALAVRA-CHAVE AS............................................................................................................................................189
PALAVRA-CHAVE EXPLICIT.........................................................................................................................................190
PALAVRA-CHAVE NULL...............................................................................................................................................191
PALAVRA-CHAVE SWITCH...........................................................................................................................................192
PALAVRA-CHAVE BASE...............................................................................................................................................194
PALAVRA-CHAVE EXTERN...........................................................................................................................................196
PALAVRA-CHAVE OBJ ECT ...........................................................................................................................................197
PALAVRA-CHAVE THIS................................................................................................................................................198
PALAVRA-CHAVE BOOL ..............................................................................................................................................200
PALAVRA-CHAVE FALSE .............................................................................................................................................201
OPERADOR FALSE.................................................................................................................................................201
FALSE (LITERAL) ...................................................................................................................................................201
PALAVRA-CHAVE OPERATOR ......................................................................................................................................202
PALAVRA-CHAVE THROW...........................................................................................................................................204
PALAVRA-CHAVE BREAK ............................................................................................................................................205
PALAVRA-CHAVE TRY-FINALLY ..................................................................................................................................206
PALAVRA-CHAVE OUT.................................................................................................................................................207
PALAVRA-CHAVE TRUE...............................................................................................................................................208
OPERADOR TRUE...................................................................................................................................................208
TRUE (LITERAL).....................................................................................................................................................208
PALAVRA-CHAVE BYTE...............................................................................................................................................209
PALAVRA-CHAVE FIXED..............................................................................................................................................210
PALAVRA-CHAVE OVERRIDE.......................................................................................................................................212
PALAVRA-CHAVE TRY-CATCH.....................................................................................................................................213
PALAVRA-CHAVE SWITCH...........................................................................................................................................216
PALAVRA-CHAVE FOAT...............................................................................................................................................218
PALAVRA-CHAVE PARAMS..........................................................................................................................................219
PALAVRA-CHAVE TYPEOF ...........................................................................................................................................220
PALAVRA-CHAVE TRY-CATCH.....................................................................................................................................222
PALAVRA-CHAVE FOR.................................................................................................................................................225
PALAVRA-CHAVE PRIVATE..........................................................................................................................................226
PALAVRA-CHAVE UINT................................................................................................................................................227
PALAVRA-CHAVE CHAR......................................................................................................................................228
PALAVRA-CHAVE FOREACH, IN...................................................................................................................................228
PALAVRA-CHAVE VOLATILE .......................................................................................................................................229
PALAVRA-CHAVE DELEGATE.......................................................................................................................................230
PALAVRA-CHAVE OCK ................................................................................................................................................232
PALAVRA-CHAVE STACKALOC....................................................................................................................................234
OPERADORES C#..................................................................................................................................................237
OPERADORES SOBRECARREGADOS ..........................................................................................................................238
OPERADOR [ ]..............................................................................................................................................................239
OPERADOR ( )..............................................................................................................................................................240
OPERADOR . (PONTO)..................................................................................................................................................241
OPERADOR +...............................................................................................................................................................241
OPERADOR -................................................................................................................................................................242
OPERADOR * ...............................................................................................................................................................243
Visual C# Consolidado 5
OPERADOR /................................................................................................................................................................244
OPERADOR %..............................................................................................................................................................245
OPERADOR &..............................................................................................................................................................245
OPERADOR |................................................................................................................................................................246
OPERADOR ^...............................................................................................................................................................247
OPERADOR !................................................................................................................................................................248
OPERADOR ~...............................................................................................................................................................248
OPERADOR =...............................................................................................................................................................249
OPERADOR <...............................................................................................................................................................250
OPERADOR >...............................................................................................................................................................250
OPERADOR ?: ..............................................................................................................................................................251
OPERADOR ++.............................................................................................................................................................252
OPERADOR -- ..............................................................................................................................................................253
OPERADOR &&...........................................................................................................................................................254
DIRECTIVES PREPROCESSOR C#................................................................................................................256
#IF (REFERNCIA C#)..................................................................................................................................................256
#ELSE PESSOA (REFERNCIA C#)................................................................................................................................257
#ENDIF (REFERNCIA C#)............................................................................................................................................257
#DEFINIR (REFERNCIA C#) .......................................................................................................................................258
#UNDEF (REFERNCIA C#)...........................................................................................................................................258
#WARNING (REFERNCIA C#)......................................................................................................................................258
#ERROR (REFERNCIA C#)..........................................................................................................................................259
#LINE (REFERNCIA C#).............................................................................................................................................259
#REGION (REFERNCIA C#).........................................................................................................................................260
#ENDREGION (REFERNCIA C#)...................................................................................................................................260
#PRAGMA (REFERNCIA C#).......................................................................................................................................260
AVISO #PRAGMA (REFERNCIA C#)............................................................................................................................260
SOMA DE VERIFICAO #PRAGMA (REFERNCIA C#) .................................................................................................261
OPES DO COMPILADOR C#.......................................................................................................................262
CRIANDO DE LINHA DE COMANDO...............................................................................................................................262
COMO CONSTRUIR A PARTIR DA LINHA DE COMANDO: ................................................................................................263
IMPLANTAO DE APLICATIVOS C#........................................................................................................264
OPES DO COMPILADOR C#LISTADAS POR CATEGORIA ............................................................................................264
Otimizao.............................................................................................................................................................264
Arquivos de sada ..................................................................................................................................................264
Conjuntos .NET Framework..................................................................................................................................264
Erros Debugging / verificao ..............................................................................................................................265
Preprocessor .........................................................................................................................................................265
Recursos ................................................................................................................................................................265
Diversos.................................................................................................................................................................265
OPES DO COMPILADOR C#LISTADAS ALFABETICAMENTE......................................................................................266
COMO LOCALIZAR AJ UDA PARA ERROS DO COMPILADOR:...........................................................................................267
PARA ENCONTRAR AJ UDA PARA UM ERRO..................................................................................................................267
EXEMPLOS DO VISUAL C#...............................................................................................................................268
EXEMPLO WORLD DE SAUDAO................................................................................................................................269
EXEMPLO DE PARMETROS DA LINHA DE COMANDO...................................................................................................271
EXEMPLO MATRIZES ...................................................................................................................................................272
EXEMPLO PROPRIEDADES............................................................................................................................................272
EXEMPLO BIBLIOTECAS...............................................................................................................................................273
EXEMPLO DE VERSO..................................................................................................................................................274
COLEO EXEMPLO CLASSES .....................................................................................................................................275
EXEMPLO STRUCTS.....................................................................................................................................................276
EXEMPLO INDEXADORES.............................................................................................................................................277
INDEXADO EXEMPLO PROPRIEDADES..........................................................................................................................278
EXEMPLO CONVERSIONS DEFINIDAS PELO USURIO...................................................................................................279
EXEMPLO GENERICS (C#)............................................................................................................................................279
EXEMPLO REPRESENTANTES.......................................................................................................................................281
EXEMPLO EVENTOS.....................................................................................................................................................282
Visual C# Consolidado 6
EXEMPLO DE IMPLEMENTAO DE INTERFACE EXPLCITA ..........................................................................................283
EXEMPLO DOS MTODOS CONDICIONAL .....................................................................................................................284
EXEMPLO DE DOCUMENTAO XML..........................................................................................................................285
PLATAFORMA INVOKE EXEMPLO................................................................................................................................286
EXEMPLO PARTE 1 INTEROP COM..............................................................................................................................287
EXEMPLO PARTE 2 INTEROP COM..............................................................................................................................288
EXEMPLO ATRIBUTOS..................................................................................................................................................289
EXEMPLO DE SEGURANA...........................................................................................................................................290
SEGMENTAO DE EXEMPLO......................................................................................................................................291
EXEMPLO DE CDIGO NO SEGUROS...........................................................................................................................292
EXEMPLO BD OLE.....................................................................................................................................................293
PRODUZIR EXEMPLO...................................................................................................................................................294
ANNIMO EXEMPLO REPRESENTANTES.......................................................................................................................295
EXEMPLO TIPOS PARCIAL ............................................................................................................................................296
EXEMPLO ANULVEL ..................................................................................................................................................296
TERMINOLOGIA C#.............................................................................................................................................298
EXEMPLOS DO VISUAL C#...............................................................................................................................301
EXEMPLO WORLD DE SAUDAO................................................................................................................................303
EXEMPLO DE PARMETROS DA LINHA DE COMANDO...................................................................................................304
EXEMPLO MATRIZES ...................................................................................................................................................305
EXEMPLO PROPRIEDADES............................................................................................................................................306
EXEMPLO BIBLIOTECAS...............................................................................................................................................307
EXEMPLO DE VERSO..................................................................................................................................................308
COLEO EXEMPLO CLASSES .....................................................................................................................................309
EXEMPLO STRUCTS.....................................................................................................................................................310
EXEMPLO INDEXADORES.............................................................................................................................................311
INDEXADO EXEMPLO PROPRIEDADES..........................................................................................................................311
EXEMPLO CONVERSIONS DEFINIDAS PELO USURIO...................................................................................................312
EXEMPLO GENERICS (C#)............................................................................................................................................313
EXEMPLO OVERLOADING DO OPERADOR ....................................................................................................................314
EXEMPLO REPRESENTANTES.......................................................................................................................................315
EXEMPLO EVENTOS.....................................................................................................................................................316
EXEMPLO DE IMPLEMENTAO DE INTERFACE EXPLCITA ..........................................................................................317
EXEMPLO DOS MTODOS CONDICIONAL .....................................................................................................................318
EXEMPLO DE DOCUMENTAO XML..........................................................................................................................318
PLATAFORMA INVOKE EXEMPLO................................................................................................................................319
EXEMPLO PARTE 1 INTEROP COM..............................................................................................................................320
EXEMPLO PARTE 2 INTEROP COM..............................................................................................................................322
EXEMPLO ATRIBUTOS..................................................................................................................................................323
EXEMPLO DE SEGURANA...........................................................................................................................................324
SEGMENTAO DE EXEMPLO......................................................................................................................................325
EXEMPLO DE CDIGO NO SEGUROS...........................................................................................................................326
EXEMPLO BD OLE.....................................................................................................................................................327
PRODUZIR EXEMPLO...................................................................................................................................................328
ANNIMO EXEMPLO REPRESENTANTES.......................................................................................................................328
EXEMPLO TIPOS PARCIAL ............................................................................................................................................329
EXEMPLO ANULVEL ..................................................................................................................................................330
COMO FAZER EM C#................................................................................................................................................332
LINGUAGEM C# (COMO EU FAO EM C#).........................................................................................................334
O QUE H DE NOVO NA C#2.0 IDIOMA E COMPILER....................................................................................................340
Usando Starter Kits C# .........................................................................................................................................340
Especificao da Linguagem C# ...........................................................................................................................341
Main() e argumentos de linha de comando (Guia de programao C#)...............................................................341
Main() retorna valores (Guia de programao C#)..............................................................................................343
base (Referncia do C#) ........................................................................................................................................343
Construtores de instncia (Guia de programao C#) .........................................................................................345
CLASSES GENRICAS NO .NET FRAMEWORK ..............................................................................................................357
Viso geral sobre Generics no .NET Framework..................................................................................................357
Tipos e Generics aninhadas ..................................................................................................................................358
System.Collections.Generic...................................................................................................................................359
Visual C# Consolidado 7
System.Collections.ObjectModel ...........................................................................................................................359
O encadeamento representantes............................................................................................................................361
Igualdade e classificao Comparisons ................................................................................................................361
Funcionalidade coleo ........................................................................................................................................361
Vantagens de Generics ..........................................................................................................................................362
A palavra-chave default em cdigo fonte "genrico" (Guia de programao C#) ...............................................363
Mtodos genrico (Guia de programao C#)......................................................................................................363
Restries em parmetros de tipo (Guia de programao C#) .............................................................................365
Representantes genricos (Guia de programao C#)..........................................................................................367
Uma tabela imposto exemplo ................................................................................................................................375
Criar um suplemento de automao para Excel usando o Visual Studio e cdigo gerenciado ............................375
Executar o suplemento do Excel............................................................................................................................376
Executar cdigo em outro domnio de aplicao (Guia de programao C#)......................................................392
Exemplos do Visual C#..........................................................................................................................................394
.NET FRAMEWORK (COMO FAZER EM C#).......................................................................................................397
INTRODUO LINGUAGEM C#E AO .NET FRAMEWORK ..........................................................................................408
Viso geral sobre o .NET Framework...................................................................................................................410
Viso Geral Conceitual Sobre o .NET Framework ...............................................................................................410
COMMON LANGUAGE RUNTIME..................................................................................................................................416
Viso geral do Common Language Runtime .........................................................................................................416
Gerenciamento automtico de memria................................................................................................................417
CTS (Common Type System) .................................................................................................................................420
Viso Geral do CTS (Common Type System) ........................................................................................................420
Definies de Tipo.................................................................................................................................................422
Membros de Tipos .................................................................................................................................................424
Tipos de valor no Common Type System...............................................................................................................426
Classes no Common Type System..........................................................................................................................427
Delegados no Common Type System.....................................................................................................................428
Matrizes em Common Type System.......................................................................................................................430
Interfaces no Common Type System......................................................................................................................431
Ponteiros no Common Type System (CTS) ............................................................................................................431
OS METADADOS E OS COMPONENTES AUTODESCRITIVOS............................................................................................433
Viso Geral Sobre Metadados...............................................................................................................................433
Estrutura e uso de metadados ...............................................................................................................................434
Metadados e Estrutura do Arquivos PE................................................................................................................434
Uso de metadados em tempo de execuo.............................................................................................................435
ASSEMBLIES NO COMMON LANGUAGE RUNTIME........................................................................................................436
Viso Geral Sobre Assemblies...............................................................................................................................437
Benefcios do Assembly .........................................................................................................................................438
Sumrio de assembly .............................................................................................................................................439
Manifesto do Assembly..........................................................................................................................................440
Cache Global de Assemblies .................................................................................................................................442
Assemblies de Nomes Fortes .................................................................................................................................443
Consideraes sobre segurana de assemblies .....................................................................................................443
Versionamento de Assembly ..................................................................................................................................445
Nmero de Verso do Assembly ............................................................................................................................446
Verso Informativa do Assembly...........................................................................................................................447
Posicionamento do Assembly ................................................................................................................................447
Assemblies e execuo lado a lado........................................................................................................................448
Viso Geral da Biblioteca de Classes do .NET Framework..................................................................................448
Localizador rpido de tecnologia..........................................................................................................................451
Criando Novas Seqncias de Caracteres.............................................................................................................458
Aparando e Removendo Caracteres ......................................................................................................................460
Preenchendo Seqncias de Caracteres................................................................................................................461
Comparando Seqncias de Caracteres................................................................................................................462
Alterando a Caixa..................................................................................................................................................466
Usando a Classe StringBuilder .............................................................................................................................467
Acrescentar............................................................................................................................................................468
Colees e Estruturas de Dados............................................................................................................................472
Definir colees.....................................................................................................................................................472
Comumente usados tipos da coleo.....................................................................................................................474
Colees de bits.....................................................................................................................................................474
Visual C# Consolidado 8
Colees especializados ........................................................................................................................................475
Criando e Manipulating colees..........................................................................................................................475
Selecionando uma Classe de Coleo ...................................................................................................................476
Enumerar uma coleo..........................................................................................................................................477
Colees e sincronizao (segurana do segmento) .............................................................................................478
Comparaes e classifica em colees..................................................................................................................478
Quando Usar Colees Genricas ........................................................................................................................479
Classe genrica List ..............................................................................................................................................480
Consideraes sobre desempenho.........................................................................................................................481
Classe genrica SortedDictionary.........................................................................................................................483
DEPURAO (COMO FAZER EM C#) ............................................................................................................................495
Compilando no Visual Studio................................................................................................................................495
Compilao Durante o Desenvolvimento de Aplicativos ......................................................................................495
Configuraes de Compilao ..............................................................................................................................496
Compilar plataformas ...........................................................................................................................................498
Compilar elementos de interface do usurio.........................................................................................................504
Caixa de Dilogo Batch Build...............................................................................................................................504
Janela de sada......................................................................................................................................................506
Caixa de Dilogo Configuration Manager............................................................................................................507
Depurao no Visual Studio..................................................................................................................................508
O que h de novo no depurador Visual Studio 2005.............................................................................................508
Segurana do Depurador ......................................................................................................................................511
Segurana de Depurao Gerenciada...................................................................................................................511
Segurana em Depurao Remota ........................................................................................................................511
Segurana de Depurao de Servios da Web ......................................................................................................512
Componentes Externos ..........................................................................................................................................512
Smbolos e Cdigo Fonte.......................................................................................................................................512
Preparao e configuraes de depurao...........................................................................................................512
Configuraes do Projeto do Depurador ..............................................................................................................513
Requisitos de software depurao SQL.................................................................................................................513
Configuraes do projeto para um C++ depurar configurao...........................................................................515
Como definir permisses SQL Server para depurao: ........................................................................................518
Configuraes do projeto para uma configurao de depurao no Visual Basic...............................................519
Arquivos PDB (C++) ............................................................................................................................................521
Arquivos DBG.......................................................................................................................................................521
Instalando smbolos para sistema de depurao chamada Crashes .....................................................................522
Depurao de projetos DLL..................................................................................................................................523
Preparao da depurao: Projetos de console ...................................................................................................526
Preparao de Depurao: Tipos de Projeto do Visual C++ ..............................................................................526
Preparao da Depurao: Configuraes de Propriedades Recomendveis .....................................................527
Depurao preparao: Applications formulrios Windows (.NET)....................................................................527
Projetos Win32 depurao preparao: ...............................................................................................................528
Preparao da Depurao: Web Services XML (C++)........................................................................................529
Preparao para depurao: tipos de projeto C#, J# e Visual Basic ...................................................................529
Aplicativos da Web depurao preparao: .........................................................................................................529
Preparao para depurao : Aplicativos ASP.NET da Web ...............................................................................530
Projetos Servio da Web XML depurao preparao:........................................................................................530
Preparao para depurao: Servios da Web ATL Server..................................................................................532
Preparao para depurao: Projetos ATL Server ..............................................................................................532
Instalao de depurao remota ...........................................................................................................................533
Depurao na uma plataforma de 64 bits .............................................................................................................539
Depurao e o processo Hosting...........................................................................................................................540
Explicao detalhada sobre o depurador..............................................................................................................542
Depurando o cdigo gerenciado ...........................................................................................................................542
Diagnstico de mensagens na janela de sada......................................................................................................542
Assero no cdigo gerenciado.............................................................................................................................543
Parar instrues no Visual Basic ..........................................................................................................................546
Depurar o mtodo OnStart como: .........................................................................................................................549
Depurao de cdigo nativo..................................................................................................................................551
Como debug otimizado cdigo: .............................................................................................................................551
DebugBreak e __debugbreak ................................................................................................................................553
Declaraes...........................................................................................................................................................553
_DEBUG ...............................................................................................................................................................554
Visual C# Consolidado 9
Deteco vazamento de memria e isolamento.....................................................................................................555
Para depurar cdigo de montagem embutido .......................................................................................................556
Tcnicas de depurao atl .....................................................................................................................................556
Tcnicas de depurao MFC.................................................................................................................................557
Tcnicas de depurao CRT..................................................................................................................................558
Depurao Native FAQs do cdigo.......................................................................................................................559
COM e depurando ActiveX....................................................................................................................................560
Depurar aplicativos da Web..................................................................................................................................562
Depurao SQL.....................................................................................................................................................563
Depurao referncia Interface de usurio...........................................................................................................564
Aperfeioando a depurao com o atributo de exibio do depurador ................................................................573
Descrio...............................................................................................................................................................575
Cdigo ...................................................................................................................................................................575
Para criar o formulrio do Windows para essa explicao passo a passo...........................................................579
Para anexar ao formulrio do Windows para depurao.....................................................................................581
Banco de dados de depurao T-SQL ...................................................................................................................590
SEGURANA (COMO FAZER EM C#) ............................................................................................................................596
Segurana no Visual Studio...................................................................................................................................596
Noes Bsicas sobre Segurana de Accesso a Cdigo........................................................................................596
Prticas recomendadas de poltica de segurana .................................................................................................597
Viso geral da administrao de poltica de segurana .......................................................................................597
Administrao de diretiva de segurana geral......................................................................................................599
Determinando quando para modificar a diretiva de segurana............................................................................599
Ferramentas de administrao..............................................................................................................................600
Aumentar permisses.............................................................................................................................................601
Administrao com atributos Grupo de cdigos ...................................................................................................602
Dicas de administrao.........................................................................................................................................603
Administrao de diretiva corporativa..................................................................................................................604
Administrao de diretiva da mquina..................................................................................................................604
Administrao de diretiva de usurio....................................................................................................................604
EXPLICAES PASSO-A-PASSO DO .NET FRAMEWORK SDK ......................................................................................719
Como Registrar Assemblies de Interoperabilidade Primrios..............................................................................784
Como Empacotar Vrias Verses de Bibliotecas de Tipos ...................................................................................785
APLICATIVOS DO WINDOWS (COMO FAZER EM C#) ....................................................................................................786
Componente Timer (Windows Forms)...................................................................................................................797
Viso geral do componente de timer (Windows Forms)........................................................................................797
Limitaes do componente Timer de formulrios do Windows na propriedade Interval......................................798
Controle toolBar Windows (formulrios)..............................................................................................................800
Viso geral sobre de controle toolBar (formulrios do Windows)........................................................................800
Como adicionar botes a um controle ToolBar usando o criador:.......................................................................801
PGINAS DA WEB E SERVIOS DA WEB (COMO FAZER EM C#)................................................................806
O que h de novo no desenvolvimento para Web no Visual Studio.......................................................................806
Servidor de Desenvolvimento do ASP.NET...........................................................................................................807
Publicao de Web Sites .......................................................................................................................................808
Extensibilidade de Controle ..................................................................................................................................811
Ligao de Dados com Controles de Fonte de Dados ..........................................................................................812
Controles de dados avanados ..............................................................................................................................812
Vinculao bidirecional de dados .........................................................................................................................813
Armazenamento de seqncia de caracteres de conexo......................................................................................813
Acesso a dados em duas e trs camadas ...............................................................................................................813
Compatibilidade com Verses Anteriores para Acesso a Dados ..........................................................................814
INTRODUO A PGINAS DA WEB DO ASP.NET.........................................................................................................815
Postagem cruzada de pginas ...............................................................................................................................816
Preservando o estado da pgina ...........................................................................................................................816
Controles de servidor ............................................................................................................................................817
Compatibilidade do navegador .............................................................................................................................818
Documentos e dados XML.....................................................................................................................................818
O que h de novo no System.Xml ..........................................................................................................................818
Migrando de verso 1.1 das classes XML.............................................................................................................819
Arquitetura Overview of XML no .NET Framework .............................................................................................822
Segurana e seus aplicativos System.Xml .............................................................................................................822
Consideraes sobre segurana System.Xml.........................................................................................................823
Visual C# Consolidado 10
Processamento DTD..............................................................................................................................................824
Processamento de esquema...................................................................................................................................824
Recursos externos..................................................................................................................................................824
Compartilhar objetos XmlReaderSettings .............................................................................................................825
Suporte componentes.............................................................................................................................................825
Processamento de dados .......................................................................................................................................825
Processamento DTD..............................................................................................................................................825
Tratamento de entidade.........................................................................................................................................825
Recursos externos..................................................................................................................................................825
Recursos externos..................................................................................................................................................826
Blocos de script .....................................................................................................................................................826
Objetos de extenso...............................................................................................................................................826
System.Xml codificao diretrizes.........................................................................................................................827
Acesso externo.......................................................................................................................................................827
Negao de Servio ...............................................................................................................................................827
Processamento.......................................................................................................................................................828
Dados XML processo In-Memory..........................................................................................................................829
Processo dados XML usando o modelo DOM.......................................................................................................829
Processo dados XML usando o modelo de dados XPath.......................................................................................830
Lendo XML com o XmlReader...............................................................................................................................831
Escrevendo XML com o XmlWriter .......................................................................................................................832
Novos recursos na classe XmlWriter.....................................................................................................................832
Verificao de caracteres......................................................................................................................................833
Verificando a conformidade ..................................................................................................................................833
Usando o XmlWriter..............................................................................................................................................833
Transformaes em XSLT......................................................................................................................................834
Usando a classe XslCompiledTransform...............................................................................................................834
Migrando da classe XslTransform ........................................................................................................................835
Consideraes sobre segurana XSLT..................................................................................................................837
Transformaes em XSLT com a classe XslTransform..........................................................................................839
Modelo de objeto de esquema (SOM) do XML......................................................................................................841
Viso geral do modelo de objeto do esquema XML ..............................................................................................841
Leitura e escrita esquemas XML ...........................................................................................................................843
Criando esquemas XML ........................................................................................................................................844
Atravessando esquemas XML................................................................................................................................847
Editar Esquemas XML...........................................................................................................................................849
Incluindo ou importar esquemas XML ..................................................................................................................853
Integrao XML com dados relacional e ADO.NET.............................................................................................855
Resolver externos recursos XML nomeados por um URI......................................................................................857
Resolvendo recursos usando o XmlResolver .........................................................................................................857
Fornecer credenciais de autenticao para XmlResolver quando leitura de um arquivo ....................................858
Para criar um objeto XmlReader que usa um XmlSecureResolver .......................................................................860
Codificao de caracteres de nomes XML e converso de tipos de dados XML...................................................860
Espaos para nomes em um documento XML .......................................................................................................860
Suporte tipo nas classes System.Xml .....................................................................................................................861
Mapear tipos de dados XML para tipos CLR........................................................................................................861
Observaes de implementao de suporte tipo XML...........................................................................................863
Converso de tipos de dados XML........................................................................................................................864
SERVIOS DA WEB XML NO CDIGO GERENCIADO....................................................................................................866
Introduo programao servios XML da Web no cdigo gerenciado............................................................866
Programao na Web com XML Web Services .....................................................................................................867
Criando XML Web Services em cdigo gerenciado ..............................................................................................867
Acessando XML Web Services no cdigo gerenciado...........................................................................................869
Criado usando clientes do servio XML da Web ASP.NET e Servios XML da Web ...........................................870
Acessar a Pgina de Ajuda de Servio..................................................................................................................878
Acessar a descrio de servio..............................................................................................................................878
Fornecendo um nome de mensagem para um mtodo de XML Web Service ........................................................883
Criando uma nova transao com um mtodo de XML Web Service....................................................................884
Protegendo Servios da Web XML Criados Usando ASP.NET.............................................................................895
ACESSO A DADOS (COMO FAZER EM C#)....................................................................................................................900
Criando os controles para exibir os pedidos para cada cliente (registros filho) ..................................................902
Viso geral sobre como conectar-se a dados no Visual Studio.............................................................................903
Viso Geral do Adaptador de Tabela....................................................................................................................921
Visual C# Consolidado 11
Viso Geral do Preenchimento de DataSets e Consultas de Dados......................................................................927
Viso Geral da Exibio dados .............................................................................................................................936
Ligao de Objeto no Visual Studio......................................................................................................................962
Viso Geral da Edio de dados em DataSets ......................................................................................................966
Viso geral sobre validao de dados...................................................................................................................967
Viso Geral do Salvar dados.................................................................................................................................972
Introduo ao CONCURRENCY dados em ADO.NET .........................................................................................982
CONCURRENCY pessimista.................................................................................................................................982
CONCURRENCY otimista.....................................................................................................................................983
ltima no WINS.....................................................................................................................................................983
A abordagem nmero verso.................................................................................................................................984
Para adicionar o tratamento de erro para o erro de concorrncia ......................................................................989
Elementos de Dados de Interface de Usurio .......................................................................................................994
Adaptadores de Dados do ADO.NET....................................................................................................................997
Projetos SQL Server ..............................................................................................................................................998
CRIANDO CLASSES (COMO FAZER EM C#)................................................................................................................1004
COMO: Criar Tipos em Diagramas de Classe ...................................................................................................1004
Criando e Configurando Membros de Tipos .......................................................................................................1005
Criar membros tipo .............................................................................................................................................1005
COMO: Modificar membros de tipo....................................................................................................................1006
COMO: Adicionar um parmetro a um mtodo..................................................................................................1006
COMO: Abrir a janela Class Details ..................................................................................................................1007
Atalhos de teclado para a janela Detalhes de classe ..........................................................................................1007
Usando o teclado.................................................................................................................................................1008
Observaes teis sobre a janela Class Details..................................................................................................1009
Exibio de informaes somente leitura............................................................................................................1010
Elementos da janela Class Details ......................................................................................................................1011
Linhas membro....................................................................................................................................................1011
Linhas de parmetro............................................................................................................................................1012
COMO: Herdar de um Tipo Genrico.................................................................................................................1012
COMO: Definir herana entre tipos....................................................................................................................1013
COMO: Definir associaes entre tipos..............................................................................................................1013
COMO: Excluir formas de tipos e cdigo associado de diagramas classe.........................................................1014
COMO: Aplicar atributos personalizados a tipos ou membros de tipo...............................................................1015
COMO: Exibir Herana entre Tipos ...................................................................................................................1015
COMO: Exibir tipos derivados............................................................................................................................1016
COMO: Remover formas de tipos de diagramas de classe .................................................................................1016
COMO: Exibir compartimentos em formas de tipo.............................................................................................1017
COMO: Exibir detalhes do tipo: .........................................................................................................................1018
COMO: Alternar entre notao de membro e notao de associao................................................................1019
COMO: Exibir membros de tipo .........................................................................................................................1019
COMO: Adicionar diagramas de classes a projetos ...........................................................................................1020
COMO: Exibir tipos existentes............................................................................................................................1021
Ententendo um cdigo que voc no escreveu ....................................................................................................1022
COMO: Agrupar membros de tipo......................................................................................................................1022
COMO: Adicionar comentrios a diagramas de classe......................................................................................1022
Personalizando diagramas de classe...................................................................................................................1023
COMO: Copiar elementos de diagrama de classe para um documento do Microsoft Office .............................1024
COMO: Imprimir diagramas de classe ...............................................................................................................1024
COMO: Ignorar membros de tipo.......................................................................................................................1025
COMO: Renomear tipos e membros de tipo........................................................................................................1025
COMO: Mover um membro de tipo de um tipo para outro.................................................................................1026
COMO: Implementar uma interface....................................................................................................................1026
COMO: Implementar uma classe abstrata..........................................................................................................1027
COMO: Extrair para interface (C# somente)......................................................................................................1027
COMO: Reordenar parmetros (C# somente) ....................................................................................................1027
COMO: Criar um membro ..................................................................................................................................1027
COMO: Implementar um designer para um controle..........................................................................................1029
COMO: Criar e configurar componentes no modo Design.................................................................................1030
Como: Acessar suporte em tempo de design no Windows Forms .......................................................................1036
COMO: Implementar um provedor Extender HelpLabel ....................................................................................1037
COMO: Acessar servios em tempo de criao ..................................................................................................1041
COMO: Serializar colees de tipos padro com o DesignerSerializationVisibilityAttribute............................1048
Visual C# Consolidado 12
Como: Executar inicializao personalizada para controles no modo de design...............................................1049
COMO: Implementar um conversor de tipo........................................................................................................1050
Para implementar um conversor de tipo simples que pode converter uma seqncia para um ponto................1050
Para implementar um conversor de tipo simples que fornece uma lista drop-down de valores padro em um
navegador Propriedade.......................................................................................................................................1051
Para implementar um conversor tipo que produz Propriedade baseado no construtor-cdigo de inicializao1053
COMO: Implementar um editor UI de tipo .........................................................................................................1054
Como: Estender a aparncia e comportamento de controles no modo de design...............................................1055
COMO: Criar um controle de formulrios do Windows que tira vantagem de recursos em tempo de criao..1064
COMO: Anexar marcas inteligentes para um componente de formulrios do Windows....................................1071
COMO: Ajustar atributos, eventos e propriedades de um componente no modo Design ...................................1073
PROGRAMAO DO OFFICE (COMO FAZER EM C#)...................................................................................................1080
Como: Atualizar solues das Ferramentas do Visual Studio para o Office ......................................................1080
O Excel Usando Explicaes Passo-a-passo.......................................................................................................1081
Coleta de dados usando um formulrio do Windows Walkthrough: ...................................................................1081
Para criar um novo projeto.................................................................................................................................1081
Para adicionar um intervalo nomeado para Sheet1............................................................................................1081
Para adicionar um formulrio do Windows........................................................................................................1082
Para exibir o formulrio e coletar informaes..................................................................................................1082
Para enviar informaes para a planilha ...........................................................................................................1083
Para testar sua pasta de trabalho .......................................................................................................................1083
Alterando planilha formatao usando controles CheckBox Walkthrough: .......................................................1083
Para criar um novo projeto.................................................................................................................................1084
Para adicionar trs caixas de seleo.................................................................................................................1084
Para adicionar texto a um controle NamedRange ..............................................................................................1085
Exibindo texto em uma caixa de texto em uma planilha usando um boto Walkthrough: ..................................1086
Para testar sua pasta de trabalho .......................................................................................................................1088
Programao contra eventos de um controle NamedRange Walkthrough: ........................................................1088
Walkthrough: vinculao clulas para vrias colunas em uma tabela...............................................................1099
Criando uma relao mestre / detalhes usando um DataSet em cache Walkthrough:........................................1103
Para criar um novo projeto.................................................................................................................................1104
Armazenar em cache DataSet..............................................................................................................................1105
Para percorrer os registros.................................................................................................................................1106
Para testar o cache de dados ..............................................................................................................................1106
Para adicionar os dados .....................................................................................................................................1107
Para adicionar um grfico ..................................................................................................................................1108
Para criar um novo projeto.................................................................................................................................1108
Para alterar o nome do controle grfico.............................................................................................................1109
Para adicionar um controle de usurio...............................................................................................................1109
Para adicionar controles Windows Form ao controle de usurio ......................................................................1109
Para criar um evento e propriedade em um controle de usurio........................................................................1110
Para manipular o evento CheckedChanged dos botes de opo.......................................................................1110
Para adicionar o controle do usurio sua planilha ............................................................................................1111
Para alterar o tipo de grfico que exibido na planilha ....................................................................................1111
Para testar sua pasta de trabalho .......................................................................................................................1112
Vinculao de Dados para controles em um painel Aes do Excel Walkthrough:............................................1112
Para criar um novo projeto.................................................................................................................................1113
Para adicionar uma nova fonte de dados para o projeto....................................................................................1113
Para adicionar um NamedRange e um controle ListObject ................................................................................1114
Para adicionar um controle painel Aes ...........................................................................................................1114
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes ...................................1114
Para definir propriedades de vinculao de dados do controle..........................................................................1115
Para mostrar o painel Aes...............................................................................................................................1115
Para testar seu documento ..................................................................................................................................1115
Implantando um Word ou Solution do Excel usando um manifesto Deployment Walkthrough: .........................1116
Para criar um novo projeto.................................................................................................................................1117
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1117
Para publicar a soluo ......................................................................................................................................1117
Para atualizar o manifesto do aplicativo incorporado........................................................................................1118
Para atualizar a manifesto de implantao.........................................................................................................1119
Para atualizar o manifesto do aplicativo externo ...............................................................................................1119
Para copiar os arquivos de soluo para o servidor ..........................................................................................1120
Para conceder confiana total para a pasta de rede...........................................................................................1120
Visual C# Consolidado 13
Para testar a implantao...................................................................................................................................1120
Implantando um Word ou Solution do Excel usando um arquivo do Windows Installer Walkthrough: .............1121
Para criar um novo projeto.................................................................................................................................1122
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1122
Para criar um projeto de instalao para a soluo...........................................................................................1122
Para adicionar o documento e conjunto ao projeto de instalao......................................................................1123
Para criar um projeto ao personalizada..........................................................................................................1123
Para criar uma ao personalizada que edita o manifesto do aplicativo...........................................................1124
Para adicionar a sada primria do projeto ao personalizada ao projeto de instalao................................1125
Para testar a instalao ......................................................................................................................................1125
Passo-a-passo: Concedendo e removendo permisses para uma soluo do Office ..........................................1126
Para criar um novo projeto.................................................................................................................................1126
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1126
Para remover um grupo de cdigos ....................................................................................................................1127
Para criar um nome forte ....................................................................................................................................1128
Para conceder confiana com base em nome forte .............................................................................................1128
Para testar sua pasta de trabalho .......................................................................................................................1128
O Word Usando Explicaes Passo-a-passo.......................................................................................................1129
Walkthrough: Changing Document formatao usando controles CheckBox ....................................................1129
Para criar um novo projeto.................................................................................................................................1129
Para adicionar trs caixas de seleo.................................................................................................................1130
Para adicionar texto e um controle indicador.....................................................................................................1130
Para alterar a formatao quando uma caixa de seleo marcada.................................................................1131
Para testar seu documento ..................................................................................................................................1132
Exibindo texto em uma caixa de texto em um documento usando um boto Walkthrough: ................................1132
Para criar um novo projeto.................................................................................................................................1133
Para adicionar um boto e uma caixa de texto...................................................................................................1133
Para escrever para a caixa de texto quando o boto clicado...........................................................................1133
Para testar seu documento ..................................................................................................................................1134
Walkthrough: Criando menus de atalho para indicadores .................................................................................1134
Para criar um novo projeto.................................................................................................................................1135
Para adicionar texto ao seu documento ..............................................................................................................1135
Para adicionar um controle indicador ao seu documento ..................................................................................1135
Para criar o menu de atalho................................................................................................................................1135
Para formatar o texto contido no indicador........................................................................................................1136
Para testar seu documento ..................................................................................................................................1137
Walkthrough: atualizando um grfico em um documento usando botes de opo............................................1137
Para criar um novo projeto.................................................................................................................................1138
Para adicionar um grfico ..................................................................................................................................1138
Para adicionar um controle de usurio...............................................................................................................1139
Para adicionar controles Windows Form ao controle de usurio ......................................................................1139
Para adicionar uma referncia 11.0 biblioteca objeto do Graph Microsoft ....................................................1140
Para criar um evento e propriedade em um controle de usurio........................................................................1140
Para manipular o evento CheckedChange dos botes de opo.........................................................................1140
Para adicionar o controle de usurio do documento..........................................................................................1141
Para alterar o tipo de grfico que exibido no documento................................................................................1141
Para testar seu documento ..................................................................................................................................1142
Vinculao de Dados para controles em um painel Aes do Word Walkthrough:............................................1142
Para criar um novo projeto.................................................................................................................................1143
Para adicionar um controle painel Aes ...........................................................................................................1143
Para adicionar uma nova fonte de dados para o projeto....................................................................................1143
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes ...................................1144
Para carregar o controle com dados...................................................................................................................1145
Para definir propriedades de vinculao de dados do controle..........................................................................1145
Para formatar os ttulos de tabela.......................................................................................................................1145
Para criar a tabela..............................................................................................................................................1146
Para inserir texto em uma tabela do Word..........................................................................................................1146
Para mostrar o painel Aes...............................................................................................................................1147
Para testar seu documento ..................................................................................................................................1147
Walkthrough: criar uma marca inteligente que converte Temperatures de Fahrenheit para Celsius ................1148
Para criar um novo projeto.................................................................................................................................1148
Para configurar seu projeto ................................................................................................................................1148
Para criar a marca inteligente ............................................................................................................................1149
Visual C# Consolidado 14
Para criar o manipulador de eventos..................................................................................................................1149
Para testar sua pasta de trabalho .......................................................................................................................1150
Implantando um Word ou Solution do Excel usando um manifesto Deployment Walkthrough: .........................1150
Para criar um novo projeto.................................................................................................................................1151
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1151
Para publicar a soluo ......................................................................................................................................1152
Para atualizar o manifesto do aplicativo incorporado........................................................................................1152
Para atualizar a manifesto de implantao.........................................................................................................1153
Para atualizar o manifesto do aplicativo externo ...............................................................................................1153
Para copiar os arquivos de soluo para o servidor ..........................................................................................1154
Para conceder confiana total para a pasta de rede...........................................................................................1154
Para testar a implantao...................................................................................................................................1154
Implantando um Word ou Solution do Excel usando um arquivo do Windows Installer Walkthrough: .............1155
Para criar um novo projeto.................................................................................................................................1156
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1156
Para criar um projeto de instalao para a soluo...........................................................................................1156
Para adicionar o documento e conjunto ao projeto de instalao......................................................................1157
Para criar um projeto ao personalizada..........................................................................................................1157
Para criar uma ao personalizada que edita o manifesto do aplicativo...........................................................1158
Para adicionar a sada primria do projeto ao personalizada ao projeto de instalao................................1159
Para testar a instalao ......................................................................................................................................1159
Passo-a-passo: Concedendo e removendo permisses para uma soluo do Office ..........................................1160
Para criar um novo projeto.................................................................................................................................1160
Para adicionar uma caixa de mensagem a um evento de inicializao ..............................................................1160
Para remover um grupo de cdigos ....................................................................................................................1161
Para criar um nome forte ....................................................................................................................................1162
Para conceder confiana com base em nome forte .............................................................................................1162
Para testar sua pasta de trabalho .......................................................................................................................1162
COMO: Adicionar Controles a Documentos do Office.......................................................................................1162
Para arrastar um Windows Forms controle para o documento..........................................................................1163
Para desenhar um Windows Forms controle sobre o documento .......................................................................1163
Para adicionar um controle Windows Forms para o documento clicando uma nica vez sobre o controle ......1164
Para adicionar um controle Windows Forms para o documento clicando duas vezes no controle....................1164
Para adicionar um controle Windows Forms para o documento, pressionando a tecla ENTER........................1164
Para adicionar um Windows Forms controlar programaticamente ...................................................................1165
COMO: Executar Clculos do Excel por Programao.....................................................................................1165
Para executar clculos em um controle NamedRange........................................................................................1165
Executar clculos para o aplicativo inteiro ........................................................................................................1165
Para executar clculos em todas as pastas de trabalho abertas.........................................................................1165
Como: Criar menus do Office programaticamente .............................................................................................1166
COMO: Criar Barras de Ferramentas do Office por Programao...................................................................1167
DISPOSITIVOS INTELIGENTES....................................................................................................................................1168
O que h de novo em projetos Smart Device.......................................................................................................1168
O que h de novo no desenvolvimento visual aplicativos dispositivos C++.......................................................1168
Destino vrios sistemas operacionais .................................................................................................................1168
Sistema do projeto...............................................................................................................................................1168
O IntelliSense ......................................................................................................................................................1168
Modo misto Solutions ..........................................................................................................................................1168
Instalar do aplicativo ..........................................................................................................................................1168
Aplicativos personalizados e assistentes de classe..............................................................................................1168
Editor de recursos ...............................................................................................................................................1169
ATL......................................................................................................................................................................1169
MFC ....................................................................................................................................................................1170
O que h de novo no Managed projetos de dispositivo.......................................................................................1170
Como Iniciar o Emulador de Dispositivo no Visual Studio.................................................................................1171
Viso geral do acesso de dados (projetos do dispositivo gerenciado) ................................................................1172
Viso geral Solutions do dispositivo de embalagem ...........................................................................................1173
Alternar plataformas em projetos de dispositivo.................................................................................................1174
Ferramentas Remotas para Projetos de Dispositivos .........................................................................................1174
Viso geral sobre segurana (dispositivos).........................................................................................................1175
Seleo mtodo de conexo.................................................................................................................................1176
Atualizando Projetos Criados com Ferramentas Anterior..................................................................................1178
Selecionando uma Linguagem de Desenvolvimento............................................................................................1179
Visual C# Consolidado 15
Programao para Dispositivos usando o .NET Compact Framework ..............................................................1182
Referncia do .NET Compact Framework para Projetos de Dispositivos ..........................................................1183
Gerenciando Trechos de Cdigo em Projetos Dispositivos ................................................................................1186
Diferenas entre depuradores de dispositivos e de desktop ................................................................................1194
IMPLANTAO (COMO FAZER EM C#).......................................................................................................................1235
Visual C# Consolidado 16
VISUAL C#
Microsoft Visual C# 2005, pronunciado C sharp, uma linguagem de programao projetada para
criar uma ampla variedade de aplicativos executados no .NET Framework. C# simples,
poderoso, com segurana de tipos, e orientada a objetos. Com suas muitas inovaes, C# permite
o desenvolvimento rpido de aplicativos mantendo a expressividade e elegncia das linguagens
do estilo C.
Visual Studio oferece suporte ao Visual C# com um editor de cdigos completo, modelos de
projeto, designers, assistentes de cdigo, depurador poderoso e de fcil uso, e outras
ferramentas. A biblioteca de classes do .NET Framework fornece acesso a uma grande variedade
de servios do sistema operacional e outras classes teis, e bem estruturadas que aceleram o
ciclo de desenvolvimento significativamente.
Nesta seo
Guia de Introduo ao Visual C#
Apresenta os recursos do C# 2.0 para programadores novos para a linguagem ou novos
para o Visual Studio, e fornece um roadmap para encontrar ajuda no Visual Studio. Isso
tambm est localizado nas pginas "Como Fazer".
Usando o Visual C# IDE
Apresenta o ambiente de desenvolvimento do Visual C#.
Escrevendo aplicativos com Visual C#
Fornece uma orientao de alto nvel abrangendo tarefas comuns de programao usando
C# e o .NET Framework, com links para a documentao mais detalhada.
Migrando para o Visual C#
Compara a linguagem C# com Java e C++ e descreve como usar o Java Language
Conversion Assistant para converter aplicativos Java e Visual J++ para Visual C#.
Guia de programao C #
Fornece informaes e exemplos prticos sobre como usar construes de linguagem C#.
Referncia C#
Fornece informaes de referncia detalhadas em conceitos de programao C#,
palavras-chave, tipos, operadores, atributos, diretivas de pr-processador, opes de
compilador, e erro de compilador e avisos.
Especificao da linguagem C#
Links para a verso mais recente das especificaes C# no formato Microsoft Word.
Exemplos de Visual C#
Exemplo de cdigo fonte que demonstram como programar usando Visual C#.
Visual C# Consolidado 17
GUIA DE INTRODUO AO
VISUAL C#
Os tpicos a seguir ajudam a iniciar o desenvolvimento de aplicativos usando o Microsoft Visual
C# 2005. Esses tpicos tambm lhe introduziro a muitos novos recursos no Microsoft Visual
Studio 2005 como verso 2.0 da linguagem C#.
Nesta seo
Guia da documentao do Visual C#
Fornece uma orientao de alto nvel sobre o contedo da documentao Visual C#.
Introduo linguagem C# e ao Framework .NET
Fornece uma viso geral sobre a linguagem C# e a plataforma .NET.
O Que H de Novo no Visual C-# 2005
O que h de novo no Microsoft Visual C# 2005.
O Que H de Novo na Linguagem e Compilador C# 2.0
O que h de novo na verso 2.0 do C#.
Atualizando Aplicativos Visual C# para Visual Studio 2005
Atualizando seus projetos existentes para o Microsoft Visual Studio 2005.
Criando Seu Primeiro Aplicativo C#
Escrevendo, compilando e executando um simples aplicativo C#.
Usando Starter Kits C#
Usando os Starter Kits C#.
Recursos de ajuda adicionais (Visual C#)
Links para outros recursos de ajuda.
Como Fazer em C#
Links para tpicos que mostram como executar uma variedade de tarefas especficas.
Guia da Documentao do Visual C#
A documentao do Microsoft Visual C# 2005 contm informaes que so especficas para a
linguagem C#, como palavras-chave, opes de compilador, mensagens de erro e conceitos de
programao. Esta documentao tambm oferece uma viso geral de como usar o ambiente de
desenvolvimento integrado (IDE). Alm disso, existem muitos links para obter ajuda detalhada
sobre classes .NET Framework, desenvolvimento da Web do ASP.NET, depurao, programao
de banco de dados SQL e muito mais.
O diagrama a seguir fornece uma exibio dos conceitos do contedo da documentao do Visual
C# e o relacionamento deste contedo com outras sees relevantes da documentao do Visual
Studio e a MSDN on-line.
Visual C# Consolidado 18
Introduo linguagem C# e ao .NET Framework
C# uma linguagem elegante orientada a objetos e fortemente tipada que permite aos
desenvolvedores criar uma ampla variedade de aplicativos seguros e eficientes que so
executados sob o .NET Framework. Voc pode usar C# para criar aplicativos clientes tradicionais
do Windows , XML Web services, componentes distribudos, aplicativos cliente-servidor,
aplicativos de banco de dados, e muito, muito mais. Microsoft Visual C# 2005 fornece um editor de
cdigo avanado, designers de interface de usurio convenientes, depurador integrado, e muitas
outras ferramentas para facilitar o rpido desenvolvimento de aplicativos com base na verso 2.0
da linguagem C# e do .NET Framework.
Observao
A documentao Visual C# presume que voc tenha uma compreenso dos conceitos bsicos
existentes de programao. Se voc for um completo principiante, convm explorar Visual C#
Express Edition, que est disponvel na Web. Voc tambm pode aproveitar qualquer um dos
diversos livros excelentes e recursos da Web em C# para aprender tcnicas de prtica de
programao.
Linguagem C#
A sintaxe C# altamente expressiva, mas com menos de 90 palavras-chave, tambm simples e
fcil para aprender. A sintaxe do C# utilizando chaves como marcador de blocos ser
instantaneamente reconhecvel para qualquer pessoa familiarizada com C, C++ ou Java. Os
desenvolvedores que conhecem qualquer uma dessas linguagens so normalmente capazes de
comear a trabalhar produtivamente em C# dentro de muito pouco tempo. A sintaxe C# simplifica
muitas das complexidades de C++ enquanto fornece recursos poderosos como tipos de valor
anulvel, enumeraes, delegaes, mtodos annimos e acesso direto memria, que no
foram localizados em Java. C# tambm oferece suporte a mtodos e tipos genricos, que
fornecem aumento de segurana e desempenho, e iteradores, que permitem implementadores
das classes de coleo definirem comportamentos personalizados da iterao que so simples
para usar pelo cdigo do cliente.
Visual C# Consolidado 19
Como uma linguagem orientada a objetos, C# suporta os conceitos de encapsulamento, herana
e polimorfismo. Todas as variveis e mtodos, incluindo o mtodo
Main
, ponto de entrada do
aplicativo, so encapsulados em definies da classe. Uma classe pode herdar diretamente de
uma classe pai, mas ela pode implementar qualquer nmero de interfaces. Mtodos que
substituem mtodos virtuais em uma classe pai exigem a palavra-chave
override
como uma
forma para evitar redefinio acidental. No C#, uma estrutura como uma classe simplificada; ele
um tipo alocado na pilha que pode implementar interfaces mas no tem suporte a herana.
Alm desses princpios orientados a objetos, C# facilita o desenvolvimento de componentes de
software atravs de vrios construtores inovadores da linguagem, incluindo:
Linguagem e Compilador
Editor de cdigos
Ambiente de desenvolvimento
Depurao
Linguagem e Compilador
A linguagem C# agora suporta tipos genrico, iteradores e tipos parciais. A verso mais recente
do compilador C# tambm inclui novos recursos e opes. Para mais informaes, consulte O que
h de novo na Linguagem e Compilador C# 2.0.
Editor de cdigos
O Editor de cdigos contm os seguintes recursos novos para Visual C# 2005.
Trechos de cdigo
Visual C# Consolidado 21
Trechos de cdigos aumentam a velocidade de entrada de cdigos de construo comuns
fornecendo um modelo que pode ser preenchido. Trechos so armazenados como arquivos XML
que podem ser facilmente editados e personalizados.
Extrair o mtodo
Encapsular o campo
Extrair a interface
Renomear
Remover parmetros
Reordenar parmetros
Ambiente de Desenvolvimento
O ambiente de desenvolvimento inclui os seguintes aperfeioamentos para Visual C# 2005.
O IntelliSense
O IntelliSense foi aprimorado com os novos recursos a seguir:
A lista de concluso de List Members aparece automaticamente quando voc volta com o
cursor para um operador de escopo que precede um objeto, ou quando voc desfaz a ao de
concluso.
Quando voc escreve cdigo de tratamento de erros, o Membros lista o ajuda a descobrir
qual exceo atrair filtrando membros irrelevantes da lista de concluso em uma clusula
catch.
Quando voc precisa inserir cdigo padronizado, o Automatic Code Generation agora
permite que voc determine que o IntelliSense insira o cdigo para voc.
O
Toolbox
(Caixa de Ferramentas) e o
Designer
, para o desenvolvimento rpido de
interfaces de usurio usando o mouse.
Solution Explorer
(Gerenciador de Solues) para exibir e gerenciar arquivos de
projeto e configuraes.
Designer de Projeto
, para configurar opes do compilador, caminhos de
implantao, recursos, e mais.
Modo de Exibio de Classe
, para navegar atravs de cdigo fonte de acordo com
tipos, no arquivos.
Janela Properties
(Janela de Propriedades), para configurar propriedades e eventos
nos controles na sua interface de usurio.
Quando voc adiciona um recurso vinculado, o arquivo resx. que armazena suas
informaes de recurso de projeto inclui apenas um caminho relativo para o arquivo de recurso
no disco. Se voc adicionar imagens, vdeos ou outros arquivos complexos como recursos
vinculados, voc pode edit-los usando um editor padro no qual voc associa a esse tipo de
arquivo no Resource Designer.
Pesquisar F1
Pesquisa
ndice
ndice Analtico
Como Eu
Ajuda Dinmica
Ajuda Online versus Local
Na pgina de propriedades
Help Options
no menu
Options
, voc pode especificar as
seguintes opes para o comportamento da pesquisa, inclusive a pesquisa F1:
Extrair o mtodo
Renomear
Encapsular o campo
Extrair a interface
Remover parmetros
Reordenar parmetros
Multi-Project Refactoring
O Visual Studio oferece suporte multi-Project refatorao. Todas as operaes que Corrigir
referncias em arquivos refactoring corrigir essas referncias em todos os projetos de mesmo
idioma. Isso funciona para quaisquer referncias projeto projeto-para-. Por exemplo, se voc tiver
um aplicativo de console que referencia uma biblioteca de classes, quando voc renomeia um tipo
Visual C# Consolidado 55
de biblioteca (usando a
Rename
operao refactoring), classe as referncias para o tipo de
biblioteca de classe no aplicativo do console tambm sero atualizadas.
Caixa de dilogo Alteraes de visualizao
Muitas operaes refactoring fornecem uma oportunidade para voc a revisar todas as alteraes
de referncia que uma operao refactoring deve executar no seu cdigo, antes de confirmar a
essas alteraes. Uma
preview reference changes
opo para estas operaes
refactoring, ser exibido na caixa de dilogo refactoring. Aps selecionar essa opo e aceitar a
operao refactoring, o Caixa de dilogo Alteraes de visualizao ser exibido. Observe que a
Preview Changes
caixa de dilogo tem duas exibies. A exibio inferior exibir seu cdigo
com todas as atualizaes de referncia devido operao refactoring. Na caixa
Preview
Changes
de dilogo pressionando
Cancel
ir parar a operao refactoring, e nenhuma
alterao ser feita para o seu cdigo.
Tolerant erros Refactoring
Refatorao erro falhas. Em outras palavras, voc pode executar um refatorao em um projeto
que no possvel criar. O processo refactoring no Entretanto, nesses casos pode atualizar
referncias ambguas corretamente.
Trechos de cdigos (C#)
O Visual Studio fornece um novo recurso chamado trechos
.
de cdigo Voc pode usar trechos de
cdigo para digitar um alias curta, e ento expandi-lo em uma construo de programao
comuns. Por exemplo, o
for
trecho de cdigo cria um loop vazia
for
. Alguns trechos de cdigo
so surround-com trechos de cdigo, que permitem que voc se selecionar linhas de cdigo,
escolha um trecho de cdigo que ir incorporar as linhas de cdigo selecionadas. Por exemplo,
selecionar linhas de cdigo depois ativar o
for
trecho de cdigo cria um
for
loop com essas
linhas de cdigo dentro do bloco loop. Trechos de cdigo podem tornar programa escrever cdigo
mais rpido, mais fcil, e mais confivel.
Usando trechos de cdigo
Trechos de Cdigo normalmente so usados no Editor do cdigo pelo digitando um nome curto
para o alias um atalho trecho de cdigo e pressionar TAB. O menu IntelliSense tambm
oferece um
Insert Code Snippet
Comando de menu, fornecendo uma lista de trechos de
cdigo disponvel para ser inserida no Editor de Cdigo. Voc pode ativar a lista trecho de cdigo,
digitando Ctrl+K, depois X. Para obter mais informaes, consulte COMO: Usar trechos de cdigo
(C#) e COMO: Usar trechos de cdigo circunscritos.
Aps um trecho de cdigo tenha sido escolhido, o texto do trecho de cdigo inserido
automaticamente na posio do cursor. Nesse ponto, os campos editveis no trecho de cdigo
so realados em amarelo, e o primeiro campo editvel selecionado automaticamente. O campo
selecionado no momento Boxed em vermelho. No
for
trecho de cdigo, por exemplo, os
campos editveis esto a varivel inicializador (
i
por padro (
length
). e a expresso comprimento)
por padro
Quando um campo selecionado, os usurios podem digitar um novo valor para o campo.
Pressionar TAB percorre os campos do trecho de cdigo editveis; pressionando SHIFT + TAB
ciclos atravs de em ordem inversa. Clicar em um campo coloca o cursor no campo, e duas vezes
em um campo selecion-lo. Quando um campo estiver realado, uma dica de ferramenta pode ser
exibida, oferecendo uma descrio do campo.
Somente a primeira instncia de um determinado campo editvel; quando esse campo estiver
realado, as outras instncias do campo so descritas. Quando voc alterar o valor de um campo
editvel, esse campo alterado em todos os lugares ele usado no trecho de cdigo.
Pressionar ENTER ou ESC ser cancelar a edio de campo e retorne o editor de cdigo para
Normal.
Visual C# Consolidado 56
As cores padro para campos trecho, cdigos editveis podem ser alteradas, modificando a
Code Snippet Field
configurao no painel
Fonts and Colors
da caixa
Options
de
dilogo. Para obter mais informaes, consulte Como alterar face da fonte, tamanho, e cores
usadas no Editor:.
Criar trechos de cdigo
Voc pode criar e utilizar trechos de cdigo personalizado, juntamente com os trechos de cdigo
que esto includos com o Visual Studio por padro. Para obter mais informaes sobre como
criar trechos de cdigo personalizado, consulte Criar trechos de cdigo.
Observao
Para trechos de cdigo C#, os caracteres que so vlidos para especificar o < atalho > campo
so: caracteres alfanumricos, sinal numrico (#), o caractere til (~), o caractere de sublinhado (_),
e o hfen trao caractere (-).
Para obter mais informaes sobre trechos de cdigo que esto includos na Visual C# por
padro, consulte Trechos de cdigo padro.
Cdigo Colorization
Editor de Cdigo analisa tokens e cdigo constri para que sejam facilmente reconhecvel e
distinguishable de outros contedos de cdigo no Editor de Cdigo. Aps o Editor de Cdigo
analisa seu cdigo, ele colorizes construes de cdigo adequadamente.
Smbolos
Editor de Cdigo colorizes o seguinte token tipos.
Comment
Cdigo excludo
Identificador
Keyword
Nmero
Operador
Palavra-chave pr-processamento
String
Seqncia (C# @ Verbatim)
Tipos de usurio
Usurio tipos (tipos valor)
Tipos de usurio (interface)
Usurio tipos (enums)
Usurio tipos (representantes)
Seo CDATA XML
Comentrio XML
Atributo doc XML
Comentrio XML doc
Visual C# Consolidado 57
Marca doc XML
Voc pode modificar colorization padro da configurao usando o Fontes e cores, Ambiente,
caixa de dilogo Opes.
Palavras-chave contextuais
Editor de Cdigo colorizes palavras-chave contextuais adequadamente. O Exemplo a seguir, o
tipo yield est colorized turquesa, enquanto a palavra yield est azul colorized.
Brace Colorization correspondncia
Editor de Cdigo facilita colorization negrito ou colorization de realce para Brace correspondncia.
Negrito Colorization
Quando voc editar qualquer uma dos pares construo de cdigo a seguir a seqncia, ou pares
construo de cdigo rapidamente so exibidos em negrito para indicar uma associao entre
elas:
" " Uma seqncia
@" " Uma seqncia verbatim
#if, #endif Pr-processamento diretivas para sees condicionais
#region, #endregion Pr-processamento diretivas para sees condicionais
case, break Palavras-chave instruo controle
default, break Palavras-chave instruo controle
for, break Palavras-chave expresso avaliao
for, continue Palavras-chave expresso avaliao
foreach, break Palavras-chave expresso avaliao
foreach, continue Palavras-chave expresso avaliao
while, break Palavras-chave expresso avaliao
while, continue Palavras-chave expresso avaliao
Visual C# Consolidado 58
Voc pode desativar este recurso por unselecting a
Automatic delimiter highlighting
propriedade no Geral, editor de texto, caixa de dilogo Opes.
Realar Colorization
Quando o cursor est posicionado imediatamente antes um delimitador inicial, ou imediatamente
aps um delimitador de trmino, retngulos cinza aparecem para realar tanto inicial e final
delimitadores para indicar uma associao entre eles. Esse recurso est disponvel para os
seguintes pares correspondentes:
{ } Chaves
[ ] Colchetes
( ) Parntese
Exemplo
Para ilustrar Brace correspondncia colorization, digite fazer (No copie e cole) o cdigo a seguir
no Editor de Cdigo.
class A { public A() { if(true) int x =0; else int x =1; } }
Configuraes colorization
Configuraes colorization so persistentes atravs de Configuraes do Visual Studio.
Metadados como fonte
Metadados como fonte permite-lhe Exibir metadados que aparece como C# cdigo-fonte em um
buffer somente leitura. Isso permite que um modo de exibio das declaraes dos tipos e
membros (com nenhum implementaes). Voc pode exibir metadados como origem ao executar
o
Go To Definition
Comando para tipos ou membros cujo cdigo de fonte no est disponvel
do seu projeto ou soluo.
Observao
Quando voc tenta executar o Go To Definition Comando para tipos ou membros marcados
como internos, o IDE (ambiente de desenvolvimento integrado) no exibe seus metadados como
fonte, independentemente do se o conjunto de referncia um amigo ou no.
Voc pode exibir metadados como fonte no Editor de Cdigo ou a
Code Definition
janela.
Exibindo metadados como no Editor do cdigo fonte
Quando voc executa o
Go To Definition
comando para um item cujo cdigo de fonte no
estiver disponvel, um documento que contm uma exibio de metadados, esse item exibido
como fonte, com guias exibida no editor do cdigo. O nome do tipo, seguido por
[from
metadata]
, aparecer na guia do documento.
Por exemplo, se voc executar o
Go To Definition
comando para Console metadados de
Console
aparece no Editor do cdigo como cdigo fonte C# que parea como sua declarao,
mas com nenhum implementao.
Visual C# Consolidado 59
Exibindo metadados como fonte no Code Definition Window
Quando a
Code Definition
janela estiver ativa ou visvel, o IDE executa automaticamente o
Go
To Definition
Comando para itens sob o cursor no Editor do cdigo e para itens que esto
selecionados no
Class View
ou o
Object Browser
. Se o cdigo fonte no est disponvel
para esse item, o IDE exibir metadados do item como origem na janela
Code Definition
.
Por exemplo, se voc colocar o cursor dentro a palavra
Console
no Editor do cdigo, metadados
para
Console
aparecer como fonte na janela
Code Definition
. A fonte procura algo como a
Console
declarao, mas com nenhum implementao.
Se voc deseja ver a Declarao de um item que aparece na janela
Code Definition
, voc
deve usar o
Go To Definition
comando porque a
Code Definition
janela apenas um nvel
de profundidade explicitamente
Configuraes do IDE Visual C#
Visual configuraes C# so uma configurao de janelas de ferramentas, menus e atalhos de
teclado predefinida. Essas configuraes so parte do recurso Configuraes do Visual Studio,
que voc pode personalizar para ajustar seus hbitos de trabalho.
Windows e modos de exibio
Recurso Exibido por padro? Observaes
Class View No Exibir de classe est disponvel no menu
View.
Filtragem est ativada.
Janela de
Comando
No
Dynamic Help
Window
No Pressionar a tecla F1 no exibe a janela da Ajuda
dinmica.
Para obter mais informaes sobre a janela Ajuda
Visual C# Consolidado 60
dinmico, consulte Como: Personalizar Ajuda dinmica
ou Como controlar a janela da Ajuda dinmico:.
Pesquisador de
objetos
No No exibida membros herdados por padro.
Janela Output No
Solution Explorer Sim Explorer de soluo aparece encaixado no lado direito
de IDE.
Start Page Sim, quando voc
inicia o IDE
A pgina inicial Exibe artigos na alimentao RSS
MSDN no Visual C#.
Lista de tarefas
(Visual Studio)
No
Toolbox Sim, quando voc
cria um aplicativo do
Windows Forms
A caixa de ferramentas aparece como uma janela que
encaixada no lado esquerdo de IDE recolhida.
Teclado
Recurso Comportamento
Teclas de atalho Essas configuraes de chave de atalho oferece suporte Visual C#:
Emulao breve
Emulao Emacs
Visual C++ 2,0 padro teclas de atalho
Teclas de atalho padro Studio 6.0 Visual
Atalhos de Teclado Visual C#
Visual C# fornece um nmero de atalhos de teclado que voc pode usar para executar aes sem
usar o mouse ou menus.
Teclas de atalho
O IDE (ambiente de desenvolvimento integrado) fornece vrios esquemas de ligao do teclado
predefinidos. Voc pode criar seu prprio teclado personalizado esquemas de mapeamento do
painel de ambiente opes na caixa de dilogo Opes teclado. Voc pode acessar a caixa de
dilogo Opes no menu Ferramentas.
Os esquemas de ligao do teclado disponveis incluem o seguinte:
Para obter mais informaes sobre a biblioteca de classe do .NET Framework, consulte
Viso geral da estrutura da biblioteca de classe .NET e Programao no .NET Framework.
Para obter mais informaes sobre a arquitetura .NET Framework, consulte Viso Geral do
.NET Framework.
Para obter informaes sobre como executar tarefas especficas usando as bibliotecas de
classe, consulte Como fazer em C# ou clique em
How Do I
no menu
Help
do Visual C#.
Visual C# Consolidado 65
Criando aplicativos do Windows Forms (Visual C#)
Windows Forms a tecnologia que voc usa em Visual C# para criar aplicativos de cliente
inteligente baseados no Windows que executa em .NET Framework. Quando voc cria um projeto
de aplicativos Windows, voc est criando um aplicativo baseado no Windows Forms. Voc usar
o o Windows Forms Designer para criar a interface do usurio, e voc ter acesso a outros
recursos de design em tempo de execuo, incluindo:
Implantao ClickOnce.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Excel
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de aplicativos do Excel.
Para criar um novo projeto
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Alterando planilha formatao usando controles CheckBox
Walkthrough:
Essa explicao passo a passo mostra os fundamentos bsicos do uso caixas de seleo em um
planilha do Microsoft Office Excel 2003 para alterar a formatao. Voc usar Microsoft Visual
Studio 2005 Tools for the Microsoft Office System para criar e adicionar cdigo ao seu projeto.
Para ver o resultado como uma amostra completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em uma planilha usando um boto
Walkthrough:.
Exibindo texto em uma caixa de texto em uma planilha usando
um boto Walkthrough:
Essa explicao passo a passo mostra os fundamentos bsicos do uso botes e caixas de texto
em planilhas Microsoft Office Excel 2003, e como criar projetos Excel usando Microsoft Visual
Studio 2005 Tools for the Microsoft Office System. Para ver o resultado como uma amostra
completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Excel.
Criando o projeto
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Para criar um novo projeto
Visual C# Consolidado 77
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Usar caixas de seleo para alterar a formatao. Para obter mais informaes, consulte
Alterando planilha formatao usando controles CheckBox Walkthrough:.
Programao contra eventos de um controle NamedRange
Walkthrough:
Essa explicao passo a passo demonstra como adicionar um NamedRange controle a um
planilha do Microsoft Office Excel 2003 e programa contra seus eventos usando Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
Durante este explicao passo a passo, voc aprender como:
Adicionar um
NamedRange
controle para uma planilha.
Programa contra
NamedRange
Eventos de controle.
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Programao contra eventos dos XMLNode controles modo. Para obter mais informaes,
consulte Alterando o painel de aes de acordo com contexto do usurio Walkthrough:.
Passo-a-passo: Concedendo e removendo permisses para uma
soluo do Office
Essa explicao passo a passo demonstra as noes bsicas de segurana no Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Cache os dados para que ele possa ser usado off-line. Para obter mais informaes,
consulte Como dados de cache para uso off-line ou em um servidor:.
Vincular clulas para vrias colunas em uma tabela, em vez da um campo. Para obter
mais informaes, consulte Walkthrough: vinculao clulas para vrias colunas em uma
tabela.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Na guia
Common Controls
Da adicionar um
Button
controle a clula
A4
da planilha.
o
Toolbox
,
A prxima etapa para adicionar texto ao boto quando a planilha abre.
Inicializao do controle
Adicionar texto ao boto no manipulador Startup de eventos.
Ao inicializar o controle
1. Clique com o boto direito do mouse
Sheet1.vb
no
Solution Explorer
, ou
Sheet1.cs
,. e, em seguida clique
View Code
no menu de atalho
2. Adicione o seguinte cdigo para o
Sheet1_Startup
mtodo para definir o texto para o b
utton
.
C#
this.button1.Text = "Save";
3. C# somente, para adicionar um manipulador de eventos para o Click evento para o
Sheet1_Startup
mtodo.
C#
this.button1.Click += new EventHandler(button1_Click);
Agora, adicione cdigo para manipular o
Click
Evento do boto.
Salvar alteraes no banco de dados
As alteraes tenham sido feitas o dados existe somente no dataset local at que eles so salvos
explicitamente volta para o banco de dados.
Para salvar as alteraes feitas o banco de dados
Pressione F5.
Verifique que quando abrir a pasta de trabalho, o objeto lista preenchido com dados da
tabela
Employees
.
Para modificar dados
1. Clique em Clula
B7
, que deve conter o nome
Davolio
.
2. Digite o nome
Anderson
, e pressione ENTER.
Para modificar um cabealho de coluna
1. Clique na clula que contm no cabealho
LastName
da coluna.
2. Digitar
Last Name
, incluindo um espao entre as duas palavras, e pressione ENTER.
Para salvar dados
1. Clique
Save
na planilha.
2. Feche a pasta de trabalho. Clique em
No
Quando solicitado a salvar as alteraes feitas.
3. Pressione F5 para executar o projeto novamente.
O objeto lista preenchido com dados da tabela
Employees
.
4. Observe que o nome na clula
B7
ainda
Anderson
, que a alterao de dados que
voc feitas e salvas volta para o banco de dados. No cabealho
LastName
da coluna foi
alterado para seu formato original sem nenhum espao, porque no cabealho da coluna
no est vinculado ao banco de dados e voc no foi salvar as alteraes feitas para a
planilha.
Para adicionar novas linhas
1. Selecione uma clula dentro do objeto lista.
Uma nova linha aparece na parte inferior da lista, com um asterisco (
*
.) na primeira clula
da nova linha
2. Adicionar as informaes a seguir na linha vazia:
CdigoDoFuncionrio Sobrenome FirstName Ttulo
10 ITO Shu Gerenciador de vendas
Para excluir linhas
1. Selecionar linha 16, que deve conter a nova linha que voc adicionou, clicando no nmero
16 no lado esquerdo da planilha.
2. No menu
Edit
, clique em
Delete
.
Para classificar as linhas na lista
1. Selecione uma clula dentro da lista.
Botes de seta aparecem em cada cabealho de coluna.
2. Clique no boto SETA no cabealho da
Last Name
coluna.
3. Clique em
Sort Ascending
.
Visual C# Consolidado 91
As linhas so classificadas em ordem alfabtica por sobrenome.
Para filtrar informaes
1. Selecione uma clula dentro da lista.
2. Clique no boto SETA no cabealho da
Title
coluna.
3. Clique em
Sales Representative
.
A lista mostra somente as linhas que tm
Sales Representative
na coluna
Title
.
4. Clique no boto SETA no cabealho da
Title
coluna novamente.
5. Clique em
(All)
.
Filtragem removida e todas as linhas aparecem.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do vinculando uma tabela em um
banco de dados a um objeto de lista. Aqui esto algumas tarefas que podem vie em seguida:
Cache os dados para que ele possa ser usado off-line. Para obter mais informaes,
consulte Como dados de cache para uso off-line ou em um servidor:.
Implantar a soluo. Para obter mais informaes, consulte Como implantar solues do
Office:.
Criar uma relao mestre / detalhes entre um campo e uma tabela. Para obter mais
informaes, consulte Criando uma relao mestre / detalhes usando um DataSet em cache
Walkthrough:.
Criando uma relao mestre / detalhes usando um DataSet em
cache Walkthrough:
Essa explicao passo a passo demonstra criar uma relao mestre / detalhes em uma planilha, e
cache os dados para que a soluo pode ser usada off-line.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Implantar a soluo. Para obter mais informaes, consulte Como implantar solues do
Office:.
Recuperar dados de cache para outro projeto. Para obter mais informaes, consulte
Como recuperar dados de uma pasta de trabalho em um servidor em cache:.
Walkthrough: atualizando um grfico em uma planilha usando botes de
opo
Essa explicao passo a passo mostra os fundamentos bsicos do alterando estilos do grfico
usando botes de opo em um planilha do Microsoft Office Excel 2003. Para ver o resultado
como uma amostra completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Selecione o
Chart
controle no designer e alterar as seguintes propriedades na janela
Properties
:
Propriedade Value (Valor)
Name dataChart
HasLegend False
Adicionar um controle de usurio ao projeto
Para adicionar um controle de usurio
1. Selecione o
My Excel Chart
projeto no
Solution Explorer
.
2. No menu
Project
, clique em
Add New Item
.
3. Na caixa
Add New Item
de dilogo, clique
User Control
, nome do controle
ChartOptions,
e clique em
Add
Para adicionar controles Windows Form ao controle de usurio
1. Se o controle de usurio estiver no visvel no designer, clique duas vezes em
ChartOptions
no
Solution Explorer
.
2. Na guia
Common Controls
Da arraste um
Radio Button
controle para o controle de
usurio, e alterar as seguintes propriedades: o
Toolbox
,
Propriedade Value (Valor)
Visual C# Consolidado 97
Name columnChart
Text Grfico de coluna
3. Adicionar um boto de opo segundo para o controle de usurio, e alterar as
propriedades a seguir:
Propriedade Value (Valor)
Name barChart
Text Grfico de barras
4. Adicionar um boto de opo terceiro para o controle de usurio, e alterar as propriedades
a seguir:
Propriedade Value (Valor)
Name lineChart
Text Grfico de linha
5. Adicionar um boto de opo quarto para o controle de usurio, e alterar as propriedades a
seguir:
Propriedade Value (Valor)
Name areaBlockChart
Text Grfico bloquear de rea
Em seguida, escreva o cdigo para atualizar o grfico quando um boto de opo clicado.
Alterar o grfico estilo quando um boto de opo selecionada
Nesta seo, voc ser criar um evento pblico sobre o controle de usurio, adicionar uma
propriedade para definir o tipo de seleo, e criar um manipulador de eventos para o
CheckedChanged
evento de cada um dos botes de opo.
Para criar um evento e propriedade em um controle de usurio
1. No
Solution Explorer
, clique com o boto direito do mouse no controle de usurio e
selecione
View Code
.
2. Adicione cdigo para criar um
SelectionChanged
evento e a
Selection
propriedade para a
ChartOptions
classe:
C#
public event EventHandler SelectionChanged;
private Microsoft.Office.Interop.Excel.XlChartType selectedType =
Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered;
public Microsoft.Office.Interop.Excel.XlChartType Selection
{
get { return this.selectedType; }
set { this.selectedType = value; }
}
Para manipular o evento CheckedChanged dos botes de opo
Visual C# Consolidado 98
1. Definir o tipo de grfico no manipulador
CheckedChanged
de eventos de boto
areaBlockChart
de opo e depois gerar o evento.
C#
private void areaBlockChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Excel.XlChartType.xlAreaStacked; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
2. Definir o tipo de grfico no manipulador
CheckedChanged
de eventos do boto
barChart
de opo.
C#
private void barChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Excel.XlChartType.xlBarClustered; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
3. Definir o tipo de grfico no manipulador
CheckedChanged
de eventos do boto
columnChart
de opo.
C#
private void columnChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered; if (this.SelectionChanged !=
null) { this.SelectionChanged(this, EventArgs.Empty); } } }
4. Definir o tipo de grfico no manipulador
CheckedChanged
de eventos do boto
lineChart
de opo.
C#
private void lineChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Excel.XlChartType.xlLineMarkers; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
5. Em C#, voc deve adicionar manipuladores de eventos para os botes de opo. Adicione
o cdigo para o
ChartOptions
Construtor, sob a chamada para
InitializeComponent
,
conforme mostrado abaixo. Para obter informaes sobre como criar manipuladores de
eventos, consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio
do Office:.
C#
public ChartOptions() { InitializeComponent(); areaBlockChart.CheckedChanged += new
EventHandler(areaBlockChart_CheckedChanged); barChart.CheckedChanged += new
EventHandler(barChart_CheckedChanged); columnChart.CheckedChanged += new
EventHandler(columnChart_CheckedChanged); lineChart.CheckedChanged += new
EventHandler(lineChart_CheckedChanged); }
Adicionar o controle de usurio a planilha
Quando voc cria a soluo, o novo controle de usurio automaticamente adicionado
Toolbox
. Voc pode, ento, arrastar o controle da
Toolbox
. para seu Worksheet
Para adicionar o controle do usurio sua planilha
1. No menu
Build
, clique em
Build Solution
.
O
ChartOptions
controle de usurio adicionado
Toolbox
.
2. Clique com o boto direito do mouse
Sheet1.vb
no
Solution Explorer
, ou
Sheet1.cs
. e selecione
View Designer
Visual C# Consolidado 99
3. Do
Toolbox
arraste o
ChartOptions
controle de para a planilha.
Um novo controle chamado
ChartOptions1
adicionado ao seu projeto.
Alterar o tipo de grfico
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
Para alterar o tipo de grfico que exibido na planilha
1. Adicionar o manipulador de eventos a seguir para a
Sheet1
classe.
C#
private void ChartOptions1_SelectionChanged(object sender, EventArgs e) { try {
dataChart.ChartType = this.ChartOptions1.Selection; } catch (Exception ex) {
MessageBox.Show(ex.ToString()); } }
2. Em C#, adicione um manipulador de eventos para o controle de usurio para o Startup
evento como mostrado abaixo. Para obter informaes sobre como criar manipuladores de
eventos, consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio
do Office:.
C#
this.ChartOptions1.SelectionChanged += new
EventHandler(ChartOptions1_SelectionChanged);
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que o grfico tiver estilo
corretamente quando voc seleciona um boto de opo.
Para testar sua pasta de trabalho
1. Pressione F5 para executar o projeto.
2. Selecione vrios botes de opo.
3. Confirme que o estilo do grfico altera para correspondem seleo.
Prximas etapas
Essa explicao passo a passo mostra noes bsicas sobre como usar botes de opo e estilos
do grfico nas planilhas do Excel 2003. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em uma planilha usando um boto
Walkthrough:.
Alterar a formatao em uma planilha usando caixas de seleo. Para obter mais
informaes, consulte Alterando planilha formatao usando controles CheckBox
Walkthrough:.
Vinculao de Dados para controles em um painel Aes do Excel
Walkthrough:
Essa explicao passo a passo demonstra vinculao de dados a controles em um painel Aes
no Microsoft Office Excel 2003. Os controles demonstram uma Relao mestre / detalhes entre
tabelas em um banco de dados do SQL Server.
Durante este explicao passo a passo, voc aprender como:
Visual C# Consolidado 100
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Word. Para obter mais informaes, consulte Vinculao
de Dados para controles em um painel Aes do Word Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Implantando um Word ou Solution do Excel usando um manifesto
Deployment Walkthrough:
Essa explicao passo a passo demonstra como implantar uma soluo o Microsoft Office Excel
ou Microsoft Office Word em um compartilhamento de rede em um servidor. Ser posicionado no
final do explicao passo a passo, o possvel para executar a soluo no servidor do seu
computador de desenvolvimento.
Em um ambiente de produo, uma Microsoft Visual Studio 2005 Tools for the Microsoft Office
System soluo geralmente publicada primeiro a um servidor de teste, e depois ele
reimplantado em um servidor de produo depois que o departamento de TI aprovar-. Voc nessa
explicao passo a passo, ser emular esse processo, publicando uma soluo em um local
temporrio no seu computador de desenvolvimento, e ento redeploying a soluo do local de
publicao para um servidor. Para obter mais informaes sobre as opes para implantar a
soluo, consulte Modelos de implantao.
Durante este explicao passo a passo, voc aprender como:
Do
Publish Wizard
uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Criar um projeto de instalao que voc pode usar para criar um arquivo do Windows
Installer.
Modifique o projeto de instalao para que o arquivo Windows Installer instala sua
Microsoft Visual Studio 2005 Tools for the Microsoft Office System soluo.
Visual C# Consolidado 108
Adicionar uma etapa para o projeto de instalao para que Arquivo do Windows Installer
edita o manifesto do aplicativo incorporados no Visual Studio Tools for Office documento de
soluo.
Essa explicao passo a passo pressupe que o computador de destino j tiver os pr-requisitos
instalados para executar Visual Studio Tools for Office solues. Voc cria o arquivo Windows
Installer no o verificar ou instalar esses pr-requisitos. Para obter mais informaes sobre os pr-
requisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Implantao do projeto. Para obter mais informaes, consulte Como: Implantar arquivos
de soluo usando o Publish Wizard.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Exibindo texto em uma caixa de texto em um documento usando
um boto Walkthrough:
Essa explicao passo a passo demonstra noes bsicas de usando botes e caixas de texto em
documentos do Microsoft Office Word 2003,, bem como usar Microsoft Visual Studio 2005 Tools
for the Microsoft Office System para criar um projeto. Durante este explicao passo a passo,
voc aprender como:
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Usando uma caixa de combinao para alterar a formatao. Para obter mais informaes,
consulte Walkthrough: Changing Document formatao usando controles CheckBox.
Visual C# Consolidado 121
Walkthrough: Criando menus de atalho para indicadores
Essa explicao passo a passo demonstra a criao de menus de atalho para Bookmark
controles. Voc ir escrever cdigo no evento BeforeRightClick do indicador para que quando o
usurio clica com o boto direito do mouse o texto dentro do indicador, um menu de atalho
contendo itens de menu para formatar o texto aparea.
Durante este explicao passo a passo, voc aprender como:
Escrever cdigo para responder a com o boto direito do mouse texto em um indicador.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Escrever cdigo para responder a eventos de controles host no Excel. Para obter mais
informaes, consulte Programao contra eventos de um controle NamedRange
Walkthrough:.
Use uma caixa de seleo para alterar formatao em um indicador. Para obter mais
informaes, consulte Walkthrough: Changing Document formatao usando controles
CheckBox.
Visual C# Consolidado 124
Walkthrough: atualizando um grfico em um documento usando
botes de opo
Essa explicao passo a passo demonstra os fundamentos bsicos do alterando estilos do grfico
usando botes de opo em um documento do Microsoft Office Word 2003. Voc usar Microsoft
Visual Studio 2005 Tools for the Microsoft Office System para criar e adicionar cdigo ao seu
projeto. Para ver o resultado como uma amostra completa, consulte Exemplo de controles do
Word.
Durante este explicao passo a passo, voc aprender como:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Use uma Relao mestre / detalhes quando exibir dados nos controles.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Visual C# Consolidado 129
No manipulador
Load
de eventos da classe
ActionsControl
, adicione o seguinte cdigo:
C#
Visual C# Consolidado 131
private void ActionsControl_Load(object sender, EventArgs e) {
this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
this.productsTableAdapter.Fill(this.northwindDataSet.Products); }
Para definir propriedades de vinculao de dados do controle
1. Selecione o
CompanyNameComboBox
controle.
2. Na janela
Properties
, clique no boto para a direita da propriedade
DataSource
, e
selecione
SuppliersBindingSource
.
3. Na janela
Properties
, clique no boto para a direita da propriedade
DisplayMember
,
e selecione
CompanyName
.
4. Selecione o
ProductNameListBox
controle.
5. Na janela
Properties
, clique no boto para a direita da propriedade
DataSource
,
expanda
SuppliersBindingSource
, e selecione
FK_Products_Suppliers
.
6. Na janela
Properties
, clique no boto para a direita da propriedade
DisplayMember
,
e selecione
ProductName
.
Adicionando um mtodo para inserir dados em uma tabela
Nesta etapa, ser ler os dados dos controles acoplados e preencher uma tabela em seu
documento do Word. Primeiro, voc ir criar um procedimento para formatar os ttulos na tabela, e
seguida, voc adicionar o
AddData
mtodo para criar e formatar uma tabela do Word.
Para formatar os ttulos de tabela
Na classe ActionsControl, crie um mtodo para formatar os ttulos da tabela. Adicione cdigo
conforme mostrado no Exemplo a seguir:
C#
static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text) {
tblCell.Range.Text = text; tblCell.Range.Font.Bold = 1;
tblCell.Range.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; }
Para criar a tabela
Na classe ActionsControl, escreva no um mtodo que criar uma tabela se um no existir, e
adicionar dados a partir do painel Aes tabela. Adicione cdigo conforme mostrado no Exemplo
a seguir.
C#
private void AddData(DataRow row, string companyName) { object missing =
System.Type.Missing; // Create a table if it doesn't already exist. if
(Globals.ThisDocument.Tables.Count == 0) { try { // Create a table.
Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add
(Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing); // Insert
headings. SetHeadings(tbl.Cell(1, 1), "Company Name"); SetHeadings(tbl.Cell(1, 2), "Product
Name"); SetHeadings(tbl.Cell(1, 3), "Quantity"); SetHeadings(tbl.Cell(1, 4), "Unit Price"); }
catch (Exception ex) { MessageBox.Show("Problem creating Products table: " + ex.Message,
"Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // Add data from data row
to the table. Microsoft.Office.Interop.Word.Selection selection =
Globals.ThisDocument.Application.Selection; if (selection.Tables.Count > 0) {
Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref
missing); newRow.Range.Font.Bold = 0; newRow.Range.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
newRow.Cells[4].Range.ParagraphFormat.Alignment =
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
newRow.Cells[1].Range.Text = companyName; newRow.Cells[2].Range.Text =
Visual C# Consolidado 132
row["ProductName"].ToString(); newRow.Cells[3].Range.Text =
row["QuantityPerUnit"].ToString(); newRow.Cells[4].Range.Text =
Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00"); } else {
MessageBox.Show("Cursor must be within a table.", "Actions Pane", MessageBoxButtons.OK,
MessageBoxIcon.Error); } }
Para inserir texto em uma tabela do Word
No manipulador Click de eventos do boto Insert, adicione cdigo conforme mostrado no
Exemplo o seguir:
Observao
Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
private void Insert_Click(object sender, System.EventArgs e) { DataTable tbl =
northwindDataSet.Products; DataRow[] rows; // Check if a product is selected. if
(this.productNameListBox.SelectedIndex >= 0) { DataRowView productRow
=(System.Data.DataRowView)this.productNameListBox.SelectedItem; string product =
productRow.Row["ProductName"].ToString(); string company =
this.companyNameComboBox.Text; // Return the data row from the selected product. rows =
tbl.Select("ProductName = '" + product.Replace("'", "''") + "'"); this.AddData(rows[0], company); }
else { MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK); } }
1. Em C#, voc deve criar um manipulador de eventos para o
Click
Evento do boto. Voc
pode colocar este cdigo no manipulador
Load
de eventos da classe
ActionsControl
.
Para obter mais informaes sobre como criar manipuladores de eventos, consulte Como
criar manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.Insert.Click += new EventHandler(Insert_Click);
Mostrando o Painel de Aes
Voc nesta seo, vai escrever cdigo para mostrar o painel Aes. O painel Actions ficar visvel
depois controles so adicionados a ele.
Para mostrar o painel Aes
1. Clique com o boto direito do mouse
ThisDocument.vb
no
Solution Explorer
, ou
ThisDocument.cs
,. e, em seguida clique
View Code
no menu de atalho
Criar uma nova instncia do controle na parte superior da classe ThisDocument de forma que ele
tenha como no Exemplo a seguir:
C#
private ActionsControl actions = new ActionsControl();
Adicione cdigo ao manipulador Startup de eventos de ThisDocument forma que ele tenha como no
Exemplo a seguir:
Observao
Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.ActionsPane.Controls.Add(actions);
Testar o aplicativo
Visual C# Consolidado 133
Agora voc pode testar seu documento para certificar-se que o painel Aes aberto quando o
documento for aberto. Teste para a relao mestre / detalhes nos controles no painel Aes, e
certifique-se que dados so preenchidos em uma tabela do Word quando o
Insert
boto
clicado.
Para testar seu documento
1. Pressione F5 para executar o projeto.
2. Confirme se o painel Actions est visvel.
3. Selecione uma empresa na caixa de combinao e verifique que os itens na caixa
Products
Lista alterar.
4. Selecione um produto, clique
Insert
no painel de aes, e verifique se os detalhes do
produto foram adicionados tabela no Word.
5. Inserir outros produtos de vrias empresas.
Prximas etapas
Essa explicao passo a passo mostra as noes bsicas de vinculao de dados a controles em
um painel Aes no Word. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Excel. Para obter mais informaes, Vinculao de Dados
para controles em um painel Aes do Excel Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Walkthrough: criar uma marca inteligente que converte
Temperatures de Fahrenheit para Celsius
Essa explicao passo a passo demonstra criar uma marca inteligente que reconhece Fahrenheit
seqncias de temperatura. A marca inteligente inclui uma ao que converte o valor de
temperatura em Celsius, e substitui o texto reconhecido por um Celsius formatado Seqncia de
temperatura.
Durante este explicao passo a passo, voc aprender como:
Criar uma ao que recupera dados da marca inteligente e modifica o texto de reconhecido
marca inteligente.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Do
Publish Wizard
uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Visual C# Consolidado 136
Para concluir esta explicao passo a passo, ser necessrio:
Criar um projeto de instalao que voc pode usar para criar um arquivo do Windows
Installer.
Modifique o projeto de instalao para que o arquivo Windows Installer instala sua
Microsoft Visual Studio 2005 Tools for the Microsoft Office System soluo.
Adicionar uma etapa para o projeto de instalao para que Arquivo do Windows Installer
edita o manifesto do aplicativo incorporados no Visual Studio Tools for Office documento de
soluo.
Essa explicao passo a passo pressupe que o computador de destino j tiver os pr-requisitos
instalados para executar Visual Studio Tools for Office solues. Voc cria o arquivo Windows
Installer no o verificar ou instalar esses pr-requisitos. Para obter mais informaes sobre os pr-
requisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft MapPoint
Transmitir contedo ao vivo
. Uma organizao de notcias pode usar a Automation
API para agendar a captura automtica e transmisso de contedo ao vivo. Por exemplo,
departamentos de transporte local podem transmitir imagens reais das condies de trnsito
em vrios pontos crticos, alertando os motoristas dos congestionamento de trfego e os
informando de rotas alternativas.
Contedo de processamento em lote
. Uma organizao de produo de mdia
que deve processar um volume alto de arquivos grandes pode criar um processo em lotes que
usa a Automation API repetidamente para capturar e codificar fluxos, um aps o outro. Uma
empresa pode usar a Automation API para gerenciar seus servios de mdia de fluxo com uma
linguagem de script preferencial e o Windows Script Host. Windows Script Host um host
independente de linguagem que pode ser usado para executar qualquer mecanismo de script
no Microsoft Windows 95 ou posterior, Windows NT, ou sistemas operacionais Windows 2000
Criar uma interface de usurio personalizada
. Um provedor de servio Internet
(ISP) pode criar uma interface que usa a funcionalidade da Automation API para capturar,
codificar, e transmitir fluxos de mdia. Como alternativa, voc pode usar as interfaces de
usurio predefinidas dentro da Automation API para a mesma finalidade.
Administrar aplicativos do Windows Media Encoder remotamente
. Voc
pode usar a Automation API para executar, solucionar problemas, e administrar aplicativos do
Windows Media Encoder em um computador remoto.
Para mais informaes, consulte Windows Media Encoder 9 Series SDK no MSDN Online. O
tpico Programao C# descreve quais referncias incluir ao trabalhar em C#.
O Windows Media Server
O Microsoft Windows Media Services 9 Series Software Development Kit (SDK) uma
poderosa Application Programming Interface (API) baseada em automao projetada para
qualquer pessoa que deseje desenvolver um aplicativo Windows Media Services 9 Series. Voc
pode usar este SDK no C# programaticamente para gerenciar um servidor do Windows Media
para enviar contedo de mdia digital a clientes em redes que permitem unicast e multicast. Para
mais informaes, consulte Windows Media Services 9 Series SDK.
Visual C# Consolidado 154
CRIANDO STARTER KITS (VISUAL C#)
Um Starter Kit contm cdigo para um aplicativo completo e documentao sobre como modificar
ou expandir o aplicativo. O Visual C# 2005 fornece dois Starter Kits que voc pode acessar a
partir da caixa de dilogo
New Project
. Voc tambm pode criar seus prprios Starter Kits para
ajudar os usurios obter e executar rapidamente em qualquer tipo de aplicativo. Criar um Starter
Kit fundamentalmente o mesmo que criar um modelo de projeto normal, a nica diferena que
um Starter Kit contm arquivos de documentao que esto definidos para abrir um projeto com
base no Starter Kit quando for criado.
Para mais informaes, consulte Introduo ao Starter Kits.
Visual C# Consolidado 155
MIGRANDO PARA O VISUAL C#
Esta seo apresenta sintaxe C# e conceitos para desenvolvedores que estiver migrando de
outras linguagens de programao. Ele tambm contm a documentao de referncia do Java
converso Assistente, que voc pode usar para converter origem linguagem Java em Cdigo fonte
C# idioma.
C# para desenvolvedores Java
Os tpicos nesta seo fornecem uma introduo linguagem C# e o .NET Framework.
Nesta seo
Guia de Programao C#
Referncia C#
Exemplos do Visual C#
Especificao da Linguagem C#
Para obter mais informaes, consulte as sees a seguir no Especificao da Linguagem C#:
Introduo 1
Visual C# Consolidado 159
Hello world-seu primeiro programa (guia de programao C#)
O seguinte programa Console a verso do programa Tradicional do "Hello World!", que exibe a
seqncia
Hello World!
C#.
CSharp
using System; // A "Hello World!" program in C# namespace HelloWorld { class Hello { static void
Main() { System.Console.WriteLine("Hello World!"); } } }
Vamos agora examinar as partes importantes deste programa por sua vez.
Comentrios
A primeira linha contm um comentrio:
CSharp
// A "Hello World!" program in C#
Os caracteres
//
convertem o restante da linha em um comentrio. Voc tambm pode comentar
um bloco de texto, colocando-o entre os caracteres
/*
e
*/
, por exemplo:
CSharp
/* A "Hello World!" program in C#. This program displays the string "Hello World!" on the screen.
*/
O mtodo principal
O programa C# deve conter um mtodo chamado
Main
, no qual o controle de execuo inicia e
termina. O mtodo
Main
onde voc cria objetos e executa outros mtodos.
O mtodo Main um mtodo static (esttico) que reside em uma classe ou uma estrutura. No
Exemplo anterior "Hello World! ", ele reside em uma classe chamada Hello. Declare o mtodo Main
de uma das maneiras a seguir:
Podendo retornar
void
:
CSharp
static void Main() { //... }
Crie o arquivo de origem usando qualquer editor de texto e salv-lo usando um nome,
como
Hello.cs
. Arquivos cdigo fonte C# usam a extenso
.cs
.
O
Main
mtodo o ponto de entrada do seu programa, onde o controle de execuo do
programa inicia e termina.
Ele declarado dentro de uma classe ou estrutura. Ele deve ser esttico (static) e ele no deve
ser pblico. (No Exemplo acima, como no especificamos um modificador de acesso
explicitamente, ele recebe o modificador de acesso padro, que (private) particular).
O mtodo
Main
pode ser declarado com ou sem parmetros.
Parmetros podem ser lidos como argumentos de linha de comando indexados a partir do
zero.
Tipos de referncia (referncia C#) que armazenam referncias para os dados reais.
Sees relacionadas
Para obter mais informaes:
Uma matriz denteada uma matriz de matrizes, e portanto seus elementos so tipos de
referncia e so inicializados para
null
.
Tipos de matriz so Tipos de referncia derivados do tipo Array base abstrato. Desde isso
e IEnumerable implementa IEnumerable Tipo, voc pode utilizar foreach iterao em todas as
matrizes em C#.
Matrizes como objetos (guia de programao C#)
No C#, matrizes so realmente objetos, e no apenas endereveis regies de memria contgua
como em C e C++. Array o tipo base abstrato de todos os tipos de matriz. Voc pode usar as
propriedades, e outros membros da classe, que Array tem. Um Exemplo disso deve estar
usando a Length propriedade para obter o comprimento de uma matriz. O cdigo a seguir atribui o
comprimento da matriz numbers, que 5, a uma varivel chamada lengthOfNumbers:
C#
int[] numbers = { 1, 2, 3, 4, 5 }; int lengthOfNumbers = numbers.Length;
A
System.Array
classe fornece vrios outros til mtodos e propriedades para classificao,
pesquisa, e copiando matrizes.
Exemplo
Este Exemplo usa a Rank propriedade para exibir o nmero de dimenses de uma matriz.
C#
class TestArraysClass { static void Main() { // Declare and initialize an array: int[,] theArray =
new int[5, 10]; System.Console.WriteLine("The array has {0} dimensions.", theArray.Rank); } }
Visual C# Consolidado 166
Sada
The array has 2 dimensions.
Matrizes multidimensionais (guia de programao C#)
Matrizes podem ter mais de uma dimenso. Por exemplo, a declarao a seguir cria uma matriz
bidimensional de quatro linhas e duas colunas:
C#
int[,] array = new int[4, 2];
Alm disso, a declarao a seguir cria uma matriz de trs dimenses, 4, 2 e 3:
C#
int[, ,] array1 = new int[4, 2, 3];
Inicializao de matriz
Voc pode inicializar a matriz na declarao conforme mostrado no Exemplo o seguir:
C#
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; int[, ,] array3D = new int[,,] { { { 1,
2, 3 } }, { { 4, 5, 6 } } };
Voc tambm pode inicializar a matriz sem especificar a classificao:
C#
int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
Se voc optar por declarar uma varivel de matriz sem a inicializao, voc deve usar o
new
operador para atribuir uma matriz varivel Por exemplo:
C#
int[,] array5; array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK //array5 = {{1,2},
{3,4}, {5,6}, {7,8}}; // Error
Voc tambm pode atribuir um valor a um elemento de matriz, por exemplo:
C#
array5[2, 1] = 25;
O Exemplo de cdigo a seguir inicializa as variveis de matriz como padro (exceto para
denteadas matrizes):
C#
int[,] array6 = new int[10, 10];
Matrizes passagem como parmetros (guia de programao C#)
Matrizes podem ser passados para mtodos como parmetros. Como matrizes so tipos de
referncia, o mtodo pode alterar o valor dos elementos.
Passando matrizes dimensional nica como parmetros
Voc pode passar uma matriz dimensional nica inicializado para um mtodo. Por exemplo:
C#
PrintArray(theArray);
O mtodo chamado na linha acima poderia ser definido como:
C#
void PrintArray(int[] arr) { // method code }
Visual C# Consolidado 167
Voc tambm pode inicializar e passa uma nova matriz em uma etapa Por exemplo:
C#
PrintArray(new int[] { 1, 3, 5, 7, 9 });
Exemplo 1
Descrio
No Exemplo a seguir, a uma matriz de seqncia de caracteres inicializado e passado como um
parmetro para o PrintArray mtodo, onde seus elementos so exibidos:
Cdigo
C#
class ArrayClass { static void PrintArray(string[] arr) { for (int i = 0; i < arr.Length; i++) {
System.Console.Write(arr[i] + "{0}", i < arr.Length - 1 ? " " : ""); } System.Console.WriteLine();
} static void Main() { // Declare and initialize an array: string[] weekDays = new string[] {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; // Pass the array as a parameter:
PrintArray(weekDays); } }
Sada 1
Sun Mon Tue Wed Thu Fri Sat
Passando Matrizes multidimensionais como parmetros
Voc pode passar uma matriz multidimensional inicializado para um mtodo. Por exemplo, matriz
dimensional for
theArray
Um dois:
C#
PrintArray(theArray);
O mtodo chamado na linha acima poderia ser definido como:
C#
void PrintArray(int[,] arr) { // method code }
Voc tambm pode inicializar e passa uma nova matriz em uma etapa Por exemplo:
C#
PrintArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });
Exemplo 2
Descrio
Neste exemplo, uma matriz bidimensional inicializado e passada para o
PrintArray
mtodo,
onde seus elementos so exibidos.
Cdigo
C#
class ArrayClass2D { static void PrintArray(int[,] arr) { // Display the array elements: for (int i =
0; i < 4; i++) { for (int j = 0; j < 2; j++) { System.Console.WriteLine("Element({0},{1})={2}", i, j,
arr[i, j]); } } } static void Main() { // Pass the array as a parameter: PrintArray(new int[,] { { 1, 2
}, { 3, 4 }, { 5, 6 }, { 7, 8 } }); } }
Sada 2
Element(0,0)=1
Element(0,1)=2
Element(1,0)=3
Element(1,1)=4
Element(2,0)=5
Visual C# Consolidado 168
Element(2,1)=6
Element(3,0)=7
Element(3,1)=8
Passando REF usando matrizes e out (guia programao C#)
Todos os Limite parmetros, como um
out
parmetro de um tipo de matriz deve ser atribudo
antes que ela usada; ou seja, ele deve ser atribudo pelo chamado. Por exemplo:
C#
static void TestMethod1(out int[] arr) { arr = new int[10]; // definite assignment of arr }
Como todos os Ref parmetros, um
ref
parmetro de um tipo de matriz deve ser atribudo pelo
chamador definitivamente. Portanto, no necessrio para serem atribudos pelo chamado
definitivamente. Um
ref
parmetro de um tipo de matriz pode ser alterado como resultado da
chamada. Por exemplo, a matriz pode ser atribudo o Nulo valor ou podem ser inicializados para
uma matriz diferente. Por exemplo:
C#
static void TestMethod2(ref int[] arr) { arr = new int[10]; // arr initialized to a different array }
Os seguintes exemplos dois demonstram a diferena entre
out
e
ref
quando usada em passar
matrizes para mtodos.
Exemplo 1
Neste exemplo, a matriz
theArray
declarado no chamador (o
Main
mtodo), e inicializado no
mtodo
FillArray
. Em seguida, os elementos da matriz so retornados para o chamador e
exibido.
C#
class TestOut { static void FillArray(out int[] arr) { // Initialize the array: arr = new int[5] { 1, 2,
3, 4, 5 }; } static void Main() { int[] theArray; // Initialization is not required // Pass the array to
the callee using out: FillArray(out theArray); // Display the array elements:
System.Console.WriteLine("Array elements are:"); for (int i = 0; i < theArray.Length; i++) {
System.Console.Write(theArray[i] + " "); } } }
Sada 1
Array elements are:
1 2 3 4 5
Exemplo 2
Neste exemplo, a matriz
theArray
inicializado no chamador (o
Main
mtodo), e passada para o
FillArray
mtodo usando o
ref
parmetro. Algumas dos elementos da matriz so atualizadas no
mtodo
FillArray
. Em seguida, os elementos da matriz so retornados para o chamador e
exibido.
C#
class TestRef { static void FillArray(ref int[] arr) { // Create the array on demand: if (arr == null)
{ arr = new int[10]; } // Fill the array: arr[0] = 1111; arr[4] = 5555; } static void Main() { //
Initialize the array: int[] theArray = { 1, 2, 3, 4, 5 }; // Pass the array using ref: FillArray(ref
theArray); // Display the updated array: System.Console.WriteLine("Array elements are:"); for
(int i = 0; i < theArray.Length; i++) { System.Console.Write(theArray[i] + " "); } } }
Sada 2
Array elements are:
1111 2 3 4 5555
Visual C# Consolidado 169
Exemplo matrizes
Download sample
Este Exemplo descreve e mostra como matrizes funcionam em C#. Para obter mais informaes,
consulte Matrizes (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
2. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
3. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo matrizes no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo matrizes a partir da linha de comando
No MSDN Online em
http://msdn.microsoft.com/vcsharp/Programming/Language/default.aspx
Ponto flutuante estouro aritmtico ou diviso por zero nunca gera uma exceo, como
tipos de ponto flutuante esto baseados em IEEE 754 and caso tenha disposies para
representar infinito e NaN (Not a Number).
Uma seqncia rodeada por aspas duplas (" seqncia ") interpretada como um
argumento nico, independentemente de espao em branco contida. Uma seqncia entre
aspas pode ser incorporada em um argumento.
Precedido de aspas duplas por uma barra invertida (. \ " interpretado como um caractere
literal aspas duplas ("))
Se um nmero par de barras invertidas for seguido de aspas duplas, uma barra invertida
colocada na matriz argv para cada par de barras invertidas, e as aspas duplas interpretada
como um delimitador de seqncia de caracteres.
Se um nmero mpar de barras invertidas for seguido de aspas duplas, uma barra invertida
colocada na matriz argv para cada par de barras invertidas, e as aspas duplas " escaped ",
a barra invertida restante, causando de aspas duplas (") para ser colocado em argv literal.
Linhas de comando de exemplo
Compila todos os arquivos na pasta atual para Something.xyz (uma DLL) C#:
csc /target:library /out:Something.xyz *.cs
Diferenas entre compilador C# e C++ Sada do compilador
No h nenhum arquivo de objeto (.obj), criados como resultado de chamar o compilador C#;
arquivos de sada so criados diretamente. Como um consequence a isso, o compilador C# no
precisa um vinculador.
Como construir a partir da linha de comando:
O arquivo vsvars32.bat define as variveis de ambiente apropriados para ativar builds.For linha de
comando mais informaes sobre vsvars32.bat, consulte o seguinte artigo Base de
Conhecimento:
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo matrizes a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo verso a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo indexado Propriedades a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo Generics a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo atributos a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Observao
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
Para criar e executar o Exemplo OLE DB a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo YIELD cdigo a partir da linha de comando
Visual C# Consolidado 295
1. Use o
Change Directory (cd)
comando para alterar para o
Yield
Diretrio.
2. Digite o seguinte:
csc Yield.cs Yield
Annimo Exemplo representantes
Download sample
Este Exemplo demonstra usar um representante annimo para calcular um bnus do salrio de
um funcionrio. Usar um representante annimo simplifica o programa porque no necessrio
para definir um mtodo separado.
Os dados para cada funcionrio so armazenados em um objeto que contm detalhes pessoais,
bem como um representante que referencia o algoritmo necessrio para calcular o bnus.
Definindo o algoritmo por meio de um representante, o mesmo mtodo pode ser usado para
executar o clculo do bnus, independentemente de como ele realmente calculado. De
anotao, uma varivel local, multiplicador, tambm se torna uma varivel externo capturado
porque ele mencionado em um clculo delegado.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
2. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
3. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo de cdigo AnonymousDelegates no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo AnonymousDelegates a partir da linha de comando
1. Use o
Change Directory (cd)
comando para alterar para o diretrio
AnonymousDelegates.
2. Digite o seguinte:
csc AnonymousDelegates.cs AnonymousDelegates
Visual C# Consolidado 296
Exemplo tipos parcial
Download sample
Este Exemplo demonstra o uso de tipos parciais que permitem class ou struct para ser definidos
em dois ou mais arquivos C#. Isso permite que vrios programadores para trabalhar em partes
diferentes de uma classe em paralela, e para aspectos diferentes de uma classe complexo a
serem mantidos em arquivos separados.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
2. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
3. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo de cdigo PartialTypes no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo PartialTypes a partir da linha de comando
1. Use o
Change Directory (cd)
comando para alterar para o
PartialTypes
Diretrio.
2. Digite o seguinte:
csc PartialTypes.cs PartialTypes
Exemplo anulvel
Download sample
Este Exemplo demonstra o uso de tipos anulveis. Esse recurso permite que tipos de valores para
que um estado no inicializada, ou vazio, semelhante a como tipos de referncia podem ser
definidos como null.
Este Observao de segurana cdigo de Exemplo fornecido para ilustrar um conceito e
no deve ser usado em aplicativos ou sites da Web, como no-pode ilustrar as prticas de
codificao mais segura. Microsoft supe que nenhum RESPONSABILIDADE POR DANOS
INCIDENTAIS OU CONSEQENCIAIS o cdigo do Exemplo deve ser usado para fins diferente
da maneira desejada
Visual C# Consolidado 297
Para abrir o arquivo de Exemplo no Solution Explorer
1. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
2. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
3. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo Nullable cdigo no Visual Studio
1. Abra Nullable.sln, o arquivo de soluo, o clicando duas vezes no arquivo no Windows
Explorer, ou clicando
Open
no menu
File
.
2. No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo Nullable a partir da linha de comando
1. Use o
Change Directory (cd)
comando para alterar para o diretrio Nullable.
2. Digite o seguinte:
csc Nullable.cs Nullable
Visual C# Consolidado 298
TERMINOLOGIA C#
Modificador de acesso
Uma palavra-chave, como Particular, Protegido ou Pblica, que restringe o acesso a um
tipo ou membro Tipo., interno Para obter mais informaes, consulte Modificadores de
acesso.
Membro acessvel
Um membro que pode ser acessado por um tipo determinado. Um membro acessvel para
um tipo no est necessariamente acessvel para um outro tipo. Para obter mais
informaes, consulte Modificadores de acesso e Conjuntos de amigo.
Assessor
Um mtodo que Define ou recupera o valor de um valor que est associado a uma
propriedade membro dados particulares. Propriedades de leitura-gravao e
set
ter
get
assessores. Propriedades que so somente leitura tm apenas um
get
acessador. Para
obter mais informaes, consulte Propriedades.
Mtodo annimo
Um mtodo annimo um bloco de cdigo que passado como um parmetro para um
Delegar. Para obter mais informaes, consulte Mtodos annimo.
Classe base
Uma Classe que herdado por outra classe ' derivado '. Para obter mais informaes,
consulte Herana.
Chamar pilha
A srie de mtodo chama esquerda do incio do programa para a instruo atualmente
sendo executado em tempo de execuo.
Classe
Um tipo de dados que descreve um objeto. Classes conter dados, e os mtodos para agir
sobre os dados. Para obter mais informaes, consulte Classes.
Construtor
Um mtodo especial em class ou struct que inicializa os objetos do mesmo tipo. Para obter
mais informaes, consulte Construtores.
Delegar
Um representante um tipo que referencia um mtodo. Depois que um representante
atribudo um mtodo, ele funciona exatamente como esse mtodo. Para obter mais
informaes, consulte Representantes.
Classe derivada
Um Classe que usa herana para obter, aumentar, ou modificar o comportamento e dados
de outra classe ' base '. Para obter mais informaes, consulte Herana.
destruidor
Um mtodo especial em ou struct que prepara a instncia para Destruio pelo sistema.
um Classe Para obter mais informaes, consulte Destructors.
Evento
Um membro da OU struct que envia notificaes de alterao. um Classe Para obter mais
informaes, consulte Eventos.
Visual C# Consolidado 299
Campo
Um membro de dados ou struct que acessado diretamente. um Classe
generics
Generics permitir que voc a definir e ou mtodo que so definidas com um parmetro de
tipo. um Classe Quando cdigo cliente instancia o tipo, ele especifica um tipo especfico
como um argumento. Para obter mais informaes, consulte Generics.
IDE
Ambiente de desenvolvimento integrado. O aplicativo que fornece a interface do usurio
unificada para as ferramentas de desenvolvimento vrios incluindo o compilador,
depurador, editor de cdigo, e designers.
Tipo imutvel
Um tipo cujos dados de instncia, campos e propriedades, no altera depois a instncia for
criada. A maioria dos tipos valor so imutveis.
Membro inacessvel
Um membro que no pode ser acessado por um tipo determinado. Um membro inacessvel
para um tipo no necessariamente inacessvel para outro tipo. Para obter mais
informaes, consulte Modificadores de acesso.
Herana
C# herana oferece suporte, para uma Classe que deriva de outra classe, conhecido como
a classe base, herda os mesmos mtodos e propriedades. Herana envolve classes base
e classes derivadas. Para obter mais informaes, consulte Herana.
Interface
Um tipo que contm somente as assinaturas de mtodos pblicos, eventos e
representantes. Um objeto que herda a interface deve implementar todos os mtodos e
eventos definidos na interface. Classes ou estruturas podem herdar qualquer nmero de
interfaces. Para obter mais informaes, consulte Interfaces
iterador
Um iterador um mtodo que permite que os consumidores de uma Classe que contm
uma coleo ou matriz para usar foreach, na referncia (C#) para percorrer essa coleo
ou matriz.
Membro
Um campo, propriedade, mtodo, ou evento declarado no ou struct. um Classe
Mtodo
Um bloco de cdigos nomeado que fornece comportamento para ou struct. um Classe
Tipo mutveis
Um tipo cujos dados de instncia, campos e propriedades, podem ser alteradas aps a
ocorrncia criada. A maioria Tipos de referncia est mutveis.
tipo aninhado
Um tipo declarado na declarao de outro tipo.
object
Uma instncia de um Classe. Um objeto existe na memria, e tem dados e mtodos que
atuam sobre os dados. Para obter mais informaes, consulte Objetos, classes, e Structs.
Propriedade
Visual C# Consolidado 300
Um membro de dados acessado por meio de um acessador. Para obter mais informaes,
consulte Propriedades.
refatorao
Reutilizando anteriormente digitado cdigo. Visual Express Editor cdigo C#
inteligentemente pode reformatar cdigo para, por exemplo, transformar um bloco de
cdigo de realce em um mtodo. Para obter mais informaes, consulte Refatorao.
Tipo de referncia
Um tipo de dados. Uma varivel declarada como um ponto Tipo de referncia para um
local em que os dados so armazenados. Para obter mais informaes, consulte Tipos de
referncia.
static
Existe uma classe ou mtodo declarado como esttico sem primeiro sendo instanciado
usando a palavra-chave
new
. Main() um mtodo esttico. Para obter mais informaes,
consulte Classes estticas e membros de classe estticos.
struct
Um tipo composto dados que normalmente usado para conter algumas variveis que tm
alguma relao lgica. Structs tambm podem conter mtodos e eventos. Structs no
oferecerem suporte herana mas eles fazer suporte interfaces. uma estrutura a Tipo de
valor,. enquanto um Classe um Tipo de referncia Para obter mais informaes, consulte
Structs.
Tipo de valor
Um tipo de valor um tipo de dados que est alocado na pilha, em um tipo de referncia
que alocado em pilha vez. Incluindo o Tipos internas, os tipos numricos, bem como o
tipo estrutura e o tipo anulvel, so todos os tipos valor. O Classe tipo e Seqncia Tipo
so Tipos de referncia. Para obter mais informaes, consulte Tipos valor (referncia C#).
Visual C# Consolidado 301
EXEMPLOS DO VISUAL C#
Voc pode acessar cdigo de exemplo, procurando resumos de Exemplo nesta seo. Cada
abstrato contm um link para abrir ou copiar o Exemplo na arquivos. Alm disso, o SDK do .NET
Framework inclui tecnologia e aplicativo Exemplos e tutoriais QuickStart que demonstram recursos
.NET Framework e cdigo Visual C#.
Os tutoriais QuickStart so a maneira mais rpida para entender o que a tecnologia .NET
Framework oferece desenvolvedores lder-borda. Os QuickStarts so uma srie de exemplos e
suporte documentao projetadas para rapidamente acquaint voc com a sintaxe, arquitetura, e
poder do Visual Studio e o .NET Framework. Do ASP.NET Os tutoriais QuickStart inclui exemplos
na e aplicativos Windows Forms, alm de muitos aplicativos instruo que abrangem os recursos
da tecnologia .NET Framework mais atraentes.
Para acessar o QuickStarts, clique em
Start
, aponte para
Programs
, aponte para
Microsoft
.NET Framework SDK v2.0
, e clique em
QuickStart Tutorials
. Uma pgina da Web do
aplicativo " tutoriais QuickStart SDK Microsoft .NET Framework " exibida. Para executar o
QuickStarts, siga as instrues na pgina, que configura o banco de dados amostras e conclui a
instalao. Para obter mais informaes, consulte Amostras e QuickStarts.
Nesta seo
Exemplos de introduo
Annimo Exemplo
representantes
Demonstra o uso de representantes para reduzir a complexidade de
aplicativos sem nome.
Exemplo matrizes Mostra como usar matrizes.
Coleo Exemplo
classes
Mostra como fazer classes coleo Generic no-que podem ser usados
com a foreach instruo.
Exemplo generics (C#) Mostra como fazer classes a coleo genrica que podem ser usados
com a foreach instruo.
Exemplo de parmetros
da linha de comando
Demonstra simples processamento de linha de comando e matriz
indexao.
Exemplo dos Mtodos
condicional
Demonstra condicionais mtodos, que fornecem um poderoso
mecanismo pelo qual chamadas para mtodos podem ser includos ou
omitido dependendo se um smbolo definido.
Exemplo representantes Mostra como representantes so declaradas, mapeado, e combinados.
Exemplo eventos Mostra como usar eventos em C#.
Exemplo de
implementao de
interface explcita
Demonstra como explicitamente implementar membros de interface.
Visual C# Consolidado 302
Exemplo World de
saudao
Um aplicativo hello world.
Exemplo indexadores Mostra como usar notao de matriz para acessar um objeto.
Indexado Exemplo
propriedades
Mostra como a implementar uma classe que usa propriedades
indexadas. Propriedades indexadas permitem que voc para usar uma
classe que representa uma coleo de vrios tipos diferentes de itens
semelhantes matriz-.
Exemplo propriedades Mostra como propriedades so declaradas e usados; tambm
demonstra propriedades abstratas.
Exemplo Structs Mostra como usar structs em C#.
Exemplo Overloading
do operador
Mostra como definido pelo usurio classes poder sobrecarregar
operadores.
Exemplo Conversions
definidas pelo usurio
Mostra como definir converses de e para tipos definidos pelo usurio.
Exemplo de verso Do override demonstra verso em C# atravs do uso de e new
palavras-chave.
Produzir exemplo Demonstra a palavra-chave rendimento para filtrar itens em uma
coleo.
Exemplos intermedirio e Avanado
Exemplo atributos Mostra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo.
Exemplo parte 1
Interop COM
Mostra como usar C# para interoperar com objetos COM.
Exemplo parte 2
Interop COM
Mostra como um servidor use um C# com um cliente com C++.
Exemplo bibliotecas Mostra como usar opes do compilador para criar uma DLL de vrios
arquivos de origem; alm disso, como usar a biblioteca em outros
programas.
Exemplo anulvel Demonstra tipos de valores que podem ser definidos como nulo.
Exemplo BD OLE Demonstra como usar um banco de dados do Microsoft Access do C#. Ele
mostra como voc pode criar um DataSet e adicionar tabelas a ela a partir
de um banco de dados.
Visual C# Consolidado 303
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke
exemplo
Mostra como chamar exportadas funes DLL do C#.
Exemplo de
segurana
Discute a segurana do .NET Framework e mostra duas maneiras de
modificar as permisses de segurana em C#: Usando classes de
permisso e atributos de permisso.
Segmentao de
exemplo
Demonstra vrias atividades do segmento, como criando e executando um
segmento, sincronizando segmentos, interagir entre segmentos, e usando
um pool de segmentos.
Exemplo de cdigo
no seguros
Mostra como usar ponteiros.
Exemplo de
documentao XML
Mostra como a documentar cdigo usando XML.
Exemplo World de saudao
Download sample
Este Exemplo mostra vrias verses de um programa hello world em C#.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir os arquivos de Exemplo no Solution Explorer
5. Clique em
Download Sample
.
A caixa de mensagem Download de arquivo ser exibida.
6. Clique em
Open
e, na coluna esquerda da pasta CEP, clique em
Extract all files
.
O
Extraction Wizard
abre.
7. Clique em
Next
. Voc pode mudar a pasta os arquivos sero extrados para, ou clique em
Next
novamente.
8. Certifique-se de que a
Show extracted files
caixa de seleo esteja marcada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz a soluo do projeto no confivel. Clique OK para continuar.
Para criar e executar os exemplos hello world no Visual Studio
Visual C# Consolidado 304
17. Abra a soluo (HelloWorld.sln).
18. No
Solution Explorer
, clique com o projeto HelloWorld1, e clique em
Set as
StartUp Project
.
19. No menu
Debug
, clique em
Start Without Debugging
.
20. Pressione qualquer tecla para fechar HelloWorld1.
21. No
Solution Explorer
, clique com o projeto HelloWorld2, e clique em
Set as
StartUp Project
.
22. No menu
Debug
, clique em
Start Without Debugging
.
23. Pressione qualquer tecla para fechar HelloWorld2.
24. No
Solution Explorer
, clique com o projeto HelloWorld3, e clique em
Set as
StartUp Project
.
25. No
Solution Explorer
, clique com o projeto HelloWorld3, e clique em
Properties
.
26. Abra a
Configuration Properties
pasta, e clique em
Debug
.
27. Na
Command Line Arguments
propriedade, tipo
A B C D
e clique em
OK
.
28. No menu
Debug
, clique em
Start Without Debugging
.
29. Pressione qualquer tecla para fechar HelloWorld3.
30. No
Solution Explorer
, clique com o projeto HelloWorld4, e clique em
Set as
StartUp Project
.
31. No menu
Debug
, clique em
Start Without Debugging
.
32. Pressione qualquer tecla para fechar HelloWorld4.
Para criar e executar os exemplos hello world a partir da linha de comando
6. Use o
Change Directory
comando para alterar para o diretrio HelloWorld.
7. Digite o seguinte:
cd HelloWorld1 csc Hello1.cs Hello1
8. Digite o seguinte:
cd ..\HelloWorld2 csc Hello2.cs Hello2
9. Digite o seguinte:
cd ..\HelloWorld3 csc Hello3.cs Hello3 A B C D
10. Digite o seguinte:
cd ..\HelloWorld4 csc Hello4.cs Hello4
Exemplo de parmetros da linha de comando
Download sample
Este Exemplo mostra como a linha de comando pode ser acessada e duas maneiras de acessar a
matriz de parmetros de linha de comando.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
Visual C# Consolidado 305
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
5. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
6. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar os exemplos parmetros de linha de comando no Visual Studio
7. No
Solution Explorer
, clique com o projeto CmdLine1, e clique em
Set as StartUp
Project
.
8. No
Solution Explorer
, clique com o projeto, e clique em
Properties
.
9. Abra a
Configuration Properties
pasta, e clique em
Debug
.
10. Na propriedade
Command Line Arguments
, digite os parmetros da linha de
comando, e clique em
OK
. (Consulte o tutorial para obter um exemplo.)
11. No menu
Debug
, clique em
Start Without Debugging
.
12. Repita as etapas anteriores para CmdLine2.
Para criar e executar os exemplos parmetros de linha de comando a partir da linha de comando
5. Use o
Change Directory
comando para alterar para o diretrio CmdLine1.
6. Digite o seguinte:
csc cmdline1.cs cmdline1 A B C
7. Use o
Change Directory
comando para alterar para o diretrio CmdLine2.
8. Digite o seguinte:
csc cmdline2.cs cmdline2 John Paul Mary
Exemplo matrizes
Download sample
Este Exemplo descreve e mostra como matrizes funcionam em C#. Para obter mais informaes,
consulte Matrizes (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
Visual C# Consolidado 306
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
5. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
6. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo matrizes no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo matrizes a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo verso a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo indexado Propriedades a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo Generics a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo atributos a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Observao
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
Para criar e executar o Exemplo OLE DB a partir da linha de comando
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo YIELD cdigo a partir da linha de comando
3. Use o
Change Directory (cd)
comando para alterar para o
Yield
Diretrio.
4. Digite o seguinte:
csc Yield.cs Yield
Annimo Exemplo representantes
Download sample
Este Exemplo demonstra usar um representante annimo para calcular um bnus do salrio de
um funcionrio. Usar um representante annimo simplifica o programa porque no necessrio
para definir um mtodo separado.
Os dados para cada funcionrio so armazenados em um objeto que contm detalhes pessoais,
bem como um representante que referencia o algoritmo necessrio para calcular o bnus.
Definindo o algoritmo por meio de um representante, o mesmo mtodo pode ser usado para
executar o clculo do bnus, independentemente de como ele realmente calculado. De
anotao, uma varivel local, multiplicador, tambm se torna uma varivel externo capturado
porque ele mencionado em um clculo delegado.
Visual C# Consolidado 329
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
5. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
6. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo de cdigo AnonymousDelegates no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo AnonymousDelegates a partir da linha de comando
3. Use o
Change Directory (cd)
comando para alterar para o diretrio
AnonymousDelegates.
4. Digite o seguinte:
csc AnonymousDelegates.cs AnonymousDelegates
Exemplo tipos parcial
Download sample
Este Exemplo demonstra o uso de tipos parciais que permitem class ou struct para ser definidos
em dois ou mais arquivos C#. Isso permite que vrios programadores para trabalhar em partes
diferentes de uma classe em paralela, e para aspectos diferentes de uma classe complexo a
serem mantidos em arquivos separados.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4. Clique em
Download Sample
.
Visual C# Consolidado 330
A
File Download
caixa de mensagem ser exibida.
5. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
6. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo de cdigo PartialTypes no Visual Studio
No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo PartialTypes a partir da linha de comando
3. Use o
Change Directory (cd)
comando para alterar para o
PartialTypes
Diretrio.
4. Digite o seguinte:
csc PartialTypes.cs PartialTypes
Exemplo anulvel
Download sample
Este Exemplo demonstra o uso de tipos anulveis. Esse recurso permite que tipos de valores para
que um estado no inicializada, ou vazio, semelhante a como tipos de referncia podem ser
definidos como null.
Este Observao de segurana cdigo de Exemplo fornecido para ilustrar um conceito e
no deve ser usado em aplicativos ou sites da Web, como no-pode ilustrar as prticas de
codificao mais segura. Microsoft supe que nenhum RESPONSABILIDADE POR DANOS
INCIDENTAIS OU CONSEQENCIAIS o cdigo do Exemplo deve ser usado para fins diferente
da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4. Clique em
Download Sample
.
A
File Download
caixa de mensagem ser exibida.
5. Clique em
Open
e, na coluna esquerda da janela pasta CEP, clique em
Extract all
files
.
O
Extraction Wizard
abre.
6. Clique em
Next
. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em
Next
novamente.
Certifique-se de que a
Show extracted files
caixa de seleo est selecionada e clique
em
Finish
.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar o Exemplo Nullable cdigo no Visual Studio
Visual C# Consolidado 331
3. Abra Nullable.sln, o arquivo de soluo, o clicando duas vezes no arquivo no Windows
Explorer, ou clicando
Open
no menu
File
.
4. No menu
Debug
, clique em
Start Without Debugging
.
Para criar e executar o Exemplo de cdigo Nullable a partir da linha de comando
3. Use o
Change Directory (cd)
comando para alterar para o diretrio Nullable.
4. Digite o seguinte:
csc Nullable.cs Nullable
Visual C# Consolidado 332
Como Fazer em C#
http://msdnwiki.microsoft.com/pt-br/mtpswiki/ms186211.aspx
Como Fazer sua porta de entrada para tpicos-chave baseados em tarefas sobre programao
e desenvolvimento de aplicativos em C#. As categorias essenciais sobre o que voc pode fazer
com C# esto listadas neste tpico. Os links fornecem referncias para pginas de ajuda
importantes baseadas em procedimento.
A Linguagem C#
Especificao da Linguagem C# ... Threading Genricos... Trechos de Cdigo
Exemplos mais
O Framework .NET
Entrada e Sada em Arquivos Strings Colees Serializao Componentes
Mdulos (assemblies) e Domnios de Aplicativo mais
Aplicativos do Windows
Criando Aplicativos do Windows ControlesWindows Forms Desenhando mais
Pginas Web e Web Services
Pages Web do ASP.NET XML Web Services mais
Depurao
Usando o Depurador VS Classe Trace .Framework NET Depurao de Transaes
SQL mais
Accesso a Dados
Conectando a Fontes de Dados O SQL Server... Vinculao de Dados mais
Criando Classes
Class Designer... Trabalhando com Classes e Outros Tipos... Criando e Modificando
Membros-tipo... Linhas-mestras para a Criao de Bibliotecas de Classes mais
Segurana
Segurana no Acesso ao Cdigo Prticas Recomendadas de Poltica de Segurana
Conjuntos de Permisses mais
Programao do Office
Programao do Office Controles Word Excel mais
Dispositivos Inteligentes
Visual C# Consolidado 333
O que h de novo em Projetos para Dispositivos Inteligentes... Programao para
Dispositivos Inteligentes... Depurao em Dispositivos Inteligentes... mais
Implantao
ClickOnce O Windows Installer
Visual C# Consolidado 334
Linguagem C# (como eu fao em C#)
Esta pgina possui links para ajud-lo com tarefas frequentemente executadas na linguagem C#.
Para ver outras categorias de tarefas populares abordadas na ajuda, consulte Como eu fao em
C#.
A linguagem C#
O que h de novo na linguagem e no compilador C# 2.0
Contm informaes sobre os novos recursos, incluindo classes genricas, iteradores,
mtodos annimos e tipos parciais.
Usando o Starter Kit para C#
Explica como carregar e compilar um Starter Kit no Visual C#.
Especificao da linguagem C#
Ponteiros para a verso mais recente da especificao em formato Microsoft Word.
Linha de comando
Main() e argumentos de linha de comando (Guia de programao C#)
Explica o mtodo Main, o ponto de entrada do seu programa, onde voc cria objetos e
chama outros mtodos. S pode haver um ponto de entrada em um programa C#.
COMO: Acessar argumentos de linha de comando usando foreach (Guia de programao C#)
Fornece um exemplo de cdigo que mostra como acessar os parmetros da linha de
comando.
COMO: Exibir argumentos de linha de comando (Guia de programao C#)
Explica como exibir argumentos de linha de comando atravs do vetor de seqncias
args.
Main() retorna valores (Guia de programao C#)
Explica os possveis valores retornados pelo mtodo principal.
Classes e herana
Base (Referncia C#)
Explica como especificar o construtor da classe base chamado ao criar instncias de uma
classe derivada.
COMO: Saber as diferenas entre passar uma estrutura e passar uma referncia de classe para
um mtodo (Guia de programao C#)
Contm um exemplo de cdigo que mostra que quando uma estrutura (struct) passada
para um mtodo, uma cpia da estrutura passada, mas quando uma instncia de classe
passada, uma referncia passada.
Visual C# Consolidado 335
Construtores de instncia (Guia de programao C#)
Explica construtores de classe e herana.
Propriedades
COMO: Declarar e usar propriedades de leitura/escrita (Guia de programao C#)
Contm um exemplo que mostra como declarar e usar propriedades de leitura/escrita.
COMO: Definir propriedades abstratas (Guia de programao C#)
Contm um exemplo de cdigo que mostra como definir propriedades abstratas.
Eventos
COMO: Criar um controle que responde a eventos (Guia de programao C#)
Contm um exemplo de cdigo que mostra uma classe, ListWithChangedEvent, que
semelhante classe padro ArrayList mas tambm chama um evento Changed sempre
que o contedo da lista alterado.
COMO: Criar eventos que estejam de acordo com as diretrizes do .NET Framework (Guia de
programao C#)
Contm um exemplo que cria um controle que responde a eventos, seguindo as
orientaes das .NET Framework Guidelines.
COMO: Declarar um evento em uma interface e implement-lo em uma classe (Guia de
programao C#)
Mostra que possvel declarar um evento em uma interface e implement-lo em uma
classe.
COMO: Usar um dicionrio para armazenar instncias de eventos (Guia de programao C#)
Explica como usar uma tabela de hash para armazenar as instncias de eventos.
COMO: Implementar duas interfaces que possuam um evento com o mesmo nome (Guia de
programao C#)
Explica a situao onde voc implementa duas interfaces, cada uma com um evento com o
mesmo nome. Nesse caso, voc deve usar uma propriedade de evento explicitamente de
implementao.
COMO: Criar manipuladores de evento no Visual C# Code Editor (Guia de programao C#)
Oferece uma maneira fcil para criar manipuladores de eventos para seus Windows Forms
quando no modo de design. A alternativa exibir o cdigo fonte no modo de exibio
Source e adicionar o manipulador de eventos no cdigo.
Interfaces
COMO: Implementar explicitamente membros de uma interface (Guia de programao C#)
Mostra como declarar uma classe que explicitamente implementa uma interface e como
acessar seus membros atravs da instncia da interface.
Visual C# Consolidado 336
COMO: Implementar explicitamente membros de uma interface com herana (Guia de
programao C#)
Fornece um exemplo que exibe as dimenses de uma caixa em unidades mtrica e do
sistema ingls.
Classes Genricas
Uma introduo ao Generics C#
Descreve como classes genricas permitem que voc defina classes de coleo que so
fortemente tipadas (Type-Safe). Voc implementa a classe genrica somente uma vez,
mas voc pode declar-la e us-la com qualquer tipo.
Classes genricas no .NET Framework
Explica os recursos e o uso do novo conjunto de colees genricas no espao de nomes
System.Collections.Generic.
A palavra-chave default em cdigo fonte "genrico" (Guia de programao C#)
Fornece um exemplo de cdigo que demonstra como usar a palavra-chave default para
tipo parmetros.
Mtodos genricos (Guia de programao C#)
Apresenta a sintaxe para declarar um mtodo genrico. E tambm mostra um exemplo de
como usar mtodos genricos em um aplicativo.
Restries em parmetros de tipo (Guia de programao C#)
Mostra como restringir parmetros de tipo para permitir o acesso a mtodos e
propriedades dos tipos usados para instanciar a classe genrica.
Representantes genricos (Guia de programao C#)
Contm a sintaxe para declarar representantes (delegates) genricos. E tambm inclui
comentrios importantes sobre como instanciar e usar representantes genricos, assim
como exemplos de cdigo.
Espaos de nomes
COMO: Usar o qualificador de espao de nomes Alias (Guia de programao C#)
Discute a capacidade de acessar um membro no espao de nomes global quando o
membro pode estar oculto por outra entidade com o mesmo nome.
Iteradores
COMO: Criar um bloco iterador para uma lista genrica (Guia de programao C#)
Fornece um exemplo onde um vetor de inteiros usado para criar a lista SampleCollection.
Um lao for itera atravs da coleo e produz o valor de cada item. Depois um lao
foreach usado para exibir os itens da coleo.
COMO: Criar um bloco iterador para uma lista genrica (Guia de programao C#)
Visual C# Consolidado 337
Fornece um exemplo onde uma classe genrica Stack<T> implementa uma interface
genrica IEnumerator<T>. Um vetor de T tipo declarado e a ele so atribudos valores
usando o mtodo Push. No mtodo GetEnumerator, os valores do vetor so retornados
usando a instruo de retorno yield.
Representantes (Delegates)
COMO: Combinar representantes (Representantes Multicast) (Guia de programao C#)
Fornece um exemplo que demonstra como compor representantes de difuso seletiva.
COMO: Declarar, instanciar e usar um representante (Guia de programao C#)
Fornece um exemplo que ilustra como declarar, criar e usar um representate (delegate).
Sobrecarga de operador
COMO: Usar sobrecarga de operador para criar uma classe para nmeros complexos (Guia de
programao C#)
Mostra como voc pode utilizar sobrecarga de operador para criar uma classe para
nmeros complexos chamada Complex e que define adio de complexos.
Interoperabilidade
COMO: Usar interoperabilidade COM para verificar ortografia usando o Word (Guia de
programao C#)
Este exemplo ilustra como usar o verificador ortogrfico do Word em um aplicativo C#.
COMO: Usar interoperabilidade COM para criar uma planilha do Excel (Guia de programao C#)
Este exemplo ilustra como abrir uma planilha j existente do Excel em C# usando
funcionalidades de interoperabilidade COM no .NET Framework.
COMO: Usar cdigo gerenciado como um suplemento de automao para o Excel (Guia de
programao C#)
Este exemplo ilustra como criar um suplemento C# para calcular taxa de imposto de renda
em uma clula em uma planilha do Excel.
COMO: Usar servios de chamada da plataforma para reproduzir um arquivo WAVE (Guia de
programao C#)
Este exemplo ilustra como usar servios de chamada da plataforma para reproduzir um
arquivo de som wave na plataforma Windows.
Cdigo no gerenciado
COMO: Usar ponteiros para copiar um vetor de bytes (Guia de programao C#)
Mostra como usar ponteiros para copiar bytes de um vetor para outro, usando ponteiros.
COMO: Usar a funo ReadFile do Windows (Guia de programao C#)
Mostra como chamar a funo ReadFile do Windows, que requer o uso de um contexto
no gerenciado pois o buffer de leitura requer um ponteiro como parmetro.
Visual C# Consolidado 338
Lidando com threads
Usando segmentos e Threading
Fornece uma lista de tpicos que abordam a criao e o gerenciamento de threads
gerenciados e como evitar conseqncias no intencionais.
COMO: Criar e terminar threads (Guia de programao C#)
Fornece um exemplo que demonstra como criar e iniciar uma thread e mostra a interao
entre duas threads em execuo simultnea dentro do mesmo processo.
COMO: Sincronizar uma thread Produtor e uma thread Consumidor (Guia de programao C#)
Fornece um exemplo que mostra como sincronizao pode ser feita usando a palavra-
chave lock de C# e o mtodo Pulse do objeto Monitor.
COMO: Usar um pool de threads (Guia de programao C#)
Explica um exemplo que mostra como usar um pool de threads.
Seqncias de caracteres
COMO: Pesquisar em seqncias de caracteres utilizando expresses regulares (Guia de
programao C#)
Explica como a classe Regex pode ser usada para procurar em seqncias. Essas
pesquisas podem variar em complexidade de muito simples a fazer uso total de
expresses regulares.
COMO: Unir vrias seqncias de caracteres (Guia de programao C#)
Contm um exemplo que demonstra como unir vrias seqncias de caracteres.
COMO: Pesquisar em seqncias de caracteres utilizando mtodos de String (Guia de
programao C#)
Contm um exemplo de cdigo que demonstra como usar mtodos de String para procurar
em uma seqncia.
COMO: Analisar seqncias usando o mtodo Split (Guia de programao C#)
Contm um exemplo de cdigo que demonstra como uma seqncia pode ser analisada
usando o mtodo System.String.Split.
Atributos
COMO: Criar uma unio C/C++ usando atributos (Guia de programao C#)
Contm um exemplo que usa o atributo serializable para aplicar uma caracterstica
especfica a uma classe.
Trabalhando com DLLs
COMO: Criar e usar DLLs em C# (Guia de programao C#)
Demonstra a criao e o uso de uma DLL, usando um cenrio de exemplo.
Visual C# Consolidado 339
Mdulos (assemblies)
COMO: Determinar se um arquivo um mdulo (assembly) (Guia de programao C#)
Contm um exemplo que testa uma DLL para verificar se ela um mdulo (assembly).
COMO: Carregar e descarregar mdulos (assemblies) (Guia de programao C#)
Explica como possvel carregar mdulos (assemblies) especficos no domnio de
aplicao atual em tempo de execuo.
COMO: Compartilhar um mdulo (assembly) com outros aplicativos (Guia de programao C#)
Explica como compartilhar um assembly com outros aplicativos.
Domnios de aplicao
Executar cdigo em outro domnio de aplicao (Guia de programao C#)
Mostra como executar um assembly que tenha sido carregado de outro domnio de
aplicao.
COMO: Criar e usar um domnio de aplicao (Guia de programao C#)
Mostra como a sobrecarga de operador pode ser usada para implementar um tipo lgico
tri-valorado.
Amostras
Exemplos no Visual C#
Contm links para abrir ou copiar arquivos dos exemplos que vo de Exemplo de Hello
World at Exemplo de classes genricas (C#).
Visual C# Consolidado 340
O que h de novo na C# 2.0 idioma e Compiler
Com o lanamento do Visual Studio 2005, a linguagem C# foi atualizada para verso 2.0, que
oferece suporte os seguintes recursos novos:
O compilador C# apresenta os seguintes adies e alteraes para esta verso:
Opo /errorreport
Pode ser usado para relatar erros de compilador interno Microsoft atravs da Internet.
Opo /incremental
Foi removido.
e /keycontainer/KeyFile Opes
Oferecer suporte especificao chaves criptogrficas.
Opo /langversion
Pode ser usado para especificar compatibilidade com uma verso especfica do idioma.
Opo /linkresource
Contm opes adicionais.
Opo /moduleassemblyname
Permite que voc se criar um.netmodule tipos de arquivo e acesso no-pblicos em um
conjunto existente.
Opo /PDB
Especifica o nome e local do arquivo.pdb.
Opo /Platform
Permite que voc para arquiteturas Family (IPF) Itanium e x 64 de destino.
Aviso # pragma
Usado para desativar e ativar individuais avisos no cdigo.
Usando Starter Kits C#
Um Starter Kit um aplicativo completo e independente pronto para voc carregar e compilar. Um
Starter Kit vem com sua prpria documentao, incluindo descries de tcnicas de programao,
e sugestes para como ele pode ser personalizado. Starter Kit uma maneira excelente de ver
um aplicativo C# que funciona em ao.
Para carregar e compilar um Starter Kit Visual C#
1. No menu File, clique em New Project.
Visual C# Consolidado 341
A caixa de dilogo New Project ser exibida. Esta caixa de dilogo lista os diferentes tipos
de aplicativos padro que Visual C# pode criar.
2. Selecione um tipo de aplicativo Starter Kit, e clique em OK.
O Starter Kit carregado no Visual C#.
3. Para compilar e iniciar o projeto Starter Kit, pressione F5.
Especificao da Linguagem C#
As verses 1.2 e 2.0 das especificaes da linguagem C# so a fonte autorizada de gramtica e
sintaxe C#. Elas contm informaes detalhadas sobre todos os aspectos da linguagem, incluindo
muitos pontos no abordados na documentao do produto Visual C#.
A especificao 1.2 discute recursos que foram adicionados para a linguagem antes do Visual C#
2005 e a especificao 2.0 discute recursos que foram adicionados para o Visual C# 2005.
As especificaes da linguagem C# esto disponveis no formato Microsoft Word nos seguintes
locais:
No MSDN Online em
http://msdn.microsoft.com/vcsharp/Programming/Language/default.aspx
Ele declarado dentro de uma classe ou estrutura. Ele deve ser esttico (static) e ele no
deve ser pblico. (No exemplo acima, como no especificamos um modificador de acesso
explicitamente, ele recebe o modificador de acesso padro, que (private) particular).
Parmetros podem ser lidos como argumentos de linha de comando indexados a partir do
zero.
Chamar um mtodo na classe base que tenha sido substitudo por outro mtodo.
Visual C# Consolidado 344
Especificar o construtor de classe base deve ser chamado ao criar instncias da classe
derivada.
Um acesso classe base permitido somente em um construtor, um mtodo da instncia, ou um
assessor propriedade da instncia.
Ele um erro para usar a base palavra de dentro de um mtodo esttico.
Exemplo
Neste exemplo, dois a classe base, Person,. e a classe, Employee, tem um mtodo chamado
Getinfo derivado Usando a base palavra-chave, possvel para chamar o Getinfo mtodo na
classe base, de dentro da classe derivada.
// keywords_base.cs // Accessing base class members using System; public class Person { protected string
ssn = "444-55-6666"; protected string name = "John L. Malgraine"; public virtual void GetInfo() {
Console.WriteLine("Name: {0}", name); Console.WriteLine("SSN: {0}", ssn); } } class Employee : Person {
public string id = "ABC567EFG"; public override void GetInfo() { // Calling the base class GetInfo method:
base.GetInfo(); Console.WriteLine("Employee ID: {0}", id); } } class TestClass { static void Main() {
Employee E = new Employee(); E.GetInfo(); } }
Este exemplo mostra como para especificar o construtor de classe base chamado quando criar
instncias de uma classe derivada.
// keywords_base2.cs using System; public class BaseClass { int num; public BaseClass() {
Console.WriteLine("in BaseClass()"); } public BaseClass(int i) { num = i; Console.WriteLine("in
BaseClass(int i)"); } public int GetNum() { return num; } } public class DerivedClass : BaseClass { // This
constructor will call BaseClass.BaseClass() public DerivedClass() : base() { } // This constructor will call
BaseClass.BaseClass(int i) public DerivedClass(int i) : base(i) { } static void Main() { DerivedClass md = new
DerivedClass(); DerivedClass md1 = new DerivedClass(1); } }
Sada
Name: John L. Malgraine SSN: 444-55-6666 Employee ID: ABC567EFG
Para obter exemplos adicionais, consulte Novo, virtual. e Substituir
Sada
in BaseClass() in BaseClass(int i)
Especificao da Linguagem C#
Para obter mais informaes, consulte as sees a seguir no Especificao da Linguagem C#:
Quando declarar uma propriedade abstrata (tais como Area, neste exemplo), voc
simplesmente indicar que assessores Propriedade esto disponveis, mas no fazer
implement-las. Neste exemplo, apenas um Obter acessador est disponvel, portanto a
propriedade somente leitura.
O cdigo a seguir mostra as trs subclasses da Shape e como elas substituiro a Area propriedade
para fornecer seus prprios implementao.
C#
// compile with: csc /target:library /reference:abstractshape.dll shapes.cs public class Square : Shape {
private int m_side; public Square(int side, string id) : base(id) { m_side = side; } public override double Area
{ get { // Given the side, return the area of a square: return m_side * m_side; } } } public class Circle : Shape
{ private int m_radius; public Circle(int radius, string id) : base(id) { m_radius = radius; } public override
double Area { get { // Given the radius, return the area of a circle: return m_radius * m_radius *
System.Math.PI; } } } public class Rectangle : Shape { private int m_width; private int m_height; public
Rectangle(int width, int height, string id) : base(id) { m_width = width; m_height = height; } public override
double Area { get { // Given the width and height, return the area of a rectangle: return m_width * m_height;
} } }
Visual C# Consolidado 350
O cdigo a seguir mostra um programa de teste que cria um nmero de Shape-derivado objetos e
imprime suas reas.
C#
// compile with: csc /reference:abstractshape.dll;shapes.dll shapetest.cs class TestClass { static void Main() {
Shape[] shapes = { new Square(5, "Square #1"), new Circle(3, "Circle #1"), new Rectangle( 4, 5, "Rectangle
#1") }; System.Console.WriteLine("Shapes Collection"); foreach (Shape s in shapes) {
System.Console.WriteLine(s); } } }
Sada
Shapes Collection Square #1 Area = 25.00 Circle #1 Area = 28.27 Rectangle #1 Area = 20.00
COMO: Criar um controle que responde a eventos (Guia de programao C#)
A Classe, ListWithChangedEvent, que mostra o exemplo simples a seguir o contedo da lista a
alterao semelhante para a classe padro ArrayList mas tambm chama. sempre que um
Changed Evento Tal uma classe de propsito geral pode ser usado de vrias maneiras em um
programa grande.
Por exemplo, um processador de texto pode manter uma lista dos documentos abertos. Sempre
que esta alteraes da lista, muitos objetos diferentes no Processador de Texto talvez tenha que
ser notificado para que a interface do usurio pode ser atualizada. Usando eventos, o cdigo que
mantm a lista de documentos no precisa saber quem precisa ser notificado aps a lista de
documentos alterada, o evento chamado automaticamente e cada objeto que precisa para ser
notificado corretamente notificado. Usando eventos, a modularidade do programa aumentada.
Quando criar um componente geral que pode ser usado como uma classe base para outros
componentes, voc deve conta para o fato de que eventos, diferentemente de campos, s podem
ser chamados de dentro da classe que declarado-los. Classes derivadas diretamente no
possvel chamar eventos declarados na classe base. Embora esse seja o que for desejado, s
vezes geralmente apropriado para dar a classe derivada liberdade para chamar o evento. Isso
geralmente feito criando um mtodo protegido chamado para o evento. Ao chamar esse mtodo
chamado, classes derivadas podem chamar o evento. Para obter ainda mais flexibilidade, o
mtodo chamado geralmente declarado como virtual, que permite a classe derivada para
substitu-lo. Isso permite que a classe derivada para interceptar os eventos que a classe base
chamar, possivelmente fazendo seu prprio processamento de-los.
No exemplo a seguir, isso foi feito com o OnChanged mtodo. Uma classe derivada chamar ou
substituir esse mtodo se necessrio.
Uma outra diferena entre eventos e campos que um evento pode ser colocado em uma
interface enquanto no um campo. Ao implementar a interface, a classe implementao deve
fornecer um evento correspondente na classe que implementa a interface.
Exemplo
C#
namespace TestCollections { // A delegate type for hooking up change notifications. public delegate void
ChangedEventHandler(object sender, System.EventArgs e); // A class that works just like ArrayList, but
sends event // notifications whenever the list changes. public class ListWithChangedEvent :
System.Collections.ArrayList { // An event that clients can use to be notified whenever the // elements of the
list change. public event ChangedEventHandler Changed; // Invoke the Changed event; called whenever list
changes protected virtual void OnChanged(System.EventArgs e) { if (Changed != null) { Changed(this, e); } }
Visual C# Consolidado 351
// Override some of the methods that can change the list; // invoke event after each public override int
Add(object value) { int i = base.Add(value); OnChanged(System.EventArgs.Empty); return i; } public
override void Clear() { base.Clear(); OnChanged(System.EventArgs.Empty); } public override object this[int
index] { set { base[index] = value; OnChanged(System.EventArgs.Empty); } } } } namespace TestEvents {
using TestCollections; class EventListener { private ListWithChangedEvent m_list; public
EventListener(ListWithChangedEvent list) { m_list = list; // Add "ListChanged" to the Changed event on
m_list: m_list.Changed += new ChangedEventHandler(ListChanged); } // This will be called whenever the
list changes. private void ListChanged(object sender, System.EventArgs e) { System.Console.WriteLine("This
is called when the event fires."); } public void Detach() { // Detach the event and delete the list
m_list.Changed -= new ChangedEventHandler(ListChanged); m_list = null; } } class Test { // Test the
ListWithChangedEvent class. static void Main() { // Create a new list. ListWithChangedEvent list = new
ListWithChangedEvent(); // Create a class that listens to the list's change event. EventListener listener = new
EventListener(list); // Add and remove items from the list. list.Add("item 1"); list.Clear(); listener.Detach(); }
} }
Sada
This is called when the event fires. This is called when the event fires.
Programao robusta
Declarar um evento
Para declarar um evento dentro uma classe, primeiro um Delegar tipo para o evento deve ser
declarado, se nenhum j est declarado.
C#
public delegate void ChangedEventHandler(object sender, System.EventArgs e);
O tipo delegate define o conjunto de argumentos que so passados para o mtodo que
manipula o evento. Vrios eventos podem compartilhar o mesmo tipo delegate, portanto, essa
etapa s necessria se nenhum tipo delegate adequado j tiver sido declarado.
Em seguida, o evento prprio est declarado.
C#
public event ChangedEventHandler Changed;
Um evento declarado como um campo de um tipo delegate, exceto que precede a
declarao de evento, seguindo os modificadores palavra-chave Evento. Eventos geralmente
so declarados Pblica, mas qualquer modificador de acessibilidade permitido.
Chamar um evento
Depois que uma classe tenha declarado um evento, ele pode tratar desse evento exatamente
como um campo do tipo delegate indicado. O campo ou ser nulo, se nenhum cliente tiver
conectado um representante para o evento, ou ento se refere a um representante que deve
ser chamado quando o evento chamado. Assim, chamar um evento geralmente isso, primeiro
verificando nulo e depois chamar o evento.
C#
if (Changed != null) { Changed(this, e); }
Chamar um evento s pode ser feito de dentro da classe que declarado o evento.
Conectando backup a um evento
Visual C# Consolidado 352
De fora a classe que declarado-lo, um evento parece um campo, mas acesso a esse campo
bastante restrito. Somente as coisas que podem ser causadas so Redigir novo representante
para aquele campo, e removendo um representante de um campo (possivelmente composto).
Isso feito com e -= operadores. o += Para comear a receber chamadas de eventos, cdigo
de cliente primeiro cria um representante do tipo de evento que se refere ao mtodo que deve
ser chamado a partir do evento. Depois ele composes esse representante para qualquer outros
representantes que o evento pode estar conectado ao uso +=.
C#
m_list.Changed += new ChangedEventHandler(ListChanged);
Quando o cdigo do cliente feito recebimento invocaes de eventos, ele remove seu
representante a partir do evento usando operador -=.
C#
m_list.Changed -= new ChangedEventHandler(ListChanged);
COMO: Criar eventos que estejam de acordo com as diretrizes do .NET Framework (Guia de
programao C#)
Permite a linguagem C# para usar qualquer Delegar Tipo, mas o .NET Framework tem mais
estrita diretrizes para representantes e eventos. um Evento Caso voc pretenda para o
componente a ser usado com o .NET Framework, voc provavelmente ser deseja siga estas
diretrizes.
As diretrizes .NET Framework indicar que o tipo delegate usado para um evento deve tomar dois
parmetros: um Objeto de origem parmetro que indica a fonte de evento, e um parmetro
eventos especficos que encapsula qualquer informao adicional sobre o evento. O parmetro
eventos especficos deve derivar da classe EventArgs. Para eventos que no usam qualquer
informao adicional, o .NET Framework fornece a EventHandler classe.
O exemplo a seguir como o cdigo em COMO: Criar um controle que responde a eventos (Guia
de programao C#), exceto que esta verso segue as diretrizes .NET Framework.
Exemplo
C#
namespace TestCollections { // A class that works just like ArrayList, but sends event // notifications
whenever the list changes: public class ListWithChangedEvent : System.Collections.ArrayList { // An event
that clients can use to be notified whenever the // elements of the list change: public event
System.EventHandler Changed; // Invoke the Changed event; called whenever list changes: protected virtual
void OnChanged(System.EventArgs e) { if (Changed != null) { Changed(this, e); } } // Override some of the
methods that can change the list; // invoke event after each: public override int Add(object value) { int i =
base.Add(value); OnChanged(System.EventArgs.Empty); return i; } public override void Clear() {
base.Clear(); OnChanged(System.EventArgs.Empty); } public override object this[int index] { set {
base[index] = value; OnChanged(System.EventArgs.Empty); } } } } namespace TestEvents { using
TestCollections; class EventListener { private ListWithChangedEvent m_list; public
EventListener(ListWithChangedEvent list) { m_list = list; // Add "ListChanged" to the Changed event on
m_list: m_list.Changed += new System.EventHandler(ListChanged); } // This will be called whenever the
list changes: private void ListChanged(object sender, System.EventArgs e) { System.Console.WriteLine("This
is called when the event fires."); } public void Detach() { // Detach the event and delete the list:
m_list.Changed -= new System.EventHandler(ListChanged); m_list = null; } } class Test { // Test the
Visual C# Consolidado 353
ListWithChangedEvent class: static void Main() { // Create a new list: ListWithChangedEvent list = new
ListWithChangedEvent(); // Create a class that listens to the list's change event: EventListener listener =
new EventListener(list); // Add and remove items from the list: list.Add("item 1"); list.Clear();
listener.Detach(); } } }
Sada
This is called when the event fires. This is called when the event fires.
COMO: Declarar um evento em uma interface e implement-lo em uma classe (Guia de
programao C#)
Este exemplo mostra que possvel para declarar um Evento. No e implement-lo em um
Interface um Classe
Exemplo
C#
public delegate void TestDelegate(); // delegate declaration public interface ITestInterface { event
TestDelegate TestEvent; void FireAway(); } public class TestClass : ITestInterface { public event TestDelegate
TestEvent; public void FireAway() { if (TestEvent != null) { TestEvent(); } } } public class MainClass { static
private void F() { System.Console.WriteLine("This is called when the event fires."); } static void Main() {
ITestInterface i = new TestClass(); i.TestEvent += new TestDelegate(F); i.FireAway(); } }
COMO: Usar um dicionrio para armazenar instncias de eventos (Guia de programao C#)
Um uso para accessor-declarations para expor um grande nmero de eventos sem alocando
um campo para cada evento, mas em vez disso, usar um dicionrio para armazenar as instncias
de eventos. S til se voc tiver um nmero muito grande de eventos, mas voc espera que a
maioria dos eventos no ser implementada.
Exemplo
C#
public delegate void Delegate1(int i); public delegate void Delegate2(string s); public class
PropertyEventsSample { private System.Collections.Generic.Dictionary<string, System.Delegate>
eventTable; public PropertyEventsSample() { eventTable = new
System.Collections.Generic.Dictionary<string, System.Delegate>(); eventTable.Add("Event1", null);
eventTable.Add("Event2", null); } public event Delegate1 Event1 { add { eventTable["Event1"] =
(Delegate1)eventTable["Event1"] + value; } remove { eventTable["Event1"] =
(Delegate1)eventTable["Event1"] - value; } } public event Delegate2 Event2 { add { eventTable["Event2"] =
(Delegate2)eventTable["Event2"] + value; } remove { eventTable["Event2"] =
(Delegate2)eventTable["Event2"] - value; } } internal void FireEvent1(int i) { Delegate1 D; if (null != (D =
(Delegate1)eventTable["Event1"])) { D(i); } } internal void FireEvent2(string s) { Delegate2 D; if (null != (D =
(Delegate2)eventTable["Event2"])) { D(s); } } } public class TestClass { public static void
Delegate1Method(int i) { System.Console.WriteLine(i); } public static void Delegate2Method(string s) {
System.Console.WriteLine(s); } static void Main() { PropertyEventsSample p = new
PropertyEventsSample(); p.Event1 += new Delegate1(TestClass.Delegate1Method); p.Event1 += new
Delegate1(TestClass.Delegate1Method); p.Event1 -= new Delegate1(TestClass.Delegate1Method);
p.FireEvent1(2); p.Event2 += new Delegate2(TestClass.Delegate2Method); p.Event2 += new
Visual C# Consolidado 354
Delegate2(TestClass.Delegate2Method); p.Event2 -= new Delegate2(TestClass.Delegate2Method);
p.FireEvent2("TestString"); } }
Sada
2 TestString
COMO: Implementar duas interfaces que possuam um evento com o mesmo nome (Guia de
programao C#)
Outro uso para Evento Propriedades aborda a situao onde voc estiver implementando duas
interfaces, cada um com um evento com o mesmo nome. Nesse caso, voc deve usar uma
propriedade de evento explicitamente de implementao.
No entanto, ao explicitamente implementar eventos na interface, voc precisar fornecer adicionar
e remover mtodos.
Exemplo
C#
public delegate void Delegate1(); public delegate int Delegate2(string s); public interface I1 { event Delegate1
TestEvent; } public interface I2 { event Delegate2 TestEvent; } public class ExplicitEventsSample : I1, I2 {
public event Delegate1 TestEvent; // normal implementation of I1.TestEvent. private Delegate2
TestEvent2Storage; // underlying storage for I2.TestEvent. event Delegate2 I2.TestEvent // explicit
implementation of I2.TestEvent. { add { TestEvent2Storage += value; } remove { TestEvent2Storage -=
value; } } private void FireEvents() { if (TestEvent != null) { TestEvent(); } if (TestEvent2Storage != null) {
TestEvent2Storage("hello"); } } }
COMO: Criar manipuladores de evento no Visual C# Code Editor (Guia de programao C#)
O Editor de Cdigo Visual C# oferece uma maneira fcil de criar manipuladores de eventos para o
Windows Forms enquanto trabalha no modo Design. A alternativa exibir o cdigo fonte no modo
de exibio Source e adicionar o manipulador de eventos no cdigo.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Visual Studio configuraes.
Para criar um manipulador de eventos usando o Editor de Cdigo Visual C#
1. Se clique com o boto direito do mouse no formulrio ou controle para o qual voc deseja
criar um manipulador de eventos, e selecione Properties. no estiver visvel, no modo
Design, o Properties Window
2. Na parte superior da Properties Window, clique no boto Events.
3. Clique duas vezes no evento que voc deseja criar, por exemplo o evento Load.
Visual C# Cria um mtodo do manipulador de evento vazio e adiciona-o para o seu cdigo.
Como alternativa voc pode adicionar o cdigo em mos no modo de exibio de cdigo.
Por exemplo as seguintes linhas de cdigo declarar um manipulador de eventos de carga
para uma Form classe chamada Form1.
Visual C# Consolidado 355
C#
private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling
code here. }
COMO: Implementar explicitamente membros de uma interface (Guia de programao C#)
Este exemplo declara um Interface, IDimensions, e uma classe, Box., explicitamente que
implementa os membros getLength de interface e getWidth Os membros so acessados atravs a
instncia dimensions interface.
Exemplo
C#
interface IDimensions { float getLength(); float getWidth(); } class Box : IDimensions { float lengthInches;
float widthInches; Box(float length, float width) { lengthInches = length; widthInches = width; } // Explicit
interface member implementation: float IDimensions.getLength() { return lengthInches; } // Explicit
interface member implementation: float IDimensions.getWidth() { return widthInches; } static void Main() {
// Declare a class instance box1: Box box1 = new Box(30.0f, 20.0f); // Declare an interface instance
dimensions: IDimensions dimensions = (IDimensions)box1; // The following commented lines would
produce compilation // errors because they try to access an explicitly implemented // interface member from
a class instance: //System.Console.WriteLine("Length: {0}", box1.getlength());
//System.Console.WriteLine("Width: {0}", box1.getwidth()); // Print out the dimensions of the box by
calling the methods // from an instance of the interface: System.Console.WriteLine("Length: {0}",
dimensions.getLength()); System.Console.WriteLine("Width: {0}", dimensions.getWidth()); } }
Sada
Length: 30 Width: 20
Programao robusta
Observe tambm que as seguintes linhas no mtodo Main, e com xito imprima as
dimenses da caixa porque os mtodos esto sendo chamados de uma instncia da interface:
C#
System.Console.WriteLine("Length: {0}", dimensions.getLength()); System.Console.WriteLine("Width:
{0}", dimensions.getWidth());
COMO: Implementar explicitamente membros de uma interface com herana (Guia de
programao C#)
Implementao explcita Interface tambm permite que o programador para implementar duas
interfaces que tm os mesmos nomes membro e concedidos aos membros interface uma
implementao separada. Este exemplo exibe as dimenses de uma caixa na mtrica e unidades
em ingls. As Box Classe interfaces IEnglishDimensions implementa dois e IMetricDimensions, que
Visual C# Consolidado 356
representam os sistemas de medida diferente. As duas interfaces ter nomes idnticos membro,
Length e Width.
Exemplo
C#
// Declare the English units interface: interface IEnglishDimensions { float Length(); float Width(); } //
Declare the metric units interface: interface IMetricDimensions { float Length(); float Width(); } // Declare
the Box class that implements the two interfaces: // IEnglishDimensions and IMetricDimensions: class Box :
IEnglishDimensions, IMetricDimensions { float lengthInches; float widthInches; public Box(float length,
float width) { lengthInches = length; widthInches = width; } // Explicitly implement the members of
IEnglishDimensions: float IEnglishDimensions.Length() { return lengthInches; } float
IEnglishDimensions.Width() { return widthInches; } // Explicitly implement the members of
IMetricDimensions: float IMetricDimensions.Length() { return lengthInches * 2.54f; } float
IMetricDimensions.Width() { return widthInches * 2.54f; } static void Main() { // Declare a class instance
box1: Box box1 = new Box(30.0f, 20.0f); // Declare an instance of the English units interface:
IEnglishDimensions eDimensions = (IEnglishDimensions)box1; // Declare an instance of the metric units
interface: IMetricDimensions mDimensions = (IMetricDimensions)box1; // Print dimensions in English
units: System.Console.WriteLine("Length(in): {0}", eDimensions.Length());
System.Console.WriteLine("Width (in): {0}", eDimensions.Width()); // Print dimensions in metric units:
System.Console.WriteLine("Length(cm): {0}", mDimensions.Length()); System.Console.WriteLine("Width
(cm): {0}", mDimensions.Width()); } }
Sada
Length(in): 30 Width (in): 20 Length(cm): 76.2 Width (cm): 50.8
Programao robusta
Se voc desejar tornar as medidas padro em ingls unidades, implementar os mtodos Length e
Width Normalmente, e explicitamente implementar os mtodos Comprimento e Largura da
interface IMetricDimensions:
C#
// Normal implementation: public float Length() { return lengthInches; } public float Width() { return
widthInches; } // Explicit implementation: float IMetricDimensions.Length() { return lengthInches * 2.54f; }
float IMetricDimensions.Width() { return widthInches * 2.54f; }
Nesse caso, voc pode acessar as unidades ingls da instncia de classe e acessar as unidades
mtrica de interface a instncia:
C#
public static void Test() { Box box1 = new Box(30.0f, 20.0f); IMetricDimensions mDimensions =
(IMetricDimensions)box1; System.Console.WriteLine("Length(in): {0}", box1.Length());
System.Console.WriteLine("Width (in): {0}", box1.Width()); System.Console.WriteLine("Length(cm): {0}",
mDimensions.Length()); System.Console.WriteLine("Width (cm): {0}", mDimensions.Width()); }
Visual C# Consolidado 357
Classes genricas no .NET Framework
Generics permitem que voc personalizar um mtodo, classe, estrutura ou interface para o tipo de
dados precisa Ele age sobre. Por exemplo, em vez de usar a Hashtable classe, que permite
chaves e valores sejam de qualquer tipo, voc pode usar a Dictionary classe genrico e
especifique o tipo permitido para a chave e o tipo permitido para o valor. Entre os benefcios da
generics esto cdigo maior segurana reutilizao e tipo.
Do System.Collections.Generic um nmero de classes a coleo genrica fornecido no .NET
Framework, no e System.Collections.ObjectModel espaos de nome. Genricos interfaces para
implementar comparaes classificar e igualdade so fornecidos no espao para nome System,
juntamente com tipos de representante genrico para manipuladores de eventos, converses e
predicados da pesquisa.
Suporte para generics foi adicionada ao System.Reflection para examinar tipos genricos e
mtodos genricos para System.Reflection.Emit para emissor dinmico conjuntos que contm
tipos genricos e mtodos, e para System.CodeDOM para gerar origem Graphs que incluem
generics.
Visual Basic, C#, e Visual C++ fornecem suporte completo para definir e usar tipos genricos. O
Common Language Runtime fornece nova operao 8087 e prefixos para oferecer suporte aos
tipos genricos no Microsoft (MSIL) linguagem intermediria.
Viso geral sobre Generics no .NET Framework
Este tpico fornece uma viso geral sobre os seguintes recursos de generics no .NET Framework
e o Common Language Runtime:
A Definio de tipo genrico uma classe, estrutura, ou declarao interface que funciona
como um modelo, com espaos reservados para os tipos-pode conter ou usar. Por exemplo, a
Dictionary classe pode conter dois tipos: chaves e valores. Porque ele apenas um modelo,
voc no pode criar instncias de uma classe, estrutura ou interface que uma definio de
tipo genrico.
A Argumento tipo genrico qualquer tipo que substitudo para um parmetro tipo
genrico.
O termo geral " tipo genrico " inclui os construdo tipos e definies tipo genrico.
limites so Restries colocados em parmetros tipo genrico. Por exemplo, voc pode
limitar um parmetro tipo para tipos que implementam a IComparer interface genrica, para
garantir que instncias do tipo podem ser pedidas. Voc tambm pode restringir parmetros
tipo para tipos que tenham uma classe base especfico, que tem um construtor padro, ou que
so tipos de referncia ou tipos de valores. Usurios do tipo genrico no podem substituir
argumentos tipo que no faa satisfazer as restries.
A definio Mtodo genrico um mtodo com duas listas de parmetro: uma lista de
parmetros tipo genrico, e uma lista de parmetros formais. Parmetros tipo podem aparecer
como o tipo de retorno ou como os tipos de parmetros formais, como no cdigo a seguir.
C#
T Generic<T>(T arg) { T temp = arg; ...}
Mtodos genricos podem aparecer em tipos genricos ou nongeneric. importante para
Observe que um mtodo no genrico apenas porque ele pertence a um tipo genrico, ou
mesmo porque tem parmetros formais cujos tipos so os parmetros do tipo delimitador
genricos. Um mtodo somente se tiver sua prpria lista de parmetros tipo genrico. No
cdigo a seguir, nico mtodo G genrico.
C#
class A { T G<T>(T arg) {...} } class Generic<T> { T M(T arg) {...} }
Visual C++, C#, e Visual Basic todos os fornecem suporte completo para definir e consumindo
generics. Para obter mais informaes, consulte Tipos genrics no Visual Basic, Introduo ao
Generics (guia de programao C#). e Overview of Generics in C++
Tipos e Generics aninhadas
Um tipo aninhado em um tipo genrico pode depender os parmetros os tipo de delimitador o tipo
genrico, e esses tipos aninhados so considerados genricos pelo tempo de execuo de idioma
comum, mesmo que eles no tenham parmetros tipo genrico de seus prprios. Quando voc
Visual C# Consolidado 359
cria uma instncia de um tipo aninhado, necessrio para especificar argumentos Tipo para todos
os delimitador tipos genricos.
Genricas colees no .NET Framework
Do System.Collections.Generic um nmero de classes a coleo genrica fornecido na
biblioteca de classe do .NET Framework, no e System.Collections.ObjectModel espaos de
nome. Para obter mais informaes sobre essas classes, consulte Comumente usados tipos da
coleo.
System.Collections.Generic
Muitos dos tipos a coleo genrica so diretas analogs dos tipos nongeneric. Dictionary uma
verso genrica do Hashtable; ele utiliza a estrutura KeyValuePair genrica para enumerao, em
vez de DictionaryEntry.
List uma verso do ArrayList genrico. No h genrico Queue e Stack Classes correspondente
s verses nongeneric.
Existem verses genrico e nongeneric do SortedList, ambos os quais so hbridas entre um
dicionrio e uma lista, e que tm caractersticas de desempenho semelhante. A SortedDictionary
classe genrico um dicionrio que oferece caractersticas de desempenho diferente, e que
possui nenhum contraparte nongeneric puro.
A LinkedList classe genrico uma lista vinculada verdadeira. No tem nenhum contraparte
nongeneric.
System.Collections.ObjectModel
A Collection classe genrico oferece uma classe base para derivar seus prprios tipos a coleo
genrica. A ReadOnlyCollection classe fornece uma maneira fcil de produzir uma coleo
somente leitura de qualquer tipo que implementa a IList interface genrico. A KeyedCollection
classe genrica oferece uma maneira para armazenar objetos que contm suas prprias chaves.
Outros tipos genrico
A Nullable estrutura genrica, voc pode usar tipos valor como se eles pode ser atribudos null.
Isso pode ser til ao trabalhar com consultas de banco de dados, onde campos que contm tipos
de valor podem ser ausentes. O parmetro tipo genrico pode ser qualquer tipo de valor.
Observao
Em C# no necessrio para usar Nullable explicitamente, porque o idioma tem sintaxe para
tipos anulveis.
A ArraySegment estrutura genrica oferece uma maneira para delimitar um intervalo de elementos
em uma matriz unidimensional, baseada em zero de qualquer tipo. O parmetro tipo genrico o
tipo de elementos da matriz na.
O EventHandler representante genrico elimina a necessidade para declarar um tipo delegate
para manipular eventos se o evento segue o padro tratamento de eventos-usado pelo .NET
Framework. Por exemplo, suponha que voc tiver criado uma MyEventArgs classe, derivado de
Visual C# Consolidado 360
EventArgs, para manter os dados para o evento. Ento voc pode declarar o evento da seguinte
maneira:
C#
public event EventHandler<MyEventArgs> MyEvent;
Representantes genricos para Manipulating matrizes e listas
O Action representante genrico representa um mtodo que efetua alguma ao em um elemento
do tipo especificado. Voc pode criar um mtodo que executa a ao desejada no elemento,
criamos uma instncia do representante Action para representar esse mtodo, e depois passar a
matriz e o representante para o System.Array.ForEach.Action{ mtodo esttico genrico O mtodo
chamado para cada elemento da matriz.
A List classe genrica tambm oferece um ForEach mtodo que usa o Action representante.
Esse mtodo no genrico.
Observao
Isso torna um ponto interessante sobre tipos genricos e mtodos. O
System.Array.ForEach.Action{ mtodo deve ser esttico (Shared. porque Array) e genrico no
Visual Basic no um tipo genrico; o nico motivo voc pode especificar um tipo para
System.Array.ForEach.Action{ para operar em que o mtodo possui sua prpria lista de
Parmetro tipo Por outro lado, o mtodo nongeneric
System.Collections.Generic.List.ForEach(System.Action{ pertence classe List genrico,
para ele simplesmente utiliza o parmetro Tipo de sua classe. A classe altamente for digitada,
portanto, o mtodo pode ser um mtodo de instncia.
O Predicate representante genrico representa um mtodo que determina se um determinado
elemento atende critrios voc definir. Poder us-lo com os seguintes mtodos estticos
genricos de Array para procurar por um elemento ou um conjunto de elementos: Exists.,
FindLastFindIndex, FindAllFind, FindLastIndex e TrueForAll
Tambm Predicate funciona com os mtodos correspondentes nongeneric da instncia da classe
List genrico.
O Comparison representante genrico permite que voc para fornecer uma ordem de
classificao de matriz ou lista elementos que no tm uma ordem de classificao nativo, ou para
substituir a ordem de classificao nativo. Criar um mtodo que executa a comparao, criar uma
instncia do representante Comparison para representar o mtodo, e depois passar a matriz e o
representante para o System.Array.Sort.Comparison{ mtodo genrico esttico. A List classe
genrico oferece uma sobrecarga mtodo da instncia correspondente,
System.Collections.Generic.List.Sort(System.Comparison{.
O Converter representante genrico permite que voc para definir uma converso entre dois tipos,
e para converter uma matriz de um tipo em uma matriz de outro, ou para converter uma lista de
um tipo em uma lista do outro. Criar um mtodo que converte os elementos de lista existente para
um novo tipo, criar uma instncia delegado para representar o mtodo, e use o
System.Array.ConvertAll.Converter{ mtodo esttico genrico para produzir uma matriz do novo
tipo da matriz original, ou o System.Collections.Generic.List.ConvertAll.Converter{ mtodo da
instncia genrico para produzir uma lista do novo tipo a partir da lista original.
Visual C# Consolidado 361
O encadeamento representantes
Muitos dos mtodos que usam esses representantes retornar uma matriz ou lista, que pode ser
passada para outro mtodo. Por exemplo, se voc desejar selecionar determinados elementos de
uma matriz, converter esses elementos para um novo tipo, e salv-las em uma nova matriz, voc
pode passar a matriz retornada pelo mtodo FindAll genrico para o ConvertAll mtodo
genrico. Se o novo tipo elemento possui uma ordem de classificao natural, voc poder passar
a matriz retornada pelo mtodo ConvertAll genrico para o Sort mtodo genrico.
Interfaces genrico
Interfaces genricos fornecem contrapartes Safe tipo-a nongeneric interfaces para Ordem e
igualdade comparaes e para funcionalidade compartilhado por tipos a coleo genrica.
Igualdade e classificao Comparisons
Do System.IComparable no espao para nome System, e System.IEquatable genricos interfaces,
como suas contrapartes nongeneric, definir mtodos para ordenar comparaes e comparaes
de igualdade, respectivamente. Tipos implementar essas interfaces para fornecer a capacidade de
executar tais comparaes.
No espao para nome System.Collections.Generic, ou System.IEquatable interface genrica e
eles fornecem uma maneira para redefinir os relacionamentos de tipos que fazem. e
IEqualityComparer Definir uma comparao ordenao ou igualdade para tipos que no
implementam oferta interfaces genrico uma maneira o IComparer o System.IComparable Essas
interfaces so usados por mtodos e construtores de muitas das classes a coleo genrica. Por
exemplo, voc pode passar um genrica IComparer para o construtor da classe
SortedDictionary para especificar uma ordem de classificao para um tipo que no implementa
genrico System.IComparable. Existem overloads do System.Array.Sort mtodo esttico
genrico e o System.Collections.Generic.List.Sort(System.Collections.Generic.IComparer{ mtodo
da instncia para classificao matriz e lista usando implementaes genricas IComparer.
O Comparer e tambm fornecem comparaes ordem e igualdade padro por seus respectivas
System.Collections.Generic.Comparer.Default e
System.Collections.Generic.EqualityComparer.Default Propriedades. e EqualityComparer Classes
genricos fornecem classes bsicas para implementaes de e IEqualityComparer Interfaces
genricos, o IComparer
Funcionalidade coleo
A ICollection interface genrica a interface para a coleo genrica tipos bsico. Fornece
funcionalidade bsica para adicionar, remover, copiar, e enumerar elementos. Herda ICollection
da genrico IEnumerable e nongeneric IEnumerable.
A IList interface genrica estende a ICollection interface genrica com mtodos para
recuperao indexado.
A IDictionary interface genrica estende a ICollection interface genrica com mtodos para
recuperao com chave. Tipos do Dicionrio genrico na biblioteca de classes base do .NET
Framework tambm implementam a interface nongeneric IDictionary.
A IEnumerable interface genrico oferece uma estrutura de enumerador genrico. A IEnumerator
interface implementada por enumeradores genricos genrico herda a interface nongeneric
IEnumerator, e MoveNext. e Reset membros, que no faa depender o parmetro T de tipo,
aparecem apenas em uma interface nongeneric Isso significa que qualquer consumidor sobre a
interface nongeneric tambm pode consumir a interface genrica.
Visual C# Consolidado 362
Limitaes de Generics
A seguir esto algumas limitaes de generics no .NET Framework verso 2.0:
Tipos genricos podem ser derivados da maioria das classes base, como
MarshalByRefObject (e restries podem ser usadas para exigir que parmetros tipo genrico
derivar de classes base como MarshalByRefObject),. mas nesta verso no h suporte para
tipos genricos vinculados contexto- Um tipo genrico pode ser derivado de
ContextBoundObject, mas ao tentar criar uma instncia do que digitar causas. um
TypeLoadException
Enumeraes no podem ter parmetros tipo genrico. Uma enumerao pode ser
genrica somente por acaso, por exemplo porque ele estiver aninhado em um tipo genrico
definido com Visual Basic, C#, ou C++. Para obter mais informaes, consulte Enumeraes
no CTS (Common Type System).
Leve mtodos dinmicos no podem ser genricos. Para obter mais informaes sobre
mtodos dinmicos, consulte Reflexo Emit dinmico cenrios mtodo.
No Visual Basic, C# e C++ um tipo aninhado entre um tipo genrico no pode ser
instanciado a menos que tipos tiverem sido atribudos aos parmetros os tipo de todos os tipos
de incluso. Outra maneira de dizer isso que no reflexo, um tipo aninhado definido usando
esses idiomas inclui os parmetros os tipo de todos os seus tipos delimitador. Isso permite que
os parmetros os Tipo do colocando tipos a ser usado nas definies as membro de um tipo
aninhado. Para obter mais informaes, consulte " Tipos Nested " no MakeGenericType.
Observao
Um tipo aninhado que definido pelo emissor cdigo em um conjunto dinmico ou usando
parmetros do seu colocando tipos; entretanto, se no tiver depois os parmetros tipo so no no
escopo na classe aninhada. No necessrio para incluir o tipo a Assembler MSIL (Ilasm.exe)
Para obter mais informaes, consulte " Tipos Nested " no MakeGenericType.
Vantagens de Generics
Permitindo que voc para especificar os tipos especficos acionados por uma classe genrico ou
mtodo, o recurso generics desloca a sobrecarga de segurana de tipos de voc para o
compilador. No necessrio ao gravar cdigo para teste para o tipo de dados correto, porque ele
imposto em tempo de compilao. A necessidade de diretores tipo e a possibilidade de erros em
tempo de execuo so reduzidas.
Generics fornecem segurana tipo sem a sobrecarga de vrias implementaes. Por exemplo, crie
uma lista vinculada de seqncias com a seguinte declarao de varivel:
C#
LinkedList<string> llist = new LinkedList<string>();
No necessrio para herdar de um tipo base e substituem membros. A lista vinculada est
pronta para uso imediato. Consulte System.Collections.Generic e System.Collections.ObjectModel
para os tipos a coleo genrica fornecidos pelo .NET Framework.
Alm de segurana de tipo, tipos a coleo genrica geralmente executar melhor para armazenar
e manipular tipos valor porque no h h necessidade de caixa os tipos valor.
Visual C# Consolidado 363
Representantes genricos Ativar retornos de chamada Segurana tipo-sem a necessidade para
criar representante vrias classes. Por exemplo, o Predicate representante genrico permite que
voc a criar um mtodo que implementa seu prprio critrios para um tipo especfico e a usar o
mtodo com mtodos do tipo Array, como Find, FindLast,. e FindAll
Representantes genricos tambm podem ser usados no cdigo gerado dinamicamente sem
exigir a gerao de um tipo delegate. Isso aumenta o nmero de cenrios em que voc pode usar
Lightweight mtodos dinmicos em vez de gerar conjuntos todos. Para obter mais informaes,
consulte Como Definir e Executar Mtodos Dinmicos e DynamicMethod.
Em muitos casos, o Visual Basic, Visual C++ e compiladores C# so capazes de determinao do
contexto os tipos usados por uma chamada de mtodo genrico, bastante simplificando a sintaxe
para usar mtodos genricos. Por exemplo, o cdigo a seguir mostra os formulrios de chamar o
BinarySearch mtodo para pesquisar uma matriz de seqncias genrico curto e longo. No
formulrio curto, os compiladores inferir o parmetro tipo correto dos tipos de argumentos do
mtodo.
C#
int index = Array.BinarySearch(myArray, "test string"); int index = Array.BinarySearch<string>(myArray,
"test string");
A palavra-chave default em cdigo fonte " genrico" (Guia de
programao C#)
No genricos classes e mtodos, um problema que surge como atribuir um valor padro a um
tipo parametrizado T quando voc no faa sabe o seguinte antecedncia:
Voc pode comparar para Nulo. Se um parmetro unbounded comparado com null, a
comparao sempre retornar FALSE se o argumento Tipo um tipo de valor.
Visual C# Consolidado 367
Naked restries tipo
Quando um parmetro tipo genrico usado como uma restrio, ela chamada uma restrio
tipo naked. Restries tipo naked so teis quando uma funo membro com seu prprio
Parmetro tipo precisa restringir que parmetro para o parmetro tipo do tipo recipiente, como
mostrado no exemplo a seguir:
C#
class List<T> { void Add<U>(List<U> items) where U : T {/*...*/} }
No exemplo anterior, T uma restrio naked tipo em um contexto do Add mtodo, e um
parmetro tipo unbounded em um contexto de classe List.
Restries naked tipo podem ser usadas em definies de classe genrico. Observe que a
restrio tipo naked deve tambm ter sido declarada dentro de colchetes angulares juntamente
com outros parmetros tipo:
C#
//naked type constraint public class SampleClass<T, U, V> where T : V { }
A utilidade de restries tipo naked com classes genricos muito limitada porque o compilador
pode assumir nada sobre uma restrio tipo naked exceto que ela deriva de System.Object.
Utilizar restries tipo naked em classes genricos em situaes em que voc deseja aplicar uma
relao de herana entre dois parmetros tipo.
Representantes genricos (Guia de programao C#)
A Delegar pode definir seus prprios parmetros tipo. Cdigo que o representante genrico pode
especificar o argumento Tipo para criar um tipo construdo fechado, assim como quando
referncias instanciar uma classe genrico ou chamar um mtodo genrico, conforme mostrado
no exemplo o seguir:
C#
public delegate void Del<T>(T item); public static void Notify(int i) { } Del<int> m1 = new Del<int>(Notify);
C# 2.0 tem um novo recurso chamado mtodo converso de grupo, que se aplica aos tipos de
representante concreto, bem como genrico, e permite que voc para gravar a linha anterior
usando esta sintaxe simplificada:
C#
Del<int> m2 = Notify;
Representantes definidos em uma classe genrico podem usar os parmetros tipo de classe
genrico em da mesma maneira que faa mtodos de classe.
C#
class Stack<T> { T[] items; int index; public delegate void StackDelegate(T[] items); }
Cdigo que referencia o representante deve especificar o argumento Tipo da classe que contm,
da seguinte maneira:
C#
Visual C# Consolidado 368
private static void DoWork(float[] items) { } public static void TestStack() { Stack<float> s = new
Stack<float>(); Stack<float>.StackDelegate d = DoWork; }
Representantes genricos so especialmente teis para definir eventos com base no padro
design tpica porque o argumento do remetente podem ser digitados altamente e no tem mais
para ser convertido de e para Object.
C#
delegate void StackEventHandler<T, U>(T sender, U eventArgs); class Stack<T> { public class
StackEventArgs : System.EventArgs { } public event StackEventHandler<Stack<T>, StackEventArgs>
stackEvent; protected virtual void OnStackChanged(StackEventArgs a) { stackEvent(this, a); } } class
SampleClass { public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { } }
public static void Test() { Stack<double> s = new Stack<double>(); SampleClass o = new SampleClass();
s.stackEvent += o.HandleStackChange; }
COMO: Criar um bloco iterador para uma lista genrica (Guia de programao C#)
Neste exemplo a genrica Classe Stack<T> implementa o Interface IEnumerator<T> Genrico.
Uma matriz de tipo T declarada e atribudo valores usando o mtodo Push. No mtodo
GetEnumerator, os valores da matriz so retornados usando a yield return instruo.
O no-genricos GetEnumerator tambm implementado, porque IEnumerable<T> herdado
IEnumerable. Este exemplo mostra a implementao tpica, que para o mtodo no-generic para
simplesmente encaminhar a chamada para o mtodo genrico.
Exemplo
C#
using System.Collections; using System.Collections.Generic; namespace GenericIteratorExample { public
class Stack<T> : IEnumerable<T> { private T[] values = new T[100]; private int top = 0; public void Push(T
t) { values[top++] = t; } public T Pop() { return values[--top]; } // These make Stack<T> implement
IEnumerable<T> allowing // a stack to be used in a foreach statement. public IEnumerator<T>
GetEnumerator() { for (int i = top; --i >= 0; ) { yield return values[i]; } } IEnumerator
IEnumerable.GetEnumerator() { return GetEnumerator(); } // Iterate from top to bottom. public
IEnumerable<T> TopToBottom { get { // Since we implement IEnumerable<T> // and the default iteration
is top to bottom, // just return the object. return this; } } // Iterate from bottom to top. public
IEnumerable<T> BottomToTop { get { for (int i = 0; i < top; i++) { yield return values[i]; } } } //A
parameterized iterator that return n items from the top public IEnumerable<T> TopN(int n) { // in this
example we return less than N if necessary int j = n >= top ? 0 : top - n; for (int i = top; --i >= j; ) { yield
return values[i]; } } } //This code uses a stack and the TopToBottom and BottomToTop properties //to
enumerate the elements of the stack. class Test { static void Main() { Stack<int> s = new Stack<int>(); for
(int i = 0; i < 10; i++) { s.Push(i); } // Prints: 9 8 7 6 5 4 3 2 1 0 // Foreach legal since s implements
IEnumerable<int> foreach (int n in s) { System.Console.Write("{0} ", n); } System.Console.WriteLine(); //
Prints: 9 8 7 6 5 4 3 2 1 0 // Foreach legal since s.TopToBottom returns IEnumerable<int> foreach (int n in
s.TopToBottom) { System.Console.Write("{0} ", n); } System.Console.WriteLine(); // Prints: 0 1 2 3 4 5 6 7 8
9 // Foreach legal since s.BottomToTop returns IEnumerable<int> foreach (int n in s.BottomToTop) {
System.Console.Write("{0} ", n); } System.Console.WriteLine(); // Prints: 9 8 7 6 5 4 3 // Foreach legal since
s.TopN returns IEnumerable<int> foreach (int n in s.TopN(7)) { System.Console.Write("{0} ", n); }
System.Console.WriteLine(); } } }
Visual C# Consolidado 369
Sada
9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3
COMO: Combinar representantes (Representantes Multicast) (Guia de programao C#)
Este exemplo demonstra como compor representantes de difuso seletiva. Uma propriedade de
Delegar objetos til que eles podem ser atribudos a instncia um de representante para ser
difuso seletiva usando o + operador. Um representante composto chama os representantes ele
foi composto de dois. Somente representantes do mesmo tipo podem ser compostos.
O - operador pode ser usado para remover um representante componente de um representante
composto.
Exemplo
C#
delegate void Del(string s); class TestClass { static void Hello(string s) { System.Console.WriteLine(" Hello,
{0}!", s); } static void Goodbye(string s) { System.Console.WriteLine(" Goodbye, {0}!", s); } static void Main()
{ Del a, b, c, d; // Create the delegate object a that references // the method Hello: a = Hello; // Create the
delegate object b that references // the method Goodbye: b = Goodbye; // The two delegates, a and b, are
composed to form c: c = a + b; // Remove a from the composed delegate, leaving d, // which calls only the
method Goodbye: d = c - a; System.Console.WriteLine("Invoking delegate a:"); a("A");
System.Console.WriteLine("Invoking delegate b:"); b("B"); System.Console.WriteLine("Invoking delegate
c:"); c("C"); System.Console.WriteLine("Invoking delegate d:"); d("D"); } }
Sada
Invoking delegate a: Hello, A! Invoking delegate b: Goodbye, B! Invoking delegate c: Hello, C! Goodbye, C!
Invoking delegate d: Goodbye, D!
COMO: Declarar, instanciar e usar um representante (Guia de programao C#)
Representantes so declarados como mostrado aqui:
C#
public delegate void Del<T>(T item); public void Notify(int i) { }
C#
Del<int> d1 = new Del<int>(Notify);
Em C# 2.0, tambm possvel para declarar uma Delegar essa sintaxe simplificada usando:
C#
Del<int> d2 = Notify;
O exemplo a seguir ilustra declarar, instanciar, e usando um representante. A BookDB classe
encapsula um banco de dados livraria que mantm um banco de dados de livros. Ela expe um
mtodo, ProcessPaperbackBooks,. que localiza todos os paperback livros no banco de dados e
chama um representante para cada um O delegate tipo usado chamado ProcessBookDelegate. A
Test classe usa esta classe para imprimi-los a ttulos e os livros paperback preo mdio.
Visual C# Consolidado 370
O uso de representantes promove boa separao de funcionalidade entre o banco de dados
livraria e o cdigo do cliente. O cdigo do cliente no tem conhecimento de como os livros so
armazenados ou como o cdigo livraria localiza livros paperback. O cdigo livraria no tem
conhecimento de qual processamento feito nos livros paperback aps ele encontra-los.
Exemplo
C#
// A set of classes for handling a bookstore: namespace Bookstore { using System.Collections; // Describes a
book in the book list: public struct Book { public string Title; // Title of the book. public string Author; //
Author of the book. public decimal Price; // Price of the book. public bool Paperback; // Is it paperback?
public Book(string title, string author, decimal price, bool paperBack) { Title = title; Author = author; Price =
price; Paperback = paperBack; } } // Declare a delegate type for processing a book: public delegate void
ProcessBookDelegate(Book book); // Maintains a book database. public class BookDB { // List of all books in
the database: ArrayList list = new ArrayList(); // Add a book to the database: public void AddBook(string
title, string author, decimal price, bool paperBack) { list.Add(new Book(title, author, price, paperBack)); } //
Call a passed-in delegate on each paperback book to process it: public void
ProcessPaperbackBooks(ProcessBookDelegate processBook) { foreach (Book b in list) { if (b.Paperback) //
Calling the delegate: processBook(b); } } } } // Using the Bookstore classes: namespace BookTestClient {
using Bookstore; // Class to total and average prices of books: class PriceTotaller { int countBooks = 0;
decimal priceBooks = 0.0m; internal void AddBookToTotal(Book book) { countBooks += 1; priceBooks +=
book.Price; } internal decimal AveragePrice() { return priceBooks / countBooks; } } // Class to test the book
database: class TestBookDB { // Print the title of the book. static void PrintTitle(Book b) {
System.Console.WriteLine(" {0}", b.Title); } // Execution starts here. static void Main() { BookDB bookDB =
new BookDB(); // Initialize the database with some books: AddBooks(bookDB); // Print all the titles of
paperbacks: System.Console.WriteLine("Paperback Book Titles:"); // Create a new delegate object associated
with the static // method Test.PrintTitle: bookDB.ProcessPaperbackBooks(PrintTitle); // Get the average
price of a paperback by using // a PriceTotaller object: PriceTotaller totaller = new PriceTotaller(); // Create
a new delegate object associated with the nonstatic // method AddBookToTotal on the object totaller:
bookDB.ProcessPaperbackBooks(totaller.AddBookToTotal); System.Console.WriteLine("Average Paperback
Book Price: ${0:#.##}", totaller.AveragePrice()); } // Initialize the book database with some test books: static
void AddBooks(BookDB bookDB) { bookDB.AddBook("The C Programming Language", "Brian W. Kernighan
and Dennis M. Ritchie", 19.95m, true); bookDB.AddBook("The Unicode Standard 2.0", "The Unicode
Consortium", 39.95m, true); bookDB.AddBook("The MS-DOS Encyclopedia", "Ray Duncan", 129.95m, false);
bookDB.AddBook("Dogbert's Clues for the Clueless", "Scott Adams", 12.00m, true); } } }
Sada
Paperback Book Titles: The C Programming Language The Unicode Standard 2.0 Dogbert's Clues for the
Clueless Average Paperback Book Price: $23.97
Programao robusta
Declarar um representante.
A instruo a seguir:
C#
public delegate void ProcessBookDelegate(Book book);
declara um novo tipo delegate. Cada tipo delegate descreve o nmero e tipos dos argumentos,
e o tipo do valor de retorno dos mtodos que ele pode encapsular. Sempre que um novo
Visual C# Consolidado 371
conjunto de tipos de argumento ou tipo de valor de retorno for necessrio, um novo tipo
delegate deve ser declarado.
Instanciar um representante.
Depois que um tipo delegate tiver sido declarado, um objeto de representante deve ser criado
e associado com um mtodo especfico. No exemplo acima, isso feito, passando o PrintTitle
mtodo para o ProcessPaperbackBooks mtodo, como este:
C#
bookDB.ProcessPaperbackBooks(PrintTitle);
Isso cria um novo objeto de representante associado o Esttico mtodo Test.PrintTitle. Da
mesma forma, passado como este: o mtodo AddBookToTotal no-esttico no objeto totaller
C#
bookDB.ProcessPaperbackBooks(totaller.AddBookToTotal);
Em ambos os casos um novo objeto de representante passado para o ProcessPaperbackBooks
mtodo.
Depois que um representante for criada, o mtodo associado a alteraes nunca; objetos de
representante so imutveis.
Chamar um representante.
Depois que um objeto de representante for criado, o objeto de representante normalmente
passado para outros cdigos que chamar o representante. Um objeto de representante
chamado pelo usando o nome do objeto de representante, seguido pelos argumentos
parenthesized a serem passados ao representante. Um exemplo de uma chamada de
representante :
C#
processBook(b);
Um representante ou pode ser chamado de forma sncrona, como, neste exemplo, ou
assincronamente por usando BeginInvoke e EndInvoke mtodos.
COMO: Usar sobrecarga de operador para criar uma classe para nmeros complexos (Guia de
programao C#)
Este exemplo mostra como voc pode usar operador sobrecarga para criar uma classe Complex
nmero complexo que define adio complexa. O programa exibir o IMAGINARY e as partes dos
nmeros e o resultado disso usando uma substituio do mtodo ToString reais.
Exemplo
C#
public struct Complex { public int real; public int imaginary; public Complex(int real, int imaginary)
//constructor { this.real = real; this.imaginary = imaginary; } // Declare which operator to overload (+), //
the types that can be added (two Complex objects), // and the return type (Complex): public static Complex
operator +(Complex c1, Complex c2) { return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); }
// Override the ToString() method to display a complex number in the traditional format: public override
string ToString() { return (System.String.Format("{0} + {1}i", real, imaginary)); } } class TestComplex { static
void Main() { Complex num1 = new Complex(2, 3); Complex num2 = new Complex(3, 4); // Add two
Complex objects through the overloaded plus operator: Complex sum = num1 + num2; // Print the numbers
and the sum using the overriden ToString method: System.Console.WriteLine("First complex number: {0}",
Visual C# Consolidado 372
num1); System.Console.WriteLine("Second complex number: {0}", num2); System.Console.WriteLine("The
sum of the two numbers: {0}", sum); } }
Sada
First complex number: 2 + 3i Second complex number: 3 + 4i The sum of the two numbers: 5 + 7i
COMO: Usar interoperabilidade COM para verificar ortografia usando o Word (Guia de
programao C#)
O exemplo de cdigo a seguir ilustra como usar interoperabilidade COM para usar recursos Spell-
verificao do Word em seu aplicativo Visual C#. Para obter mais informaes, consulte
ProofreadingErrors e Objetos Microsoft Word.
Exemplo
Este exemplo ilustra como usar Verificador ortogrfico do Word a partir de um aplicativo C#. Cria
um novo Word.application objeto usando interoperabilidade COM. Em seguida, utiliza a
ProofreadingErrors coleo em um Range objeto e localiza as palavras incorretas no intervalo.
C#
using System.Reflection; using Word = Microsoft.Office.Interop.Word; namespace WordSpell { public partial
class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private
System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; public Form1()
//constructor { InitializeComponent(); } private void button1_Click(object sender, System.EventArgs e) {
Word.Application app = new Word.Application(); int errors = 0; if (textBox1.Text.Length > 0) { app.Visible =
false; // Setting these variables is comparable to passing null to the function. // This is necessary because the
C# null cannot be passed by reference. object template = Missing.Value; object newTemplate =
Missing.Value; object documentType = Missing.Value; object visible = true; Word._Document doc1 =
app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
doc1.Words.First.InsertBefore(textBox1.Text); Word.ProofreadingErrors spellErrorsColl =
doc1.SpellingErrors; errors = spellErrorsColl.Count; object optional = Missing.Value; doc1.CheckSpelling( ref
optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref
optional, ref optional, ref optional, ref optional); label1.Text = errors + " errors corrected "; object first = 0;
object last = doc1.Characters.Count - 1; textBox1.Text = doc1.Range(ref first, ref last).Text; } object
saveChanges = false; object originalFormat = Missing.Value; object routeDocument = Missing.Value;
app.Quit(ref saveChanges, ref originalFormat, ref routeDocument); } } }
Compilando o cdigo
Este exemplo requer Word para ser instalado em seu sistema e dependendo da verso do Office
voc tiver instalado, o Word conjunto pode ser chamado Microsoft Office 10 Biblioteca de objetos
ou biblioteca de objetos 11 Word.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Visual C# Consolidado 373
Para compilar o cdigo
1. Criar um novo projeto aplicativo Windows C# no Visual Studio, e cham-lo WordSpell.
2. Copie o cdigo acima, e col-lo sobre o contedo do arquivo Form1.cs.
3. Copie o cdigo a seguir, e col-lo no Form1.Designer.cs arquivo, o InitializeComponent()
mtodo, aps qualquer cdigo existente.
C#
this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new
System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout(); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(40, 40);
this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.ScrollBars =
System.Windows.Forms.ScrollBars.Vertical; this.textBox1.Size = new System.Drawing.Size(344, 136);
this.textBox1.TabIndex = 0; this.textBox1.Text = ""; // // button1 // this.button1.Location = new
System.Drawing.Point(392, 40); this.button1.Name = "button1"; this.button1.Size = new
System.Drawing.Size(96, 23); this.button1.TabIndex = 1; this.button1.Text = "Check Spelling";
this.button1.Click += new System.EventHandler(this.button1_Click); // // label1 //
this.label1.Location = new System.Drawing.Point(40, 24); this.label1.Name = "label1"; this.label1.Size
= new System.Drawing.Size(336, 16); this.label1.TabIndex = 2; // // Form1 //
this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13); this.ClientSize = new
System.Drawing.Size(496, 205); this.Controls.Add(this.label1); this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1); this.Name = "Form1"; this.Text = "SpellCheckDemo";
this.ResumeLayout(false);
4. Incluir o Word conjunto como uma referncia para o projeto. Clique com o boto direito do
mouse no projeto, clique em Add Reference, clique na COM guia da caixa Add Reference
de dilogo. Clique duas vezes Microsoft Office 11 Object Library, e pressione OK.
Observe que as caixas de dilogo e comandos de menu voc ver podem diferir dos
descritos na Ajuda dependendo do seu ativos configuraes ou edio. Para alterar as
configuraes, escolha Import and Export Settings (Importar e Exportar Configuraes) no
menu Tools (Ferramentas). Para mais informaes, consulte Configuraes do Visual
Studio.
Segurana
Para usar interoperabilidade COM, voc deve ter permisses de segurana de usurio energia ou
administrador. Para obter mais informaes, consulte Segurana do .NET Framework.
COMO: Usar interoperabilidade COM para criar uma planilha do Excel (Guia de programao
C#)
O exemplo de cdigo a seguir ilustra como usar COM interop para criar uma Excel planilha. Para
obter mais informaes sobre Excel, consulte Objetos do Microsoft Excel, e Mtodo Open
Este exemplo ilustra como abrir uma planilha existente Excel no C# using Capacidade .NET
Framework COM interop. O Excel conjunto usado para abrir e inserir dados em um intervalo de
clulas na planilha Excel.
Observao
Visual C# Consolidado 374
Voc deve ter Excel instalado em seu sistema para este cdigo seja executado corretamente.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para criar uma planilha do Excel com interoperabilidade com
1. Criar um novo aplicativo Console C# no Visual Studio e cham-la CreateExcelWorksheet.
2. Incluir o conjunto Excel como uma referncia para o projeto Right-Click no projeto,
selecione Add Reference.:
3. Clique na COM guia da caixa Add Reference de dilogo, e Localizar Microsoft Excel 11
Object Library.
4. Clique duas vezes em Microsoft Excel 11 Object Library, e pressione OK.
Observao
Dependendo da verso do Office instalada o conjunto Excel pode ser chamado Excel 10 Object
Library ou Excel 11 Object Library.. ou Excel 11 Object Library
5. Copie o cdigo a seguir e cole sobre o contedo do arquivo Program.cs.
C#
using System; using System.Reflection; using Microsoft.Office.Interop.Excel; public class
CreateExcelWorksheet { static void Main() { Microsoft.Office.Interop.Excel.Application xlApp = new
Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { Console.WriteLine("EXCEL could
not be started. Check that your office installation and project references are correct."); return; }
xlApp.Visible = true; Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1]; if (ws == null) { Console.WriteLine("Worksheet
could not be created. Check that your office installation and project references are correct."); } //
Select the Excel cells, in the range c1 to c7 in the worksheet. Range aRange = ws.get_Range("C1",
"C7"); if (aRange == null) { Console.WriteLine("Could not get a range. Check to be sure you have the
correct versions of the office DLLs."); } // Fill the cells in the C1 to C7 range of the worksheet with the
number 6. Object[] args = new Object[1]; args[0] = 6; aRange.GetType().InvokeMember("Value",
BindingFlags.SetProperty, null, aRange, args); // Change the cells in the C1 to C7 range of the
worksheet to the number 8. aRange.Value2 = 8; } }
Segurana
Para usar COM interop, voc deve ter administrator ou Power User permisses de segurana.
Para obter mais informaes sobre segurana, consulte Segurana do .NET Framework.
COMO: Usar cdigo gerenciado como um suplemento de automao para o Excel (Guia de
programao C#)
Com os suplementos de automao para o Excel, voc pode usar uma funo pblica de sua
biblioteca COM para ser chamado como uma frmula de clula. O exemplo a seguir ilustra como
Visual C# Consolidado 375
criar um suplemento do C# para clculo de imposto de renda TAXA em uma clula em uma
planilha do Excel. Automaticamente ComRegisterFunctionAttribute registra as ferramentas add-in,
e no adicionais so necessrias para registrar o cdigo gerenciado como um conjunto com. Para
obter informaes adicionais, consulte Viso geral sobre de interoperabilidade (guia de
programao C#).
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Calcular imposto de renda
Uma tabela de imposto tpica permite para calcular o imposto fornecido receita anual de uma
pessoa. Por exemplo, a seguir mostra uma tabela de imposto hipottico para indivduos.
Uma tabela imposto exemplo
1. Se renda em zero dlares e em $7,000, o imposto 10 por cento da quantidade.
2. Se renda mais de r$ 100,00 7.000 e em $28,400, o imposto 15 por cento da quantidade
sobre $7,000 mais $700.00.
3. Se renda mais de r$ 100,00 28,400 e em $68,800, o imposto 25 por cento da
quantidade sobre $28,400 mais 3,910.00.
4. Se renda mais de r$ 100,00 68,800 e em $143,500, o imposto 28 por cento da
quantidade sobre $68,800 mais $14,010.00.
5. Se renda mais de r$ 100,00 143,500 e em $311,950, o imposto 33 por cento da
quantidade sobre $143,500 mais $34,926.00.
6. Se renda for sobre $311,950, o imposto ser 35 por cento da quantidade sobre $311,950
mais $90,514.50.
Criar um suplemento de automao para Excel usando o Visual Studio e cdigo gerenciado
1. Criar um novo projeto Visual C# Class Library chamado ExcelAddIn.
2. Na janela Propriedades do projeto, abaixo Configuration Properties, Build, na caixa
suspensa rotuladas Register for COM Interop selecione True. Configurao do projeto do
Visual Studio da compilao dessa propriedade registra automaticamente seu conjunto para
interoperabilidade COM.
3. Cole o cdigo a seguir para o arquivo de classe.
C#
using System.Runtime.InteropServices; namespace TaxTables {
[ClassInterface(ClassInterfaceType.AutoDual)] public class TaxTables { public static double
Tax(double income) { if (income > 0 && income <= 7000) {return (.10 * income);} if (income > 7000
&& income <= 28400) {return 700.00 + (.15 * (income - 7000));} if (income > 28400 && income <=
68800) {return 3910.00 + (.25 * (income - 28400));} if (income > 68800 && income <= 143500)
{return 14010.00 + (.28 * (income - 68800));} if (income > 143500 && income <= 311950) {return
34926.00 + (.33 * (income - 143500));} if (income > 311950) {return 90514.50 + (.35 * (income -
311950));} return 0; } [ComRegisterFunctionAttribute] public static void
RegisterFunction(System.Type t) { Microsoft.Win32.Registry.ClassesRoot.CreateSubKey ("CLSID\\{"
Visual C# Consolidado 376
+ t.GUID.ToString().ToUpper() + "}\\Programmable"); } [ComUnregisterFunctionAttribute] public
static void UnregisterFunction(System.Type t) { Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey
("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable"); } } }
Executando o cdigo
Executar o suplemento do Excel
Observe que as caixas de dilogo e comandos de menu voc ver podem diferir dos
descritos na Ajuda dependendo do seu ativos configuraes ou edio. Para alterar as
configuraes, escolha Import and Export Settings (Importar e Exportar Configuraes) no
menu Tools (Ferramentas). Para mais informaes, consulte Configuraes do Visual Studio.
Segurana
Para usar a interoperabilidade COM, voc deve ter permisses de segurana de usurio energia
ou administrador. Para obter mais informaes, consulte Segurana do .NET Framework.
COMO: Usar servios de chamada da plataforma para reproduzir um arquivo WAVE (Guia de
programao C#)
O exemplo de cdigo C# a seguir ilustra como usar plataforma invocar servios para reproduzir
um arquivo de som wave na plataforma Windows.
Exemplo
Este cdigo de exemplo usa DllImport para ponto de entrada mtodo de importao winmm.dll
na PlaySound como Form1 PlaySound(). O exemplo tem um Windows Form simples com um
boto. Clicar no boto abre uma caixa de dilogo padro janelas OpenFileDialog para que voc
possa abri um arquivo para executar. Quando um arquivo wave selecionado, ela disputada
usando o PlaySound() mtodo do mtodo do conjunto winmm.DLL. Para obter mais informaes
no mtodo winmm.DLL na PlaySound, consulte Usando. Procurar e selecione um arquivo com
uma extenso.wav, e, em seguida clique em Open Para executar o arquivo wave usando
plataforma chamar. Uma caixa de texto mostra o caminho completo do arquivo selecionado.
Caixa Open Files de dilogo filtrada para mostrar somente arquivos com uma extenso.wav
atravs das configuraes de filtro:
C#
dialog1.Filter = "Wav Files (*.wav)|*.wav";
C#
using System.Windows.Forms; namespace WinSound { public partial class Form1 : Form { private TextBox
textBox1; private Button button1; public Form1() //constructor { InitializeComponent(); }
Visual C# Consolidado 377
[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError =
true)] private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);
[System.Flags] public enum PlaySoundFlags : int { SND_SYNC = 0x0000, SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002, SND_LOOP = 0x0008, SND_NOSTOP = 0x0010, SND_NOWAIT =
0x00002000, SND_FILENAME = 0x00020000, SND_RESOURCE = 0x00040004 } private void
button1_Click (object sender, System.EventArgs e) { OpenFileDialog dialog1 = new OpenFileDialog();
dialog1.Title = "Browse to find sound file to play"; dialog1.InitialDirectory = @"c:\"; dialog1.Filter = "Wav
Files (*.wav)|*.wav"; dialog1.FilterIndex = 2; dialog1.RestoreDirectory = true; if(dialog1.ShowDialog() ==
DialogResult.OK) { textBox1.Text = dialog1.FileName; PlaySound (dialog1.FileName, new System.IntPtr(),
PlaySoundFlags.SND_SYNC); } } } }
Compilando o cdigo
Para compilar o cdigo
1. Criar um novo projeto aplicativo Windows C# no Visual Studio e denomine-WinSound.
2. Copie o cdigo acima, e col-lo sobre o contedo do arquivo Form1.cs.
3. Copie o cdigo a seguir, e col-lo no Form1.Designer.cs arquivo, o InitializeComponent()
mtodo, aps qualquer cdigo existente.
C#
this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new
System.Windows.Forms.TextBox(); this.SuspendLayout(); // // button1 // this.button1.Location =
new System.Drawing.Point(192, 40); this.button1.Name = "button1"; this.button1.Size = new
System.Drawing.Size(88, 24); this.button1.TabIndex = 0; this.button1.Text = "Browse";
this.button1.Click += new System.EventHandler(this.button1_Click); // // textBox1 //
this.textBox1.Location = new System.Drawing.Point(8, 40); this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(168, 20); this.textBox1.TabIndex = 1;
this.textBox1.Text = "FIle path"; // // Form1 // this.AutoScaleDimensions = new
System.Drawing.SizeF(5, 13); this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text =
"Platform Invoke WinSound C#"; this.ResumeLayout(false); this.PerformLayout();
4. Compile e executar o cdigo.
HOW TO: Use ponteiros para copiar uma matriz de bytes (guia de programao C#)
O exemplo a seguir utiliza ponteiros para copiar bytes de uma matriz para outro usando ponteiros.
Este exemplo usa a No seguro palavra-chave, que permite ponteiros a ser usado no mtodo
Copy. A Fixo instruo usada para declarar ponteiros para as matrizes origem e destino. Isso
Pinos o local da origem e destino matriz na memria para que eles no sero movidos por coleta
de lixo. Esses blocos de memria ser unpinneds quando conclui o fixed Bloco. Porque a funo
Copiar neste exemplo usa a unsafe palavra-chave, ele deve ser compilado com /unsafe Opo
de compilador.
Exemplo
C#
// compile with: /unsafe
Visual C# Consolidado 378
C#
class TestCopy { // The unsafe keyword allows pointers to be used within the following method: static unsafe
void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count) { if (src == null || srcIndex < 0 || dst ==
null || dstIndex < 0 || count < 0) { throw new System.ArgumentException(); } int srcLen = src.Length; int
dstLen = dst.Length; if (srcLen - srcIndex < count || dstLen - dstIndex < count) { throw new
System.ArgumentException(); } // The following fixed statement pins the location of the src and dst objects
// in memory so that they will not be moved by garbage collection. fixed (byte* pSrc = src, pDst = dst) { byte*
ps = pSrc; byte* pd = pDst; // Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
for (int i = 0 ; i < count / 4 ; i++) { *((int*)pd) = *((int*)ps); pd += 4; ps += 4; } // Complete the copy by
moving any bytes that weren't moved in blocks of 4: for (int i = 0; i < count % 4 ; i++) { *pd = *ps; pd++;
ps++; } } } static void Main() { byte[] a = new byte[100]; byte[] b = new byte[100]; for (int i = 0; i < 100; ++i)
{ a[i] = (byte)i; } Copy(a, 0, b, 0, 100); System.Console.WriteLine("The first 10 elements are:"); for (int i = 0;
i < 10; ++i) { System.Console.Write(b[i] + " "); } System.Console.WriteLine("\n"); } }
Sada
The first 10 elements are: 0 1 2 3 4 5 6 7 8 9
COMO: Usar a funo ReadFile do Windows (Guia de programao C#)
Este exemplo demonstra a funo do Windows ReadFile, ler e exibir um arquivo de texto. A
ReadFile funo requer o uso de unsafe CDIGO porque ele requer um ponteiro como um
parmetro.
A matriz de bytes passada para a Read funo um tipo gerenciado. Isso significa que comuns o
coletor de lixo Runtime (CLR) de idioma pode realocar a memria usada pela matriz em ser.
Para evitar isso, Fixo usado para obter um apontador para a memria e marc-la assim ele no
ser movido o coletor de lixo. No final do bloco fixed, a memria retorna automaticamente para
sendo sujeitos a percorrendo coleta de lixo.
Esse recurso conhecido como declarativa pinning. A parte boa sobre pinning que no h
sobrecarga muito pouco a menos que uma coleta de lixo ocorre em bloco fixed, que pouco
provvel.
Exemplo
C#
class FileReader { const uint GENERIC_READ = 0x80000000; const uint OPEN_EXISTING = 3;
System.IntPtr handle; [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)] static
extern unsafe System.IntPtr CreateFile ( string FileName, // file name uint DesiredAccess, // access mode
uint ShareMode, // share mode uint SecurityAttributes, // Security Attributes uint CreationDisposition, //
how to create uint FlagsAndAttributes, // file attributes int hTemplateFile // handle to template file );
[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)] static extern unsafe bool
ReadFile ( System.IntPtr hFile, // handle to file void* pBuffer, // data buffer int NumberOfBytesToRead, //
number of bytes to read int* pNumberOfBytesRead, // number of bytes read int Overlapped // overlapped
buffer ); [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)] static extern unsafe
bool CloseHandle ( System.IntPtr hObject // handle to object ); public bool Open(string FileName) { // open
the existing file for reading handle = CreateFile ( FileName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0
); if (handle != System.IntPtr.Zero) { return true; } else { return false; } } public unsafe int Read(byte[] buffer,
int index, int count) { int n = 0; fixed (byte* p = buffer) { if (!ReadFile(handle, p + index, count, &n, 0)) {
return 0; } } return n; } public bool Close() { return CloseHandle(handle); } } class Test { static int
Visual C# Consolidado 379
Main(string[] args) { if (args.Length != 1) { System.Console.WriteLine("Usage : ReadFile <FileName>");
return 1; } if (!System.IO.File.Exists(args[0])) { System.Console.WriteLine("File " + args[0] + " not found.");
return 1; } byte[] buffer = new byte[128]; FileReader fr = new FileReader(); if (fr.Open(args[0])) { // Assume
that an ASCII file is being read. System.Text.ASCIIEncoding Encoding = new System.Text.ASCIIEncoding();
int bytesRead; do { bytesRead = fr.Read(buffer, 0, buffer.Length); string content =
Encoding.GetString(buffer, 0, bytesRead); System.Console.Write("{0}", content); } while (bytesRead > 0);
fr.Close(); return 0; } else { System.Console.WriteLine("Failed to open requested file"); return 1; } } }
COMO: Criar e terminar threads (Guia de programao C#)
Este exemplo demonstra como um segmento auxiliar ou operador pode ser criados e usado para
realizar processamento em paralelo com o segmento primrio. Tornando um segmento esperar
por outro e normalmente Finalizando um segmento tambm so demonstrou. Para obter
informaes detalhadas e Usando Threading (C# programao guia). em consulte Segmentao
gerenciada Multi-Threading,
O exemplo cria uma classe denominada Worker que contm o mtodo que o segmento de
trabalho ser executado chamado DoWork. Isso basicamente a Main funo para o segmento de
trabalho. O segmento de trabalho chamar esse mtodo, comece a execuo e finalizar
automaticamente quando esse mtodo retorna. O DoWork mtodo tem a seguinte aparncia:
C#
public void DoWork() { while (!_shouldStop) { Console.WriteLine("worker thread: working..."); }
Console.WriteLine("worker thread: terminating gracefully."); }
A Worker classe contm um mtodo adicional que usado para indicar aos DoWork que ela deve
retornar. Esse mtodo for chamado RequestStop, e tem a seguinte aparncia:
C#
public void RequestStop() { _shouldStop = true; }
O RequestStop mtodo simplesmente atribui o _shouldStop membro dados para true. Porque esse
membro de dados fica marcado como o DoWork mtodo, isso tem o efeito de causar DoWork para
retornar, INDIRETO assim encerrando o segmento de trabalho. No entanto, importante observar
que DoWork e RequestStop ser executado por diferentes segmentos. DoWork executado pelo
segmento de trabalho, e RequestStop executado pelo segmento primrio, para o _shouldStop
membro dos dados declarado volatile, como isso:
C#
private volatile bool _shouldStop;
Palavra-chave volatile alerta o compilador vrios segmentos acessar o _shouldStop membro dos
dados, e portanto ele no deve fazer suposies de otimizao sobre o estado deste membro.
Para obter mais informaes, consulte voltil (referncia C#).
O uso volatile com o _shouldStop Membro de dados permite que ns para com segurana acessar
este membro de vrios segmentos sem o uso de segmento formal tcnicas de sincronizao, mas
apenas porque _shouldStop . um bool Isso significa que operaes somente nico e atmicas
so necessrias para modificar _shouldStop. Se, contudo, esse membro de dados eram uma
classe, estrutura, ou matriz, acessando-de vrios segmentos, provavelmente resultam em
corrupo de dados intermitentes. Considere um segmento que altera os valores em uma matriz.
Windows regularmente interrompe segmentos para permitir que outros segmentos para executar,
Visual C# Consolidado 380
para este segmento pode ser interrompido aps atribuir alguns elementos da matriz, mas antes de
atribuir outros. Isso significa a matriz agora tem um estado que o programador nunca pretendido,
e outro segmento ler essa matriz pode falhar como resultado.
Antes de realmente criar o segmento de trabalho, a Main funo cria uma instncia de Thread um
Worker objeto e. O objeto do segmento est configurado para usar o Worker.DoWork mtodo como
uma entrada ponto, passando uma referncia a esse mtodo para o Thread Construtor, como
este:
C#
Worker workerObject = new Worker(); Thread workerThread = new Thread(workerObject.DoWork);
Nesse ponto, embora o objeto do segmento de trabalho existir e estiver configurada, o segmento
de trabalho real foi ainda criado. Isso no acontecer at Main Chamadas o Start mtodo:
C#
workerThread.Start();
Neste ponto, o sistema inicia a execuo do segmento de trabalho, mas no to assincronamente
para o segmento primrio. Isso significa que a Main funo continua a executar cdigo
imediatamente enquanto o segmento de trabalho simultaneamente undergoes inicializao. Para
garantir que a Main funo no tentar encerrar o segmento de trabalho antes ele tem a
oportunidade de executar, a Main funo entrar em loop at o operador segmento definido obtm
propriedade do objeto IsAlive como true:
C#
while (!workerThread.IsAlive);
Em seguida, o segmento primrio interrompido brevemente com uma chamada para Sleep. Isso
insures funo do segmento DoWork de trabalho que ser executado o loop dentro o DoWork
Mtodo de iteraes de alguns antes a Main funo executa os comandos mais:
C#
Thread.Sleep(1);
Aps o milissegundo 1 expirar, Main sinais para o objeto do segmento de trabalho que ele deve
terminar usando o Worker.RequestStop mtodo apresentado anteriormente:
C#
workerObject.RequestStop();
Tambm possvel para finalizar um segmento de outro segmento com uma chamada para Abort,
mas isso fora termina o segmento afetado sem preocupao para se ele concluiu a tarefa e
oferece nenhum Oportunidade para a limpeza de recursos. A tcnica mostrada nesse exemplo
prefervel.
Finalmente, a Main funo chama o Join mtodo para o objeto do segmento de trabalho. Este
mtodo faz o segmento atual para bloquear, ou espera, at que o segmento que representa o
objeto termina. Portanto, Join no retornar at o operador segmento retorna, assim encerrando
prprio:
C#
Visual C# Consolidado 381
workerThread.Join();
Neste ponto apenas o segmento primrio executando Main existe. Ele exibe uma mensagem final,
e depois retorna, encerrando o segmento primrio, bem.
O exemplo completo aparece abaixo.
Exemplo
C#
using System; using System.Threading; public class Worker { // This method will be called when the thread
is started. public void DoWork() { while (!_shouldStop) { Console.WriteLine("worker thread: working..."); }
Console.WriteLine("worker thread: terminating gracefully."); } public void RequestStop() { _shouldStop =
true; } // Volatile is used as hint to the compiler that this data // member will be accessed by multiple
threads. private volatile bool _shouldStop; } public class WorkerThreadExample { static void Main() { //
Create the thread object. This does not start the thread. Worker workerObject = new Worker(); Thread
workerThread = new Thread(workerObject.DoWork); // Start the worker thread. workerThread.Start();
Console.WriteLine("main thread: Starting worker thread..."); // Loop until worker thread activates. while
(!workerThread.IsAlive); // Put the main thread to sleep for 1 millisecond to // allow the worker thread to do
some work: Thread.Sleep(1); // Request that the worker thread stop itself: workerObject.RequestStop(); //
Use the Join method to block the current thread // until the object's thread terminates. workerThread.Join();
Console.WriteLine("main thread: Worker thread has terminated."); } }
Sada de exemplo
main thread: starting worker thread... worker thread: working... worker thread: working... worker thread:
working... worker thread: working... worker thread: working... worker thread: working... worker thread:
working... worker thread: working... worker thread: working... worker thread: working... worker thread:
working... worker thread: terminating gracefully... main thread: worker thread has terminated
Como sincronizar um Producer e um segmento do consumidor (guia de programao C#):
Segmento sincronizao entre o segmento primrio e dois segmentos de trabalho usando a lock
palavra-chave, o exemplo a seguir demonstra e AutoResetEvent. e ManualResetEvent Classes
Para obter mais informaes, consulte Declarao lock (Referncia do C#).
O exemplo cria duas auxiliares, ou segmentos de trabalho. Um segmento produz elementos e as
armazena em uma fila genrica que No isenta de segmentos. Para obter mais informaes,
consulte Queue.O outro segmento consome itens nessa fila. Alm disso, o segmento primrio
periodicamente exibe o contedo da fila, para a fila acessada por trs segmentos. Palavra-chave
lock usado para sincronizar o acesso para a fila para garantir que o estado da fila no est
corrompido.
Alm de simplesmente impedindo acesso simultneo com a lock palavra-chave, mais
sincronizao fornecida por dois objetos de evento. Um usado para sinalizar a segmentos de
trabalho para encerrar, e o outro usado pelo segmento Producer para sinalizar ao segmento do
consumidor quando um novo item foi adicionado fila. Esses objetos dois de eventos so
encapsulados em uma classe chamada SyncEvents. Isso permite que os eventos devem ser
passados para os objetos que representam os segmentos consumidor e o Producer facilmente. A
SyncEvents classe definida como este:
C#
Visual C# Consolidado 382
public class SyncEvents { public SyncEvents() { _newItemEvent = new AutoResetEvent(false);
_exitThreadEvent = new ManualResetEvent(false); _eventArray = new WaitHandle[2]; _eventArray[0] =
_newItemEvent; _eventArray[1] = _exitThreadEvent; } public EventWaitHandle ExitThreadEvent { get {
return _exitThreadEvent; } } public EventWaitHandle NewItemEvent { get { return _newItemEvent; } }
public WaitHandle[] EventArray { get { return _eventArray; } } private EventWaitHandle _newItemEvent;
private EventWaitHandle _exitThreadEvent; private WaitHandle[] _eventArray; }
A AutoResetEvent classe usada para o novo item " " evento porque voc deseja esse evento
para redefinir automaticamente cada vez o responde do segmento do consumidor para este
evento. Como alternativa, a ManualResetEvent classe usada para o evento " Sair " porque
voc deseja vrios segmentos a responder quando esse evento sinalizado. O evento se voc
usou AutoResetEvent Em vez disso, seria reverter para um estado no-signaled depois apenas
um segmento respondeu ao evento. O outro segmento no pode responder, e, nesse caso,
falhar encerrar.
A SyncEvents classe cria os dois eventos e armazena-los de duas formas diferentes e
ManualResetEvent,.: como EventWaitHandle, que a classe base para ambos AutoResetEvent
e em uma matriz com base em WaitHandle Como voc ver na discusso do segmento do
consumidor, essa matriz necessrio para que o segmento do consumidor pode responder a
qualquer evento.
Os segmentos consumidor e o Producer so representados pelas classes chamados Consumer e
Producer, ambos os quais definir um mtodo chamado ThreadRun. Esses mtodos so usados
como os pontos de entrada para a segmentos de trabalho que cria o Main mtodo.
O ThreadRun mtodo definido pela classe Producer tem a seguinte aparncia:
C#
// Producer.ThreadRun public void ThreadRun() { int count = 0; Random r = new Random(); while
(!_syncEvents.ExitThreadEvent.WaitOne(0, false)) { lock (((ICollection)_queue).SyncRoot) { while
(_queue.Count < 20) { _queue.Enqueue(r.Next(0,100)); _syncEvents.NewItemEvent.Set(); count++; } } }
Console.WriteLine("Producer thread: produced {0} items", count); }
Esse mtodo entrar em loop at o evento " Sair segmento " torna-se sinalizado. O estado deste
evento testado com o WaitOne mtodo, usando a ExitThreadEvent propriedade definida pela
classe SyncEvents. Nesse caso o estado do evento verificado sem bloquear o segmento atual
porque o primeiro argumento usado com WaitOne zero, indicando que o mtodo deve retornar
imediatamente. Se WaitOne retorna true, e o evento em questo atualmente sinalizado. Se o
ThreadRun mtodo retorna, ento, que tem o efeito de encerrando o segmento de trabalho
executando esse mtodo.
At que o evento " Sair segmento " indicado, o Producer.ThreadStart mtodo tenta manter itens
20 na fila. Um item simplesmente um inteiro entre 0 e 100. A coleo deve estar bloqueada
antes de adicionar novos itens para impedir que o consumidor e segmentos primrio acessem a
coleo simultaneamente. Isso feito com a lock palavra-chave. O argumento passado para lock
o SyncRoot campo exposto por meio da interface ICollection. Este campo fornecido
especificamente para sincronizam acesso do segmento. Exclusivo acesso para a coleo
concedido para as instrues contidas no bloco de cdigo seguinte lock. Para cada novo item que
adiciona o Producer para a fila, uma chamada evento feito para o Set mtodo no novo item " ".
Isso informa o segmento do consumidor a surgir de seu estado suspenso para processar o novo
item.
Visual C# Consolidado 383
O Consumer objeto tambm define um mtodo chamado ThreadRun. Como o Producer na verso
do ThreadRun, esse mtodo executado por um segmento de trabalho criado pelo mtodo Main.
No entanto, a verso do ThreadStart consumidor deve responder a dois eventos. O
Consumer.ThreadRun mtodo tem a seguinte aparncia:
C#
// Consumer.ThreadRun public void ThreadRun() { int count = 0; while
(WaitHandle.WaitAny(_syncEvents.EventArray) != 1) { lock (((ICollection)_queue).SyncRoot) { int item =
_queue.Dequeue(); } count++; } Console.WriteLine("Consumer Thread: consumed {0} items", count); }
Esse mtodo usa WaitAny para bloquear o segmento do consumidor at qualquer uma das alas
de espera na matriz fornecido ficar sinalizada. Nesse caso, h duas alas em matriz, um para
encerrando a segmentos de trabalho, e um para indicar que um novo item foi adicionado
coleo. Retorna WaitAny o ndice do evento que se tornou sinalizado. O novo item " " evento o
primeiro na matriz, para um ndice de zero indica um novo item. Nesse caso verificar um ndice de
1, que indica o evento " Sair segmento ", e isso usado para determinar se esse mtodo continua
a consumir itens. Se evento foi sinalizado, obter acesso exclusivo para a coleo com lock e
consumir o novo item. o novo item " " Porque este exemplo produz e consome milhares de itens,
voc no exibir cada item consumida. Em vez disso use Main para periodicamente exibir o
contedo da fila, conforme ir ser demonstrado.
O Main mtodo comea com a criao a fila cujo contedo ser produzido e consumidos e uma
instncia do SyncEvents, que voc pesquisado no anteriormente:
C#
Queue<int> queue = new Queue<int>(); SyncEvents syncEvents = new SyncEvents();
Do Producer em seguida, Main configura e Consumer objetos para uso com segmentos de trabalho.
Essa etapa no no, entretanto, criar ou iniciar a segmentos de trabalho real:
C#
Producer producer = new Producer(queue, syncEvents); Consumer consumer = new Consumer(queue,
syncEvents); Thread producerThread = new Thread(producer.ThreadRun); Thread consumerThread = new
Thread(consumer.ThreadRun);
Observe que a fila e o objeto de evento de sincronizao so passados para dois e Producer
segmentos como argumentos de construtor. o Consumer Isso fornece os dois objetos com os
recursos compartilhados necessrios para executar suas tarefas respectivas. Dois objetos novos
Thread depois so criados, usando o ThreadRun mtodo para cada objeto como um argumento.
Cada segmento de trabalho, quando iniciado, utilizar esse argumento como o ponto de entrada
para o segmento.
Em seguida Main inicia a segmentos dois trabalho com uma chamada para o Start mtodo, como
este:
C#
producerThread.Start(); consumerThread.Start();
Nesse ponto, os dois segmentos de trabalho novo so criados e Iniciar Execuo assncrona,
independente do segmento primrio que est em execuo o Main mtodo. Na verdade, a
prxima coisa Main no suspender o segmento principal com uma chamada para o Sleep
mtodo. O mtodo suspende o segmento atualmente em execuo para um determinado nmero
Visual C# Consolidado 384
de milissegundos. Depois que esse intervalo expirar, Main reativado, em que ponto ele exibe o
contedo da fila. Repete Main esta para quatro iteraes, como este:
C#
for (int i=0; i<4; i++) { Thread.Sleep(2500); ShowQueueContents(queue); }
Finalmente, Main sinaliza a segmentos de trabalho para encerrar, chamar o Set mtodo do evento
" do segmento de sada ", e chama o Join mtodo em cada segmento de trabalho para bloquear o
segmento primrio at que cada segmento do operador responder ao evento e termina.
No um exemplo final da sincronizao do segmento: o ShowQueueContents mtodo. Esse
mtodo, como os segmentos consumidor e o Producer, usa lock para obter acesso exclusivo para
a fila. Nesse caso, entretanto, acesso exclusivo particularmente importante, porque
ShowQueueContents. enumera em toda a coleo Enumerando sobre uma coleo uma operao
que est especialmente propensa a corrupo de dados por operaes assncronas porque ela
envolve atravessando o contedo de toda a coleo. O ShowQueueContents mtodo tem a seguinte
aparncia:
C#
syncEvents.ExitThreadEvent.Set(); producerThread.Join(); consumerThread.Join();
Finalmente, observe que ShowQueueContents, porque ela chamada por Main, executado pelo
segmento primrio. Isso significa que esse mtodo, quando ele obtm acesso exclusivo fila item,
na verdade est bloqueando os dois segmentos Producer e pelo consumidor de acessar a fila.
Bloqueia ShowQueueContents a fila e enumera o contedo:
C#
private static void ShowQueueContents(Queue<int> q) { lock (((ICollection)q).SyncRoot) { foreach (int item
in q) { Console.Write("{0} ", item); } } Console.WriteLine(); }
O exemplo completo segue.
Exemplo
C#
using System; using System.Threading; using System.Collections; using System.Collections.Generic; public
class SyncEvents { public SyncEvents() { _newItemEvent = new AutoResetEvent(false); _exitThreadEvent =
new ManualResetEvent(false); _eventArray = new WaitHandle[2]; _eventArray[0] = _newItemEvent;
_eventArray[1] = _exitThreadEvent; } public EventWaitHandle ExitThreadEvent { get { return
_exitThreadEvent; } } public EventWaitHandle NewItemEvent { get { return _newItemEvent; } } public
WaitHandle[] EventArray { get { return _eventArray; } } private EventWaitHandle _newItemEvent; private
EventWaitHandle _exitThreadEvent; private WaitHandle[] _eventArray; } public class Producer { public
Producer(Queue<int> q, SyncEvents e) { _queue = q; _syncEvents = e; } // Producer.ThreadRun public void
ThreadRun() { int count = 0; Random r = new Random(); while (!_syncEvents.ExitThreadEvent.WaitOne(0,
false)) { lock (((ICollection)_queue).SyncRoot) { while (_queue.Count < 20) {
_queue.Enqueue(r.Next(0,100)); _syncEvents.NewItemEvent.Set(); count++; } } }
Console.WriteLine("Producer thread: produced {0} items", count); } private Queue<int> _queue; private
SyncEvents _syncEvents; } public class Consumer { public Consumer(Queue<int> q, SyncEvents e) { _queue
= q; _syncEvents = e; } // Consumer.ThreadRun public void ThreadRun() { int count = 0; while
(WaitHandle.WaitAny(_syncEvents.EventArray) != 1) { lock (((ICollection)_queue).SyncRoot) { int item =
Visual C# Consolidado 385
_queue.Dequeue(); } count++; } Console.WriteLine("Consumer Thread: consumed {0} items", count); }
private Queue<int> _queue; private SyncEvents _syncEvents; } public class ThreadSyncSample { private
static void ShowQueueContents(Queue<int> q) { lock (((ICollection)q).SyncRoot) { foreach (int item in q) {
Console.Write("{0} ", item); } } Console.WriteLine(); } static void Main() { Queue<int> queue = new
Queue<int>(); SyncEvents syncEvents = new SyncEvents(); Console.WriteLine("Configuring worker
threads..."); Producer producer = new Producer(queue, syncEvents); Consumer consumer = new
Consumer(queue, syncEvents); Thread producerThread = new Thread(producer.ThreadRun); Thread
consumerThread = new Thread(consumer.ThreadRun); Console.WriteLine("Launching producer and
consumer threads..."); producerThread.Start(); consumerThread.Start(); for (int i=0; i<4; i++) {
Thread.Sleep(2500); ShowQueueContents(queue); } Console.WriteLine("Signaling threads to terminate...");
syncEvents.ExitThreadEvent.Set(); producerThread.Join(); consumerThread.Join(); } }
Sada de exemplo
Configuring worker threads... Launching producer and consumer threads... 22 92 64 70 13 59 9 2 43 52 91
98 50 96 46 22 40 94 24 87 79 54 5 39 21 29 77 77 1 68 69 81 4 75 43 70 87 72 59 0 69 98 54 92 16 84 61
30 45 50 17 86 16 59 20 73 43 21 38 46 84 59 11 87 77 5 53 65 7 16 66 26 79 74 26 37 56 92 Signalling
threads to terminate... Consumer Thread: consumed 1053771 items Producer thread: produced 1053791
items
COMO: Usar um pool de threads (Guia de programao C#)
A pool de segmentos uma coleo de segmentos que podem ser usados para executar um
nmero de tarefas em segundo plano. (Consulte Usando Threading Para obter informaes
detalhadas.) Isso deixa o segmento primrio livre para executar outras tarefas de forma
assncrona.
Pools segmento geralmente so empregados em aplicativos de servidor. Cada solicitao de
entrada atribuda a um segmento do pool do segmento, para a solicitao pode ser processada
de forma assncrona, sem atrasar o processamento de solicitaes subseqentes amarrando
backup o segmento primrio ou.
Depois que um segmento no pool conclui a tarefa, ele retornado para uma fila de segmentos de
espera, onde ele pode ser reutilizado. Essa reutilizao permite que aplicativos para evitar o custo
de criar um novo segmento para cada tarefa.
Pools segmento normalmente ter um nmero mximo de segmentos. Se estiver ocupados, todos
os segmentos tarefas adicionais so colocadas na fila at que eles podem ser atendidos medida
segmentos se tornam disponveis.
Voc pode implementar seu prprio pool do segmento, mas ele mais fcil de usar o pool de
segmentos fornecido pelo .NET Framework por meio da ThreadPool classe.
O exemplo a seguir usa o pool de segmentos do .NET Framework para calcular o Fibonacci
resultado de dez nmeros entre 20 e 40. Cada Fibonacci resultado representado pela classe
Fibonacci, que fornece um mtodo chamado ThreadPoolCallback que executa o clculo. Um objeto
que representa cada valor Fibonacci criado e passado para QueueUserWorkItem o
ThreadPoolCallback mtodo que atribui um segmento disponvel no pool para executar o mtodo.
Como cada Fibonacci objeto dado um valor semi-Random para calcular, e como ser cada um
dos segmentos dez ser competindo de Tempo processador, no h um meio para ser instrudos
com antecedncia quanto tempo levar para todos os resultados dez deve ser calculado. por
isso que cada Fibonacci objeto passado uma instncia da classe ManualResetEvent durante a
Visual C# Consolidado 386
construo. Cada objeto sinaliza o objeto de evento fornecido quando seu clculo estiver
concludo, que permite o segmento primrio para execuo de bloco com WaitAll at que todos os
objetos dez Fibonacci ter calculado um resultado. O Main mtodo exibir cada Fibonacci resultado.
Exemplo
C#
using System; using System.Threading; public class Fibonacci { public Fibonacci(int n, ManualResetEvent
doneEvent) { _n = n; _doneEvent = doneEvent; } // Wrapper method for use with thread pool. public void
ThreadPoolCallback(Object threadContext) { int threadIndex = (int)threadContext;
Console.WriteLine("thread {0} started...", threadIndex); _fibOfN = Calculate(_n);
Console.WriteLine("thread {0} result calculated...", threadIndex); _doneEvent.Set(); } // Recursive method
that calculates the Nth Fibonacci number. public int Calculate(int n) { if (n <= 1) { return n; } return
Calculate(n - 1) + Calculate(n - 2); } public int N { get { return _n; } } private int _n; public int FibOfN { get {
return _fibOfN; } } private int _fibOfN; private ManualResetEvent _doneEvent; } public class
ThreadPoolExample { static void Main() { const int FibonacciCalculations = 10; // One event is used for each
Fibonacci object ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations]; Random r = new Random(); // Configure and
launch threads using ThreadPool: Console.WriteLine("launching {0} tasks...", FibonacciCalculations); for
(int i = 0; i < FibonacciCalculations; i++) { doneEvents[i] = new ManualResetEvent(false); Fibonacci f = new
Fibonacci(r.Next(20,40), doneEvents[i]); fibArray[i] = f;
ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i); } // Wait for all threads in pool to calculation...
WaitHandle.WaitAll(doneEvents); Console.WriteLine("All calculations are complete."); // Display the
results... for (int i= 0; i<FibonacciCalculations; i++) { Fibonacci f = fibArray[i];
Console.WriteLine("Fibonacci({0}) = {1}", f.N, f.FibOfN); } } }
Sada de exemplo
launching 10 tasks... result calculated... result calculated... result calculated... result calculated... result
calculated... result calculated... result calculated... result calculated... result calculated... result calculated...
all calculations complete Fibonacci(22) = 17711 Fibonacci(25) = 75025 Fibonacci(32) = 2178309
Fibonacci(36) = 14930352 Fibonacci(32) = 2178309 Fibonacci(26) = 121393 Fibonacci(35) = 9227465
Fibonacci(23) = 28657 Fibonacci(39) = 63245986 Fibonacci(22) = 17711
COMO: Pesquisar em seqncias de caracteres utilizando expresses regulares (Guia de
programao C#)
A System.Text.RegularExpressions.Regex classe pode ser usada para procurar seqncias.
Essas pesquisas podem variar em complexidade de muito simples a fazer uso total de expresses
regulares. A seguir so dois exemplos de seqncia pesquisar usando a Regex classe. Para obter
mais informaes, consulte Expresses regulares .NET Framework.
Exemplo
O cdigo a seguir um aplicativo de console que realiza uma pesquisa simples maisculas de
minsculas das seqncias de caracteres em uma matriz. O mtodo
System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.Regul
arExpressions.RegexOptions) esttico executa a pesquisa fornecida seqncia para pesquisar e
uma seqncia contendo o padro de pesquisa. Nesse caso, um argumento terceiro usado para
indicar que caso deve ser ignorado. Para obter mais informaes, consulte
System.Text.RegularExpressions.RegexOptions.
Visual C# Consolidado 387
C#
class TestRegularExpressions { static void Main() { string[] sentences = { "cow over the moon", "Betsy the
Cow", "cowering in the corner", "no match here" }; string sPattern = "cow"; foreach (string s in sentences) {
System.Console.Write("{0,24}", s); if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern,
System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { System.Console.WriteLine(" (match for '{0}'
found)", sPattern); } else { System.Console.WriteLine(); } } } }
Sada
cow over the moon (match for 'cow' found) Betsy the Cow (match for 'cow' found) cowering in the corner
(match for 'cow' found) no match here
O cdigo a seguir um aplicativo de console que usa expresses regulares para validar o formato
da cada seqncia em uma matriz. A validao requer que cada seqncia assumem a forma de
um nmero de telefone no qual trs grupos de dgitos so separados por hfen, os primeiros dois
grupos conter trs dgitos, e o terceiro grupo contm quatro dgitos. Isso feito com a expresso
^\\d{3}-\\d{3}-\\d{4}$ regular. Para obter mais informaes, consulte Elementos de idioma de
expresses regulares.
C#
class TestRegularExpressionValidation { static void Main() { string[] numbers = { "123-456-7890", "444-
234-22450", "690-203-6578", "146-893-232", "146-839-2322", "4007-295-1111", "407-295-1111", "407-2-
5555", }; string sPattern = "^\\d{3}-\\d{3}-\\d{4}$"; foreach (string s in numbers) {
System.Console.Write("{0,14}", s); if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern)) {
System.Console.WriteLine(" - valid"); } else { System.Console.WriteLine(" - invalid"); } } } }
Sada
123-456-7890 - valid 444-234-22450 - invalid 690-203-6578 - valid 146-893-232 - invalid 146-839-2322 -
valid 4007-295-1111 - invalid 407-295-1111 - valid 407-2-5555 - invalid
COMO: Unir vrias seqncias de caracteres (Guia de programao C#)
H duas maneiras para ingressar em vrias seqncias: usando o + operador que a String classe
overloads, e usando a StringBuilder classe. O + operador fcil de usar e torna para intuitivo
cdigo, mas ele funciona em seqncia; uma nova seqncia criada para cada uso do operador,
portanto encadeamento vrios operadores juntos ineficiente. Por exemplo:
C#
string two = "two"; string str = "one " + two + " three"; System.Console.WriteLine(str);
Embora quatro seqncias aparecem no cdigo, a trs seqncias sendo associados e a
seqncia de caracteres que contm todos os trs, final cinco seqncias so criadas no total
porque as primeiras duas seqncias esto associadas primeiro, criar uma seqncia contendo "
Um dois ". O terceiro acrescentado separadamente, formando a seqncia de caracteres
armazenada no str final.
Como alternativa, a StringBuilder classe pode ser usada para adicionar cada seqncia a um
objeto que cria a seqncia final em uma etapa. Essa estratgia demonstrada no exemplo a
seguir.
Exemplo
Visual C# Consolidado 388
O cdigo a seguir usa o mtodo acrscimo da classe StringBuilder Para ingressar em trs
seqncias sem o efeito do + operador Chaining.
C#
class StringBuilderTest { static void Main() { string two = "two"; System.Text.StringBuilder sb = new
System.Text.StringBuilder(); sb.Append("one "); sb.Append(two); sb.Append(" three");
System.Console.WriteLine(sb.ToString()); string str = sb.ToString(); System.Console.WriteLine(str); } }
COMO: Pesquisar em seqncias de caracteres utilizando mtodos de String (Guia de
programao C#)
O Seqncia Tipo, que um alias para a System.String classe, fornece um nmero de mtodos
til para pesquisar o contedo de uma seqncia. O exemplo a seguir utiliza e EndsWith
Mtodos., StartsWith a IndexOf, LastIndexOf
Exemplo
C#
class StringSearch { static void Main() { string str = "A silly sentence used for silly purposes.";
System.Console.WriteLine("'{0}'",str); bool test1 = str.StartsWith("a silly");
System.Console.WriteLine("starts with 'a silly'? {0}", test1); bool test2 = str.StartsWith("a silly",
System.StringComparison.OrdinalIgnoreCase); System.Console.WriteLine("starts with 'a silly'? {0} (ignoring
case)", test2); bool test3 = str.EndsWith("."); System.Console.WriteLine("ends with '.'? {0}", test3); int first =
str.IndexOf("silly"); int last = str.LastIndexOf("silly"); string str2 = str.Substring(first, last - first);
System.Console.WriteLine("between two 'silly' words: '{0}'", str2); } }
Sada
'A silly sentence used for silly purposes.' starts with 'a silly'? False starts with 'a silly'? True (ignore case)
ends with '.'? True between two 'silly' words: 'silly sentence used for '
COMO: Analisar seqncias usando o mtodo Split (Guia de programao C#)
O exemplo de cdigo a seguir demonstra como uma seqncia pode ser analisado usando o
System.String.Split mtodo. Esse mtodo funciona, retornando uma matriz de seqncias, onde
cada elemento uma palavra. Como entrada, Split leva uma matriz de caracteres que indicam
quais caracteres so a ser usado como delimitadores. Neste exemplo, espaos, vrgulas, pontos,
dois-pontos, e guias so usados. Uma matriz contendo esses delimitadores passado para Split,
e cada palavra na frase ser exibida separadamente usando a matriz de seqncias de caracteres
resultante.
Exemplo
C#
class TestStringSplit { static void Main() { char[] delimiterChars = { ' ', ',', '.', ':', '\t' }; string text = "one\ttwo
three:four,five six seven"; System.Console.WriteLine("Original text: '{0}'", text); string[] words =
text.Split(delimiterChars); System.Console.WriteLine("{0} words in text:", words.Length); foreach (string s
in words) { System.Console.WriteLine(s); } } }
Sada
Original text: 'one two three:four,five six seven' 7 words in text: one two three four five six seven
COMO: Criar uma unio C/C++ usando atributos (Guia de programao C#)
Visual C# Consolidado 389
Usando atributos Voc pode personalizar como estruturas so dispostas na memria. Por
exemplo, voc pode criar o que conhecido como uma unio em C/C usando e FieldOffset
Atributos. o StructLayout(LayoutKind.Explicit)
Exemplo
Nesse segmento de cdigo, todos os campos de TestUnion incio no mesmo local na memria.
C#
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)] struct TestUnion {
[System.Runtime.InteropServices.FieldOffset(0)] public int i;
[System.Runtime.InteropServices.FieldOffset(0)] public double d;
[System.Runtime.InteropServices.FieldOffset(0)] public char c;
[System.Runtime.InteropServices.FieldOffset(0)] public byte b; }
A seguir outro exemplo onde incio campos em diferente explicitamente configurar locais.
C#
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)] struct TestExplicit {
[System.Runtime.InteropServices.FieldOffset(0)] public long lg;
[System.Runtime.InteropServices.FieldOffset(0)] public int i1;
[System.Runtime.InteropServices.FieldOffset(4)] public int i2;
[System.Runtime.InteropServices.FieldOffset(8)] public double d;
[System.Runtime.InteropServices.FieldOffset(12)] public char c;
[System.Runtime.InteropServices.FieldOffset(14)] public byte b; }
Os dois int campos, i1 e i2, compartilhar os mesmos locais como lg de memria. Esse tipo de
controle sobre layout struct til quando usando invocao de plataforma.
COMO: Criar e usar DLLs em C# (Guia de programao C#)
Uma biblioteca de vnculo dinmica (DLL) est vinculada ao seu programa em tempo de
execuo. Para demonstrar Criando e usando uma DLL, considere o seguinte cenrio:
Add.cs o arquivo de origem que contm o mtodo Add(long i, long j). Ela retorna a soma de
seus parmetros. A classe AddClass que contm o mtodo Add um membro do espao para
nome UtilityMethods.
Mult.cs o cdigo fonte que contm o mtodo Multiply(long x, long y). Ele retorna o produto
de seus parmetros. A classe MultiplyClass que contm o mtodo Multiply tambm um
membro do espao para nome UtilityMethods.
TestCode.cs o arquivo que contm o Main mtodo. Ele usa os mtodos no arquivo DLL para
calcular a soma e o produto dos argumentos em tempo de execuo.
Exemplo
C#
// File: Add.cs namespace UtilityMethods { public class AddClass { public static long Add(long i, long j) {
return (i + j); } } }
Visual C# Consolidado 390
C#
// File: Mult.cs namespace UtilityMethods { public class MultiplyClass { public static long Multiply(long x,
long y) { return (x * y); } } }
C#
// File: TestCode.cs using UtilityMethods; class TestCode { static void Main(string[] args) {
System.Console.WriteLine("Calling methods from MathLibrary.DLL:"); if (args.Length != 2) {
System.Console.WriteLine("Usage: TestCode <num1> <num2>"); return; } long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]); long sum = AddClass.Add(num1, num2); long product =
MultiplyClass.Multiply(num1, num2); System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
System.Console.WriteLine("{0} * {1} = {2}", num1, num2, product); } }
Este arquivo contm o algoritmo que usa os mtodos DLL, Add e Multiply. Comear com analisar
os argumentos inseridos da linha de comando, num1 e num2. Ele calcula a soma, usando o Add
mtodo na classe AddClass, e o produto usando o Multiply mtodo na classe MultiplyClass.
Observe que a using diretiva no incio do arquivo permite-lhe usar a classe no qualificado nomes
para consultar os mtodos DLL ao tempo de compilao, da seguinte maneira:
C#
MultiplyClass.Multiply(num1, num2);
Caso contrrio, voc ter para usar os nomes totalmente qualificados, da seguinte maneira:
C#
UtilityMethods.MultiplyClass.Multiply(num1, num2);
Execuo
Para executar o programa, digite o nome do arquivo exe, seguido por dois nmeros, da seguinte
maneira:
TestCode 1234 5678
Sada
Calling methods from MathLibrary.DLL: 1234 + 5678 = 6912 1234 * 5678 = 7006652
Compilando o cdigo
Para criar o arquivo MathLibrary.DLL, compilar os dois arquivos Add.cs e Mult.cs Usando a linha de
comando a seguir:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs
A /Target:Library opo de compilador informa o compilador para dar sada uma DLL em vez de
um arquivo EXE. A / Fora opo de compilador seguida por um nome de arquivo utilizada para
especificar o nome do arquivo DLL Caso contrrio, o compilador usa o primeiro arquivo (Add.cs.)
como o nome da DLL
Para criar o arquivo executvel, TestCode.exe, use a seguinte linha de comando:
csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs
Visual C# Consolidado 391
A /out opo de compilador informa o compilador para produzir sada de um arquivo EXE e
especifica o nome do arquivo de sada). (TestCode.exe Esta opo de compilador opcional. A
/Reference opo de compilador Especifica o arquivo DLL ou arquivos que usa este programa.
COMO: Determinar se um arquivo um mdulo (assembly) (Guia de programao C#)
Um arquivo um conjunto se e somente se ele gerenciada, e contm uma entrada do conjunto
nos seus metadados. Para obter mais informaes sobre conjuntos e metadados, consulte o
tpico Manifesto do Assembly.
Como determinar se um arquivo um conjunto manualmente
1. Iniciar o Disassembler MSIL (Ildasm.exe).
2. Carregar o arquivo que deseja testar.
3. Se ILDASM, arquivo relatrios no que o arquivo um executvel porttil (PE), ele um
conjunto no. Para obter mais informaes, consulte o tpico Como Visualizar o Contedo
de um Assembly.
Como determinar se um arquivo um conjunto programaticamente
1. Chame o GetAssemblyName mtodo, passando o caminho de arquivo completo e nome
do arquivo que voc est testando.
2. Se uma BadImageFormatException exceo acionada, o arquivo um conjunto no.
Exemplo
Este exemplo testa uma DLL para verificar se ele um conjunto.
C#
class TestAssembly { static void Main() { try { System.Reflection.AssemblyName testAssembly =
System.Reflection.AssemblyName.GetAssemblyName(@"C:\WINDOWS\system\avicap.dll");
System.Console.WriteLine("Yes, the file is an Assembly."); } catch (System.IO.FileNotFoundException e) {
System.Console.WriteLine("The file cannot be found."); } catch (System.BadImageFormatException e) {
System.Console.WriteLine("The file is not an Assembly."); } catch (System.IO.FileLoadException e) {
System.Console.WriteLine("The Assembly has already been loaded."); } } }
O GetAssemblyName mtodo carrega o arquivo de teste, e depois libera ele depois que as
informaes leitura.
Sada
The file is not an Assembly.
COMO: Carregar e descarregar mdulos (assemblies) (Guia de programao C#)
As montagens referenciadas por seu programa automaticamente ser carregadas ao tempo de
criao, mas tambm possvel carregar conjuntos especficos para o domnio do aplicativo atual
em tempo de execuo. Para obter mais informaes, consulte Domnios de aplicativo.
No h um meio para descarregar um conjunto individual sem descarregar todos os domnios de
aplicativos que contm ele. Mesmo se o conjunto sai do escopo, o arquivo de montagem real
permanecer carregado at que todos os domnios de aplicativos que contm ele sejam
descarregados.
Visual C# Consolidado 392
Se voc desejar descarregar alguns conjuntos mas no outros, considere criar um novo domnio
do aplicativo executar o cdigo dentro desse domnio, e ento descarregar desse domnio do
aplicativo. Para obter mais informaes, consulte Como executar cdigo em outro domnio de
aplicativo:.
Para carregar um conjunto em um domnio de aplicativo
Use uma das vrias a carregar mtodos contidos nas classes AppDomain e
System.Reflection. Para obter mais informaes, consulte Carregar conjuntos em um domnio
de aplicativo.
Para descarregar um domnio de aplicativo
Para obter informaes detalhadas sobre aspectos especficos da linguagem C#, consulte
a Referncia C#.
Para criar todas as comunicaes nas indstrias padro, para garantir que cdigos
baseados no .NET Framework possam se integrar a qualquer outro cdigo.
O .NET Framework tem dois componentes principais: o Common Language Runtime e a biblioteca
de classes do .NET Framework. O Common Language Runtime a fundao do .NET
Framework. Voc pode pensar no Runtime como um agente que dirige o cdigo no tempo de
execuo, fornecendo servios principais como gerenciamento de memria, gerenciamento de
segmento e arquitetura de comunicao remota, enquanto foram, tambm, a segurana de tipos
estritos e outras formas de preciso de cdigo que promovem segurana e robustez. Na verdade,
o conceito de gerenciamento de cdigo um princpio fundamental do Runtime. O cdigo que visa
o Runtime conhecido como cdigo gerenciado, enquanto o cdigo que no visa o Runtime
conhecido como cdigo no gerenciado. A biblioteca de classes, outro componente principal do
.NET Framework, uma coleo de objetos orientados de tipos reutilizveis, que voc pode usar
para desenvolver aplicativos, variando de linhas de comando tradicionais ou aplicativos grficos
de interfaces de usurios (GUI), para aplicativos com base nas inovaes mais recentes
fornecidas pelo ASP.NET, como Web Forms e Servios XML da Web.
O .NET Framework pode ser hospedado por componentes no gerenciados que carregam o
Common Language Runtime em seus processos, e inicializam a execuo de cdigo gerenciado.
Assim, criam um ambiente de software que pode explorar os recursos gerenciados e no
gerenciados. O .NET Framework no apenas fornece vrios Runtime Hosts, como tambm
suporta o desenvolvimento de Runtime Hosts de terceiros.
Por exemplo, o ASP.NET hospeda o Runtime para fornecer um ambiente escalonvel, do lado do
servidor, para cdigo gerenciado. ASP.NET trabalha diretamente com o tempo de execuo para
ativar os aplicativos ASP.NET e Servios XML da Web, ambos sero discutidos posteriormente
neste tpico.
Internet Explorer um exemplo de um aplicativo no gerenciado que hospeda o Runtime (na
forma de uma extenso tipo MIME). Usar o Internet Explorer para hospedar o Runtime, permite
que voc incorpore componentes gerenciados ou controles Windows Forms em documentos
HTML. Hospedar o Runtime dessa maneira, torna possvel o gerenciamento do cdigo mvel
(semelhante a controles Microsoft ActiveX), mas com melhorias significativas que somente o
cdigo gerenciado pode oferecer, como execuo semi-confivel e armazenamento de arquivos
isolados.
A ilustrao a seguir mostra o relacionamento do Common Language Runtime e da biblioteca de
classes para seus aplicativos e para o sistema geral. A ilustrao tambm mostra como o cdigo
gerenciado opera dentro uma arquitetura maior.
NET Framework em contexto
Visual C# Consolidado 412
As sees a seguir descrevem os recursos e componentes principais do .NET Framework com
mais detalhes.
Recursos do Common Language Runtime
O Common Language Runtime gerencia memria, execuo de segmento, execuo do cdigo,
verificao de segurana do cdigo, compilao e outros servios do sistema. Esses recursos so
intrnsecos para o cdigo gerenciado, que executa no Common Language Runtime.
Quanto segurana, os componentes gerenciados so concedidos variando os graus da
confiana, dependendo do nmero de fatores que incluem sua origem (como a Internet, rede
corporativa ou computador local). Isso significa que um componente gerenciado pode ou no ser
capaz de executar operaes de acesso de arquivo, operaes de registro de acesso ou outras
funes confidenciais, mesmo se ele estiver sendo usado no mesmo aplicativo ativo.
O Runtime impe segurana de acesso a cdigo. Por exemplo, os usurios podem confiar que um
executvel, incorporado em uma pgina da Web, pode reproduzir uma animao na tela ou tocar
uma msica, mas no pode acessar seus dados pessoais, arquivos de sistema ou rede. Os
recursos de segurana do Runtime ativam o legtimo Internet-deployed software para ser
caracterizado, excepcionalmente, como rico.
O Runtime tambm impe robustez ao cdigo ao implementar uma estrita infra-estrutura Type-
and-Code-Verification chamada Common Type System (CTS). O CTS assegura que todo cdigo
gerenciado autodescritivo. Os diversos compiladores de linguagem da Microsoft e de terceiros
geram cdigos gerenciados que esto em conformidade com o CTS. Isso significa que cdigos
gerenciados podem consumir outros tipos gerenciados e instncias, enquanto foram estritamente
a fidelidade tipo e segurana.
Alm disso, o ambiente gerenciado do Runtime elimina muitos problemas comuns de software.
Por exemplo, o Runtime automaticamente manipula o layout de objetos e gerencia referncias a
eles, liberando-os quando no esto sendo usados. Este gerenciamento automtico de memria
resolve os dois erros mais comuns de aplicativos: vazamentos e referncias invlidas de memria.
O Runtime tambm acelera a produtividade do desenvolvedor. Por exemplo, os programadores
podem escrever aplicativos em sua linguagem de desenvolvimento de preferncia, mas aproveitar
completamente o Runtime, a biblioteca de classes e componentes escritos em outras linguagens,
por outros desenvolvedores. Qualquer fornecedor de compilador que escolher direcionar o
Runtime pode faz-lo. Compiladores de linguagem que direcionam o .NET Framework tornam os
recursos do .NET Framework disponveis para cdigos existentes, escritos nessa linguagem,
facilitando bastante o processo de migrao para os aplicativos existentes.
O Runtime foi criado para o software do futuro, mas tambm suporta software atuais.
Interoperabilidade entre cdigos gerenciados e no gerenciados permite aos desenvolvedores
continuar a usar os componentes COM e DLLs necessrios.
O Runtime projetado para melhorar o desempenho. Embora o Common Language Runtime
fornea vrios servios padro de Runtime, o cdigo gerenciado nunca interpretado. Um recurso
chamado compilao Just-In-Time (JIT) ativa todos os cdigos gerenciados para executar na
linguagem nativa da mquina do sistema, no qual ele estiver em execuo. Enquanto isso, o
gerenciador de memria remove as possibilidades de memria fragmentada e aumenta a
localidade-de-referncia da memria, melhorando ainda mais o desempenho.
Finalmente, o Runtime pode ser hospedado por aplicativos de alto desempenho, do lado do
servidor, como o Microsoft SQL Server e Servios de Informaes da Internet (IIS). Esta
infra-estrutura permite que voc use cdigo gerenciado para escrever sua lgica corporativa,
Visual C# Consolidado 413
enquanto aproveita o desempenho superior dos melhores servidores de empresa que suportam
runtime hosting.
Biblioteca de Classes do .NET Framework
A Biblioteca de classes do .NET Framework uma coleo de tipos reutilizveis que se integram
rigidamente com o Common Language Runtime. A biblioteca de classes orientada a objetos,
fornecendo tipos que seu prprio cdigo gerenciado pode derivar. Isso no s torna os tipos do
.NET Framework fceis de usar, como tambm reduz o tempo associado ao aprendizado de
novos recursos do .NET Framework. Alm disso, componentes de terceiros podem se integrar
totalmente com classes do .NET Framework.
Por exemplo, as classes da coleo .NET Framework implementam um conjunto de interfaces que
voc pode usar para desenvolver suas prprias colees de classes. Sua coleo de classes ser
perfeitamente combinada com as classes do .NET Framework.
Como voc espera de uma biblioteca de classe orientada a objetos, os tipos do .NET Framework
permitem que voc realize uma gama de tarefas comuns de programao, incluindo tarefas como
gerenciamento de seqncia de caracteres, coleta de dados, conectividade do banco de dados e
acesso a arquivos. Alm dessas tarefas comuns, a biblioteca de classes inclui tipos que oferecem
suporte a uma variedade de cenrios especializados de desenvolvimento. Por exemplo, voc
pode usar o .NET Framework para desenvolver os seguintes tipos de aplicativos e servios:
Aplicativos de console.
Aplicativos ASP.NET.
Servios do Windows.
Por exemplo, as classes Windows Forms so um conjunto abrangente de tipos reutilizveis que
simplificam vastamente o desenvolvimento do Windows GUI. Se voc criar um aplicativo de Web
Form ASP.NET, voc pode usar as classes Web Forms.
Desenvolvimento de Aplicativos Cliente
Aplicativos cliente so os mais prximos de um estilo tradicional de um aplicativo baseado em
programao Windows. Esses so os tipos de aplicativos que exibem janelas ou formulrios na
rea de trabalho, permitindo a um usurio executar uma tarefa. Aplicativos cliente incluem
aplicativos como processadores de texto e planilhas, bem como aplicativos de negcios
personalizados, como ferramentas de entrada de dados, ferramentas de relatrios e assim por
diante. Aplicativos cliente geralmente empregam janelas, menus, botes e outros elementos GUI.
Eles acessam, provavelmente, recursos locais como o sistema de arquivos e perifricos, como
impressoras.
Outro tipo de aplicativo cliente o tradicional controle ActiveX (agora, substitudo pelo o controle
gerenciado do Windows Forms) implantado atravs da Internet como pgina da Web. Este
aplicativo se parece muito com outros aplicativos clientes: ele executado de forma nativa, tem
acesso a recursos locais e inclui elementos grficos.
No passado, os desenvolvedores criavam esses aplicativos utilizando C/C++ em conjunto com o
Microsoft Foundation Classes (MFC) ou com um ambiente de desenvolvimento de aplicativos
rpidos (RAD) como o Microsoft Visual Basic . O .NET Framework incorpora aspectos desses
produtos existentes em um ambiente de desenvolvimento simples e consistente, que
drasticamente simplifica o desenvolvimento de aplicativos cliente.
Visual C# Consolidado 414
As classes do Windows Forms contidas no .NET Framework so projetadas para serem usadas
para o desenvolvimento do GUI. Facilmente, voc pode criar janelas de comando, botes, menus,
barras de ferramentas e outros elementos de tela, com a flexibilidade necessria para acomodar
mudanas de necessidades comerciais
Por exemplo, o .NET Framework fornece propriedades simples para ajustar atributos visuais
associados a formulrios. Em alguns casos o sistema operacional base no d suporte para
alterao direta desses atributos, e nesse caso o .NET Framework automaticamente recria os
formulrios. Essa uma das vrias maneiras na qual o .NET Framework integra a interface do
desenvolvedor, tornando a codificao simples e mais consistente.
Diferentemente de controle ActiveX, controles Windows Forms tm acesso semi-confivel ao
computador do usurio. Isso significa que execuo binria ou nativa de cdigo pode acessar
alguns dos recursos do sistema do usurio (como elementos GUI e acesso limitado ao arquivo)
sem poder acessar ou comprometer outros recursos. Devido segurana de acesso ao cdigo,
muitos aplicativos que antes necessitavam ser instalados no sistema de um usurio, agora podem
ser implantados atravs da Web. Seus aplicativos podem implementar os recursos de um
aplicativo local, enquanto so implantadas como uma pgina da Web.
Desenvolvimento de aplicativos servidores
Aplicativos do servidor no mundo gerenciado so implementados atravs de Runtime Hosts.
Aplicativos no gerenciados hospedam o Common Language Runtime, que permite que seu
cdigo gerenciado personalizado controle o comportamento do servidor. Esse modelo fornece a
voc todos os recursos do Common Language Runtime e biblioteca de classes, enquanto ganha o
desempenho e escalabilidade do servidor host.
A ilustrao a seguir mostra um esquema de rede bsica com cdigo gerenciado em execuo,
em ambientes de servidores diferentes. Servidores como o IIS e SQL Server podem executar
operaes padro, enquanto a lgica do seu aplicativo executa atravs do cdigo gerenciado.
Cdigo gerenciado do lado do servidor
ASP.NET o ambiente de hospedagem que permite aos desenvolvedores usar o.NET Framework
para direcionar aplicativos baseados na Web. Entretanto, o ASP.NET mais do que apenas um
Runtime Host; ele uma arquitetura completa para desenvolver sites e objetos Internet-
Distributed, usando cdigo gerenciado. Web Forms e servios XML da Web usam IIS e ASP.NET
como mecanismos de publicao de aplicativos, e ambos tm uma coleo de classes que so
suportadas pelo .NET Framework.
Servios XML da Web, uma evoluo importante na tecnologia baseada na Web, so
componentes de aplicativos distribudos, do lado do servidor, semelhante a sites comuns da Web.
Entretanto, diferentemente dos aplicativos baseados na Web, componentes de servios XML da
Web no tm interface de usurio, e no so direcionados para navegadores como o Internet
Explorer e Netscape Navigator. Em vez disso, servios XML da Web consistem em componentes
de software reutilizveis, projetados para serem consumidos por outros aplicativos, como
aplicativos cliente tradicionais, aplicativos baseados na Web ou mesmo outros servios XML da
Web. Como resultado, a tecnologia dos servios XML da Web est movendo, rapidamente, o
desenvolvimento e implantao de aplicativos para o ambiente altamente distribudo da Internet.
Se voc utilizou verses anteriores da tecnologia ASP, voc imediatamente notar os
aperfeioamentos que ASP.NET e Web Forms oferecem. Por exemplo, voc pode desenvolver
pginas Web Forms em qualquer linguagem que suporte o .NET Framework. Alm disso, seu
cdigo no precisa mais compartilhar o mesmo arquivo com o texto HTTP (embora ele possa
Visual C# Consolidado 415
continuar fazendo isso, se voc preferir). Pginas Web Forms executam na linguagem de mquina
nativa porque, como qualquer outro aplicativo gerenciado, elas aproveitam completamente o
Runtime. Por outro lado, pginas ASP no gerenciadas so sempre colocadas em script e
interpretadas. Pginas ASP.NET so mais rpidas, mais funcionais e mais fceis para
desenvolver do que as pginas ASP no gerenciadas, porque elas interagem com o Runtime
como qualquer aplicativo gerenciado.
O .NET Framework tambm fornece um conjunto de classes e ferramentas para ajudar no
desenvolvimento e consumo de aplicativos de servios XML da Web. Servios XML da Web so
criados em padres como SOAP (um protocolo remoto de chamada de procedimento), XML (um
formato de dados extensvel) e WSDL (Web Services Description Language). O .NET Framework
foi construdo sobre esses padres para promover a interoperabilidade com solues no-
Microsoft.
Por exemplo, a ferramenta WSDL, includa com o SDK do .NET Framework, pode consultar um
servio XML da Web publicado na Web, analisar sua descrio WSDL e produzir cdigo fonte C#
ou Visual Basic, que o aplicativo pode usar para se tornar um cliente do servio XML da Web. O
cdigo fonte pode criar classes derivadas de classes, na biblioteca de classes que trata toda a
comunicao base, usando anlise SOAP e XML. Embora voc possa usar a biblioteca de classes
para consumir diretamente servios XML da Web, a ferramenta WSDL e as outras ferramentas
contidas no SDK facilitam os esforos de desenvolvimento com o .NET Framework.
Se voc desenvolver e publicar seus prprios servios XML da Web, o .NET Framework fornecer
um conjunto de classes compatveis com todos os padres de comunicao como SOAP, WSDL,
e XML. Usar as classes permite que voc enfoque na lgica do seu servio, sem se preocupar
com com a infra-estrutura de comunicao exigida pelo desenvolvimento de software distribudos.
Finalmente, como pginas Web Forms no ambiente gerenciado, seu servio XML da Web ser
executado com a velocidade de linguagem de mquina nativa, usando a comunicao
escalonvel do IIS.
Visual C# Consolidado 416
Common Language Runtime
O .NET Framework fornece um ambiente de tempo de execuo chamado Common Language
Runtime, que executa o cdigo e fornece servios que facilitam o processo de desenvolvimento.
Viso geral do Common Language Runtime
Compiladores e ferramentas expem as funcionalidades do runtime e permitem que voc escreva
cdigo que se beneficia desse ambiente de execuo gerenciado. Cdigo que voc desenvolve
com um compilador de linguagem que visa o runtime chamado cdigo gerenciado; ele se
beneficia de recursos como integrao entre linguagens, tratamento de exceo entre linguagens,
segurana aprimorada, suporte a versionamento e implantao, um modelo simplificado para
interao entre componentes, depurao e servios de perfil.
Para ativar o runtime para fornecer servios de cdigo gerenciado, compiladores de linguagens
devem emitir metadados que descrevem os tipos, membros, e referncias em seu cdigo. Os
metadados so armazenados com o cdigo; todo arquivo executvel portvel (PE) carregvel do
common language runtime contm metadados. O runtime usa metadados para localizar e carregar
classes, organizar instncias na memria, resolver invocaes mtodo, gerar cdigo nativo,
reforar a segurana, e definir limites de contexto em tempo de execuo.
O runtime automaticamente trata de objetos de layout e gerencia referncias a objetos, liberando-
os quando eles no esto sendo usados. Objetos cujos tempos de vida so gerenciados dessa
forma so chamados de dados gerenciados. A coleta de lixo elimina vazamentos de memria e
alguns outros erros comuns de programao. Se seu cdigo gerenciado, voc pode usar dados
gerenciados, dados no gerenciados ou ambos no seu aplicativo .NET Framework. Devido ao fato
de compiladores de linguagens fornecerem seus prprios tipos, como tipos primitivos, voc no
pode sempre saber (ou precisa saber) se seus dados esto sendo gerenciados.
O Common Language Runtime torna fcil a criao de componentes e aplicativos cujos objetos
interagem entre linguagens. Objetos escritos em diferentes linguagens podem se comunicar entre
si, e seus comportamentos podem ser totalmente integrados. Por exemplo, voc pode definir uma
classe e, em seguida, usar uma linguagem diferente para derivar uma classe de sua classe
original ou chamar um mtodo na classe original. Voc tambm pode passar uma instncia de
uma classe para um mtodo de uma classe escrito em uma linguagem diferente. Essa integrao
entre linguagens possvel porque os compiladores de linguagens e ferramentas que miram o
runtime usam um CTS (Common Type System) definido pelo runtime, e eles seguem as regras do
runtime para definir novos tipos, como tambm para criao, uso, persistncia e ligao de tipos.
Como parte de seus metadados, todos os componentes gerenciados transportam informaes
sobre os componentes e recursos dos quais eles foram construdos. O runtime usa essas
informaes para garantir que o componente ou aplicativo tenha as verses especificadas de tudo
o que precisa, o que torna seu cdigo menos suscetvel a quebra devido a alguma dependncia
no encontrada. Informaes de registro e dados do estado no so mais armazenadas no
registro onde eles podem ser difceis para estabelecer e manter. Em vez disso, as informaes
sobre os tipos que voc definir (e suas dependncias) so armazenados com o cdigo como
metadados, fazendo com que as tarefas de replicao de componentes e remoo sejam muito
menos complicadas.
Compiladores de linguagens e ferramentas expem as funcionalidades do runtime de maneira a
serem teis e intuitivas para desenvolvedores. Isso significa que alguns recursos do runtime
devem ser mais notveis em um ambiente que em outro. Como voc experimenta o runtime
depende de qual compiladores de linguagem ou ferramentas voc usa. Por exemplo, se voc for
um desenvolvedor Visual Basic, voc pode notar que com o Common Language Runtime, a
Visual C# Consolidado 417
linguagem Visual Basic tem mais recursos orientados a objetos do que antes. A seguir esto
alguns benefcios do runtime:
Melhorias de desempenho.
Coleta de lixo que gerencia o tempo de vida de objeto sendo a contagem de referncia
desnecessria.
Coleta de lixo.
Estabelece uma estrutura que ajuda a habilitar integrao entre linguagens, segurana de
tipos, e execuo de cdigo de alto desempenho.
Define regras que as linguagens devem seguir, que ajudam a assegurar que objetos
escritos em linguagens diferentes podem interagir entre si.
Viso Geral do CTS (Common Type System)
Esta seo descreve conceitos e define termos que ajudaro a compreender e trabalhar com a
implementao do CTS da sua linguagem.
Classificao de Tipos
O CTS fornece suporte a duas categorias gerais de tipos, cada um delas posteriormente dividida
em subcategorias:
Tipos de valor
Tipos de valor contm diretamente seus dados. Instncias de tipos de valor ou so alocadas na
pilha ou so alocadas internamente em uma estrutura. Tipos de valor podem ser internos
(implementados pelo ambiente de execuo), definidos pelo usurio ou enumeraes. Para
obter uma lista dos tipos valor internos, consulte a Biblioteca de Classes do .NET Framework.
Tipos de referncia
Tipos de referncia armazenam uma referncia para o endereo de memria do valor e so
alocados no heap. Tipos referncia podem ser tipos autodescritivos, tipos ponteiro ou tipos de
interface. O tipo de um tipo de referncia pode ser determinado a partir dos valores de tipos
autodescritivos. Tipos autodescritivos so posteriormente divididos em matrizes e tipos de
classe. Os tipos de classe so classes definidas pelo usurio, tipos de valor convertidos e
delegates.
Variveis que so tipos de valor possuem sua prpria cpia dos dados e, portanto, operaes em
uma varivel no afetam outras variveis. Variveis que so tipos de referncia podem referenciar
o mesmo objeto e, portanto, operaes em uma varivel podem afetar o mesmo objeto
referenciado por outra varivel.
Todos os tipos derivam do tipo base System.Object.
O exemplo a seguir mostra a diferena entre tipos de referncia e tipos de valor.
C#
using System; class Class1 { public int Value = 0; } class Test { static void Main() { int val1 = 0; int val2 = val1;
val2 = 123; Class1 ref1 = new Class1(); Class1 ref2 = ref1; ref2.Value = 123; Console.WriteLine("Values: {0},
{1}", val1, val2); Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value); } }
A sada do programa a seguinte.
Visual C# Consolidado 421
Values: 0, 123 Refs: 123, 123
O diagrama a seguir ilustra como esses tipos esto relacionados. Observe que instncias de tipos
podem ser simplesmente tipos de valor ou tipos autodescritivos, mesmo que haja subcategorias
desses tipos.
Classificao de tipos
Valores e objetos
Valores so representaes binrias de dados. Os tipos fornecem uma maneira de interpretar
esses dados. Um tipo de valor armazenado como uma representao binria dos dados do tipo.
O valor de um tipo de referncia a localidade da seqncia de bits que representam os dados do
tipo.
Cada valor possui um tipo exato que define por completo a representao do valor e as operaes
que so definidas no valor. Valores de tipos autodescritivos so chamados objetos. Enquanto
sempre possvel determinar o tipo exato de um objeto examinando seu valor, no possvel fazer
o mesmo com o um tipo de valor ou tipo ponteiro. Um valor pode ter mais de um tipo. Um valor
cujo tipo implementa uma interface tambm um valor do tipo da interface. Da mesma forma, um
valor cujo tipo deriva de um tipo base tambm um valor desse tipo base.
Tipos e Assemblys
O ambiente de execuo usa assemblys para localizar e carregar tipos. O manifesto do assembly
contm as informaes que o ambiente de execuo usa para resolver todas as referncias de
tipo feitas dentro do escopo do assembly.
Um nome de tipo no ambiente de execuo possui duas partes lgicas: o nome do assembly e o
nome do tipo dentro do assembly. Dois tipos com o mesmo nome, mas em assemblys diferentes,
so definidos como dois tipos distintos.
Visual C# Consolidado 422
Assemblys fornecem consistncia entre o escopo de nomes vistos pelo desenvolvedor e o escopo
de nomes vistos pelo sistema em tempo de execuo. Os desenvolvedores criam tipos no
contexto de um assembly. O contedo do assembly que est sendo criando por um desenvolvedor
estabelece o escopo de nomes que estar disponvel em tempo de execuo.
Tipos e Namespaces
No ponto de vista do ambiente de execuo, um namespace apenas um conjunto de nomes de
tipo. Determinadas linguagens podem ter construes que ajudam os desenvolvedores a formar
grupos lgicos de tipos, mas essas construes no so usadas pelo ambiente de execuo ao
vincular tipos. Assim, ambas as classes Object e String so parte do namespace System, mas o
ambiente de execuo reconhece apenas os nomes completos de cada tipo que so
System.Object e System.String, respectivamente
Voc pode criar um nico assembly que expe tipos que parecem ter vindo de dois namespaces
hierrquicos diferentes, como System.Collections e System.Windows.Forms. Voc tambm pode
criar dois assemblys que exportam tipos cujos nomes contenham MyDll.MyClass.
Se voc criar uma ferramenta para representar tipos em um assembly como pertencentes a um
namespace hierrquico, a ferramenta deve enumerar os tipos em um assembly, ou em um grupo
de assemblys, e analisar os nomes dos tipos a fim de derivar um relacionamento hierrquico.
Definies de Tipo
Voc define novos tipos a partir de tipos existentes. Tipos de valor interno, ponteiros, matrizes e
delegados so definidos quando eles so usados e so referidos como tipos implcitos. Tipos
podem ser aninhados; ou seja, um tipo pode ser um membro de outro tipo.
Uma definio de tipo inclui:
A visibilidade do tipo.
O nome do tipo.
Um tipo derivado pode ocultar um membro herdado definindo um novo membro com a
mesma assinatura. Isso pode ser feito quando deseja-se tornar um membro pblico em privado
ou para definir um novo comportamento para um mtodo herdado que est marcado como
final.
Um tipo derivado pode substituir um mtodo virtual herdado. O novo mtodo fornece uma
nova definio do mtodo original. Essa nova definio ser chamada baseando-se no tipo do
valor em tempo de execuo, em vez de no tipo conhecido em tempo de compilao. Um
mtodo s pode substituir um mtodo virtual se o mtodo virtual no est marcado como final.
O novo mtodo est pelo menos to acessvel quanto o mtodo virtual.
Tipos de valor no Common Type System
A maioria das linguagens de programao fornecem tipos de dados internos, como inteiros e
nmeros de ponto flutuante que so copiados quando eles so passados como argumentos (ou
seja, eles so passados pelo valor). No .NET Framework, esses so os chamados tipos de valor.
O Runtime oferece suporte a dois tipos de tipos de valor:
Uma interface pode ser declarada com qualquer acessibilidade, mas todos membros de
interface devem ter acessibilidade pblica.
Descrio do Assembly.
o
Identidade (nome, verso, cultura, chave pblica).
o
Os tipos que so exportados.
o
Outros conjuntos de que este assembly depende.
o
Permisses de segurana necessrias para executar.
Atributos.
o
Elementos descritivos adicionais que modificam tipos e membros.
Benefcios de Metadados
Os metadados so a chave para um modelo de programao simples, eliminando a necessidade
de arquivos de Interface Definition Language (IDL), arquivos de cabealho ou qualquer mtodo
externo de referncia a componente. Os metadados permitem que linguagens .NET se descrevam
automaticamente de uma maneira neutra com relao a linguagem, sem que o desenvolvedor e o
usurio vejam. Alm disso, metadados so extensveis pelo uso de atributos. Os metadados
oferecem os seguintes benefcios principais:
Arquivos autodescritivos.
Mdulos Common Language Runtime e assemblies so autodescritivos. Os metadados de um
mdulo contm tudo o que ele precisa para interagir com outro mdulo. Os metadados
fornecem automaticamente a funcionalidade de IDL no COM, permitindo que voc use um
arquivo para definio e implementao. Mdulos Runtime e assemblies no exigem registro
com o sistema operacional. Como resultado, as descries usadas pelo Runtime sempre
refletem o cdigo real no arquivo compilado, o que aumenta a confiabilidade do aplicativo.
Atributos.
O .NET Framework permite que voc declare tipos especficos de metadados, chamados
atributos, no seu arquivo compilado. Os atributos podem ser encontradas em toda a .NET
Framework, e so usados para controlar mais detalhadamente como o seu programa se
comporta em tempo de execuo. Alm disso, voc pode emitir seus prprios metadados
personalizados em arquivos do .NET Framework, atravs de atributos definidos pelo usurio.
Para mais informaes, consulte Estendendo Metadados Usando Atributos.
Estrutura e uso de metadados
Embora a maioria dos desenvolvedores no necessitem saber os detalhes da implementao de
metadados, alguns podem querer uma compreenso mais profunda. Esta seo fornece uma
viso geral sobre como metadados so armazenados em um arquivo executvel porttil (pe) do
.NET Framework e uma explicao sobre a funo dos metadados em execuo gerenciadas.
Voc no precisa para ler esta seo para entender a programao .NET ou como usar atributos.
Metadados e Estrutura do Arquivos PE
Os metadados so armazenadas em uma seo de um arquivo executvel portvel (PE) do .NET
Framework, enquanto que a Microsoft Intermediate Language (MSIL) armazenada em outra
seo do arquivo PE. A parte de metadados do arquivo contm uma srie de tabelas e estruturas
de dados heap. A parte MSIL contm smbolos MSIL e de metadados que fazem referncia a
parte de metadados do arquivo PE. Voc pode encontrar smbolos de metadados ao usar
ferramentas como o Desassemblador do MSIL (Ildasm.exe) para exibir o MSIL do seu cdigo ou o
Depurador do Ambiente de Execuo (Cordbg.exe) para executar um despejo de memria.
Tabelas e Heaps de Metadados
Cada tabela de metadados contm informaes sobre os elementos do seu programa. Por
exemplo, uma tabela de metadados descreve as classes em seu cdigo, outra descreve os
campos, e assim por diante. Se existirem dez classes em seu cdigo, a tabela de classes ter dez
linhas, uma para cada classe. Tabelas de metadados referenciam outras tabelas e heaps. Por
exemplo, a tabela de metadados de classes faz referncia a tabela de mtodos.
Metadados tambm armazenam informaes em quatro estruturas de heap: string, BLOB, string
de usurio e GUID. Todas as strings usadas para nomear tipos e membros so armazenadas no
heap de strings. Por exemplo, uma tabela de mtodos no armazena diretamente o nome de um
mtodo especfico, mas aponta para nome do mtodo armazenado no heap de strings.
Smbolos de Metadados
Cada linha de cada tabela de metadados unicamente identificada na parte MSIL do arquivo PE
por um smbolo de metadados. Smbolos de metadados so conceitualmente semelhantes a
ponteiros, persistentes na MSIL, e referenciam uma tabela de metadados especfica.
Um smbolo de metadados um nmero de quatro bytes. O byte superior denota a tabela de
metadados, a qual se refere um token especfico (mtodo, tipo, e assim por diante). Os trs bytes
restantes especificam a linha na tabela de metadados que corresponde ao elemento de
Visual C# Consolidado 435
programao sendo descrito. Se voc definir um mtodo em C# e compil-lo em um arquivo PE, o
seguinte smbolo de metadados pode ser gerado na parte MSIL do arquivo PE:
0x06000004
O byte superior (0x06) indica que esse um token MethodDef. Os trs bytes inferiores (000004)
informam ao Common Language Runtime para procurar na quarta linha da tabela MethodDef
pelas informaes que descrevem essa definio de mtodo.
Metadados em um arquivo PE
Quando um programa compilado para o Common Language Runtime, ele convertido em um
arquivo PE que consiste de trs partes. A tabela a seguir descreve o contedo de cada parte.
Seo do
arquivo PE Contedo da seo
Cabealho O ndice das sees principais do arquivo PE e o endereo do ponto de entrada.
O ambiente de execuo usa essas informaes para identificar o arquivo como
um arquivo PE e para determinar onde se iniciada a execuo ao carregar o
programa na memria.
Instrues da
MSIL
As instrues da Microsoft Intermediate Language (MSIL) que compem o seu
cdigo. Muitas instrues da MSIL so acompanhadas de smbolos de
metadados.
Metadados Tabelas e heaps de metadados. O ambiente de execuo usa essa seo para
registrar as informaes sobre cada tipo e cada membro em seu cdigo. Essa
seo tambm inclui atributos personalizados e informaes de segurana.
Uso de metadados em tempo de execuo
Para compreender melhor os metadados e sua funo no Common Language Runtime, pode ser
til criar um programa simples e ilustrar como os metadados afetam sua prpria vida em tempo de
execuo. O exemplo de cdigo a seguir mostra dois mtodos dentro uma classe chamada
MyApp. O mtodo Main o ponto de entrada do programa, enquanto o mtodo Add simplesmente
retorna a soma dos dois argumentos inteiros.
C#
using System; public class MyApp { public static int Main() { int ValueOne = 10; int ValueTwo = 20;
Console.WriteLine("The Value is: {0}", Add(ValueOne, ValueTwo)); return 0; } public static int Add(int One,
int Two) { return (One + Two); } }
Quando o cdigo executado, o ambiente de execuo carrega o mdulo na memria e consulta
os metadados para esta classe. Aps carregado, o ambiente de execuo executa uma ampla
anlise do fluxo Microsoft Intermediate Language (MSIL) do mtodo para convert-lo em
instrues de mquina nativas rpidas. ambiente de tempo de execuo usa um compilador Just-
In-Time (JIT) para converter as instrues MSIL para cdigo de mquina nativo para um mtodo
ao mesmo tempo conforme o necessrio.
O exemplo a seguir mostra parte do MSIL produzido a partir da funo Main do cdigo anterior.
Voc pode visualizar o MSIL e os metadados de qualquer aplicativo .NET Framework usando o
Desassemblador do MSIL (ILDASM.exe).
Visual C# Consolidado 436
.entrypoint .maxstack 3 .locals ([0] int32 ValueOne, [1] int32 ValueTwo, [2] int32 V_2, [3] int32 V_3)
IL_0000: ldc.i4.s 10 IL_0002: stloc.0 IL_0003: ldc.i4.s 20 IL_0005: stloc.1 IL_0006: ldstr "The Value is:
{0}" IL_000b: ldloc.0 IL_000c: ldloc.1 IL_000d: call int32 ConsoleApplication.MyApp::Add(int32,int32) /*
06000003 */
O compilador JIT l o MSIL para o mtodo inteiro, analisa-o completamente, e gera instrues
nativas eficientes para o mtodo. Em IL_000d, um token de metadados para o mtodo Add
(/* 06000003 */) encontrado e o ambiente de tempo de execuo usa o token para consultar a
terceira linha da tabela MethodDef.
A tabela a seguir mostra parte da tabela MethodDef referenciada pelo token de metadados que
descreve o mtodo Add. Enquanto outras tabelas de metadados existirem neste assembly e
tiverem seus prprios valores exclusivos, somente esta tabela examinada.
Linha
Endereo
virtual relativo
(RVA) ImplFlags Sinalizadores
Nome (Aponta para
o heap de seqncia
de caracteres.)
Assinatura
(Aponta para o
heap de blob.)
1 0x00002050 IL
Managed
Public
ReuseSlot
SpecialName
RTSpecialName
.ctor
.ctor (construtor)
2 0x00002058 IL
Managed
Public
Static
ReuseSlot
Main String
3 0x0000208c IL
Managed
Public
Static
ReuseSlot
Add int, int, int
Cada coluna da tabela contm informaes importantes sobre seu cdigo. A coluna RVA permite
que o ambiente de tempo de execuo calcule o endereo de memria inicial do MSIL que define
este mtodo. As colunas ImplFlags e Sinalizadores contm mscaras de bits que descrevem o
mtodo (por exemplo, se o mtodo pblico ou privado). A coluna Nome indexa o nome do
mtodo a partir do heap de seqncia de caracteres. A coluna Assinatura indexa a definio da
assinatura do mtodo no heap de blob.
O ambiente de tempo de execuo calcula o endereo de deslocamento desejado a partir da
coluna RVA na terceira linha e retorna este endereo para o compilador JIT, que depois passa
para o novo endereo. O compilador JIT continua a processar o MSIL no novo endereo at
encontrar outro token de metadados, e o processo repetido.
Usando metadados, o ambiente de tempo de execuo tem acesso a todas as informaes
necessrias para carregar seu cdigo e process-lo em instrues de mquina nativas. Desta
maneira, os metadados permitem arquivos autodescritivos e, juntamente com o CTS, herana
entre linguagens.
Assemblies no Common Language Runtime
Assemblies so os blocos de construo de aplicativos .NET Framework; eles formam a unidade
fundamental de implantao, controle de verso, reutilizao, ativao de escopo e permisses de
segurana. Um assembly uma coleo de tipos e recursos, que so construdos para trabalhar
juntos e formam uma unidade lgica de funcionalidade. Um assembly fornece o Common
Visual C# Consolidado 437
Language Runtime com as informaes necessrias para estar ciente das implementaes de
tipo. Para o Runtime, um tipo no existe fora o contexto de um assembly.
Viso Geral Sobre Assemblies
Assemblies so uma parte fundamental da programao com o .NET Framework. Um assembly
executa as seguintes funes:
Ele contm cdigo que o Common Language Runtime executa. O cdigo Microsoft
Intermediate Language (MSIL), em um arquivo executvel portvel (PE), no ser executado
se ele no possuir um manifesto do assembly associado. Observe que cada assembly pode ter
somente um ponto de entrada (isto , DllMain, WinMain ou Main).
Ele forma um limite de tipo. A identidade de cada tipo inclui o nome do assembly no qual
ele reside. Um tipo chamado MyType, carregado no escopo de um assembly, no o mesmo
que um tipo chamado MyType, carregado no escopo de outro assembly.
Ele forma um limite de verso. O assembly a menor unidade com controle de verso no
Common Language Runtime; todos os tipos e recursos no mesmo assembly esto versionados
como uma unidade. O manifesto do assembly descreve as dependncias de verso que voc
especifica para qualquer assembly dependente. Para obter mais informaes sobre o controle
de verso, consulte Controle de Verso do Assembly.
Essa a unidade na qual a execuo lado a lado suportada. Para obter mais
informaes sobre como executar vrias verses de um assembly, consulte Assemblies e
Execuo Lado a Lado.
Assemblies podem ser estticos ou dinmicos. Assemblies estticos podem incluir tipos .NET
Framework (interfaces e classes), bem como recursos para o assembly (bitmaps, arquivos JPEG,
arquivos de recursos, e assim por diante). Assemblies estticos so armazenados em disco em
arquivos PE. Voc tambm pode usar o .NET Framework para criar assemblies dinmicos, que
so executados diretamente da memria e no so salvos em disco antes da execuo. Voc
pode salvar assemblies dinmicos no disco aps sua execuo.
H vrias maneiras de criar assemblies. Voc pode usar ferramentas de desenvolvimento, como
Visual Studio 2005, que voc usou anteriormente para criar arquivos .dll ou .exe. Voc pode usar
ferramentas fornecidas pelo SDK do .NET Framework para criar assemblies, com mdulos criados
em outros ambientes de desenvolvimento. Voc tambm pode usar APIs do Common Language
Runtime, como Reflection.Emit, para criar assemblies dinmicos.
Visual C# Consolidado 438
Benefcios do Assembly
Assemblys so projetados para simplificar a implantao de aplicativos e para solucionar
problemas de versionamento que podem ocorrer em aplicativos baseados em componentes.
Usurios finais e desenvolvedores esto familiarizados com problemas de versionamento e
implantao. Problemas esses que surgem nos atuais sistemas baseados em componentes.
Alguns usurios finais tm sofrido a frustrao de instalar um novo aplicativo em seus
computadores apenas para descobrir que outro aplicativo existente simplesmente parou de
funcionar. Muitos desenvolvedores j gastaram inmeras horas tentando manter consistentes
todas as entradas do registro necessrias para ativar uma classe COM.
Muitos problemas de implantao tm sido resolvidos atravs uso de assemblys no .NET
Framework. Por eles seres componentes autodescritivos e por no dependerem de entradas do
registro, assemblys permitem que a instalao de aplicativos no tenha impacto algum. Eles
tambm simplificam a desinstalao e duplicao de aplicativos.
Problemas de Versionamento
Atualmente, dois problemas de versionamento ocorrem em aplicativos Win32:
O Windows 2000 permite criar aplicativos cliente cujos arquivos .dll localizam-se na
mesma pasta do executvel do aplicativo. O Windows 2000 pode ser configurado para verificar
um componente no diretrio onde o executvel est localizado antes de verificar o caminho
totalmente qualificado ou procurar o caminho normal. Isso permite que componentes sejam
independentes de componentes instalados e usados por outros aplicativos.
Metadados de tipo.
Um conjunto de recursos.
Somente o manifesto do assembly obrigatrio, mas tipos e recursos so ambos necessrios
para fornecer ao assembly qualquer funcionalidade significativa.
H vrias maneiras de se agrupar esses elementos em um assembly. Voc pode agrupar todos os
elementos em um nico arquivo fsico, que mostrado na ilustrao a seguir.
Assembly de arquivo nico
Como alternativa, os elementos de um assembly podem estar contidos em vrios arquivos. Esses
arquivos podem ser mdulos de cdigo compilado (.netmodule), recursos (como arquivos .bmp ou
.jpg), ou outros arquivos necessrios para o aplicativo. Crie um assembly multi-arquivos quando
desejar combinar mdulos escritos em diferentes linguagens e otimizar o download de um
aplicativo colocando tipos raramente usados em um mdulo que baixado apenas quando
necessrio.
Na ilustrao a seguir, o desenvolvedor de um aplicativo hipottico escolheu separar alguns
cdigos utilitrios em um mdulo diferente e manter um arquivo grande de recurso (neste caso
uma imagem .bmp) em seu arquivo original. O .NET Framework baixa um arquivo somente
quando ele referenciado; manter cdigos raramente referenciados em um arquivo separado do
aplicativo otimiza o download de cdigo.
Assembly multi-arquivos
Visual C# Consolidado 440
Observao
Os arquivos que compem um assembly multi-arquivos no so fisicamente vinculados pelo
sistema de arquivos. Em vez disso, eles so vinculados atravs do manifesto do assembly e o
Common Language Runtime gerencia-os como uma unidade.
Nesta ilustrao, todos os trs arquivos pertencem a um assembly, conforme descrito no
manifesto do assembly contido em MyAssembly.dll. Para o sistema de arquivos, eles so trs
arquivos separados. Observe que o arquivo Util.netmodule foi compilado como um mdulo porque
ele no contm nenhuma informao de assembly. Quando o assembly foi criado, o manifesto do
assembly foi adicionado ao MyAssembly.dll, indicando seu relacionamento com Util.netmodule e
Graphic.bmp.
Assim como voc cria hoje seu cdigo-fonte, voc toma decises sobre como particionar a
funcionalidade do seu aplicativo em um ou mais arquivos. Ao criar cdigo do .NET Framework,
voc tomar decises semelhantes sobre como particionar a funcionalidade em um ou mais
assemblies.
Manifesto do Assembly
Cada assembly, seja esttico ou dinmico, contm uma coleo de dados que descrevem como
os elementos do assembly se relacionam entre si. O manifesto do assembly contm esses
metadados do assembly. O manifesto de um assembly contm todos os metadados necessrios
para especificar os requisitos de verso e o identificador de segurana, assim como todos os
metadados necessrios para definir o escopo do assembly e analisar referncias a recursos e
classes. O manifesto do assembly pode ser armazenado em um arquivo PE (.exe ou .dll) com
cdigo da Microsoft Intermediate Language (MSIL) ou em um arquivo PE autnomo que contm
somente informaes do manifesto do assembly.
A ilustrao a seguir mostra as diferentes maneiras nas quais o manifesto pode se armazenado.
Tipos de assemblys
Visual C# Consolidado 441
Para um assembly com um arquivo associado, o manifesto incorporado no arquivo PE para
formar um assembly de arquivo nico. Voc pode criar um assembly de vrios arquivos com um
arquivo de manifesto autnomo ou com o manifesto incorporado a um dos arquivos PE do
assembly.
Cada manifesto de um assembly executa as seguintes funes:
Use um instalador desenvolvido para funcionar com o cache global de assemblies. Essa
a opo preferencial para instalar assemblies para o cache global de assemblies.
Quando voc cria um assembly, voc pode especificar um conjunto de permisses que o
assembly requer para executar. Se determinadas permisses so concedidas ou no a um
assembly isso baseado nas evidncias.
H duas formas distintas de evidncias que so usadas:
Visual C# Consolidado 444
A evidncia de entrada ser mesclada com a evidncia coletada pelo carregador para criar
um conjunto final de evidncias usadas para resoluo de poltica. Os mtodos que usam essa
semntica incluem Assembly.Load, Assembly.LoadFrom e Activator.CreateInstance.
A evidncia de entrada usada inalterada como o conjunto final de evidncias usado para
resoluo de poltica. Os mtodos que usam essa semntica incluem
AppDomain.DefineDynamicAssembly() e Assembly.Load(byte[]).
Permisses opcionais podem ser concedidas pelo conjunto de polticas de segurana no
computador onde o assembly ser executado. Se voc desejar que seu cdigo manipule todas as
excees de segurana potenciais, voc pode seguir um desses procedimentos:
Inserir uma solicitao de permisso para todas as permisses que seu cdigo deve ter, e
tratar a falha em tempo de carga que ocorre se as permisses no so concedidas.
No usar uma solicitao de permisso para obter permisses que seu cdigo pode no
precisar, mas estar preparado para manipular excees de segurana se as permisses no
so concedidas.
Observao
Segurana uma rea complexa, e voc tem vrias opes para escolher. Para mais
informaes, consulte Conceitos chave sobre segurana.
Em tempo de carga, as evidncias do assembly so usadas como entrada para polticas de
segurana. A poltica de segurana estabelecida pela empresa e pelo administrador do
computador bem como por configuraes de polticas de usurio e determina o conjunto de
permisses que concedido a todos os cdigos gerenciados quando executados. Polticas de
segurana podem ser estabelecidas para o publisher do assembly (se ele tiver uma assinatura
gerada por uma ferramenta de assinatura), para o site e zona (em termos do Internet Explorer) de
que o assembly foi baixado, ou para o nome forte do assembly. Por exemplo, um administrador
pode estabelecer polticas de segurana que permitem que todo cdigo baixado do site e
assinado por uma determinada de empresa software acesse um banco de dados em um
computador, mas no concede acesso para gravar no disco do computador.
Assemblies de nome forte e ferramentas de assinatura
Voc pode assinar um assembly de duas maneiras diferentes mas complementares: com um
nome forte ou usando a Ferramenta de Assinatura de Arquivo (Signcode.exe) no .NET Framework
verso 1.0 e 1.1 ou a Ferramenta de Assinatura (SignTool.exe) em verses posteriores do .NET
Framework. Assinar um assembly com um nome forte adiciona uma criptografia de chave pblica
ao arquivo que contm o manifesto do assembly. Assinatura de nome forte ajuda a verificar
exclusividade de nome, a evitar falsificao de nome, e a fornecer chamadores com alguma
identidade quando uma referncia resolvida.
No entanto, nenhum nvel de confiana associado a um nome forte, o que torna a Ferramenta
de Assinatura de Arquivo (Signcode.exe) e Ferramenta de Assinatura (SignTool.exe) importantes.
As duas ferramentas de assinatura requerem um publisher para provar sua identidade para uma
autoridade de terceiros e obter um certificado. Esse certificado ento incorporado no seu arquivo
e pode ser usado por um administrador para decidir se confia na autenticidade do cdigo.
Voc pode dar um nome forte e uma assinatura digital criada usando a Ferramenta de Assinatura
de Arquivo (Signcode.exe) ou a Ferramenta de Assinatura (SignTool.exe) para um assembly, ou
voc pode usar um sozinho. As duas ferramentas de assinatura podem assinar somente um
arquivo por vez; para um assembly com vrios arquivos, voc assina o arquivo que contm o
manifesto do assembly. Um nome forte armazenado no arquivo que contm o manifesto do
Visual C# Consolidado 445
assembly, mas uma assinatura criada usando a Ferramenta de Assinatura (SignTool.exe) ou a
Ferramenta de Assinatura de Arquivo (Signcode.exe) armazenada em um slot reservado no
arquivo executvel portvel (PE) que contm o manifesto do assembly. A assinatura de um
assembly usando a Ferramenta de Assinatura de Arquivo (Signcode.exe) ou a Ferramenta de
Assinatura (SignTool.exe) pode ser usada (com ou sem um nome forte) quando voc j tem uma
hierarquia de confiana que confia nas assinaturas geradas pela Ferramenta de Assinatura de
Arquivo (Signcode.exe) ou pela Ferramenta de Assinatura (SignTool.exe), ou quando sua poltica
usa somente a parte chave e no verifica uma cadeia de confiana.
Observao
Ao usar um nome forte e uma assinatura gerada por uma ferramenta de assinatura em um
assembly, o nome forte deve ser atribudo primeiro.
O Common Language Runtime tambm executa uma verificao de hash; o manifesto do
assembly contm uma lista de todos os arquivos que compem o assembly, incluindo um hash de
cada arquivo como ele existia quando o manifesto foi criado. Como cada arquivo carregado, seu
contedo comparado com o valor de hash armazenado no manifesto. Se os dois hashes no
coincidirem, o assembly falha ao carregar.
Devido ao nome forte e assinatura usarem a garantia de integridade da Ferramenta de
Assinatura de Arquivo (Signcode.exe) ou da Ferramenta de Assinatura (SignTool.exe), voc pode
basear a poltica de segurana para acesso a cdigo nessas duas formas de evidncias do
assembly. Nome forte e assinatura usam garantia de integridade da Ferramenta de Assinatura
(SignTool.exe) ou da Ferramenta de Assinatura de Arquivo (Signcode.exe) atravs de assinaturas
digitais e certificados. Todas as tecnologias mencionadas Verificao de hash, nome forte, e
assinatura usando a Ferramenta de Assinatura de Arquivo (Signcode.exe) ou a Ferramenta de
Assinatura (SignTool.exe) trabalham juntas para assegurar que o assembly no tenha sido
alterado de nenhuma maneira.
Versionamento de Assembly
Todos os versionamentos de assemblys que usam o Common Language Runtime so feitos no
nvel do assembly. A verso de um assembly e as verses de assemblys dependentes so
registradas no manifesto do assembly. O poltica de verses padro do ambiente de execuo diz
que aplicativos devem executar somente com as verses com que foram criados e testados, a
menos que essa poltica de verses seja anulada por uma outra poltica explcitada nos arquivos
de configurao (o arquivo de configurao do aplicativo, o arquivo de poltica de editor e o
arquivo de configurao do administrador do computador).
Observao
Versionamento feito somente em assemblys com nomes fortes.
O ambiente de execuo executa as seguintes etapas para resolver uma solicitao de ligao de
assembly:
1. Verificar a referncia do assembly original para determinar qual verso do assembly deve
ser ligada.
2. Verificar os arquivos de configurao apropriados para aplicar um poltica de verses.
Visual C# Consolidado 446
3. Determinar o assembly correto a partir da referncia do assembly original e de qualquer
redirecionamento especificado nos arquivos de configurao. Determinar a verso que deve
ser ligada ao assembly sendo chamado.
4. Verifica a cache global de assemblys, bases de cdigo especificadas em arquivos de
configurao, e, em seguida, verifica os diretrios e subdiretrios do aplicativo usando as
regras de probing explicadas em Como o Ambiente de Execuo Localiza Assemblys.
A ilustrao a seguir mostra essas etapas.
Resolvendo uma solicitao de ligao de assembly
Para obter mais informaes sobre como configurar aplicativos, consulte Arquivos de
Configurao. Para obter mais informaes sobre polticas de ligao, consulte Como o Ambiente
de Execuco Localiza Assemblys.
Informaes de Verso
Cada assembly possui duas maneiras diferentes de expressar informaes de verso:
Atravs de uma verso informativa, uma seqncia que representa informaes de verso
adicionais includa apenas para fins informativos.
Nmero de Verso do Assembly
Cada Assembly tem um nmero de verso como parte de sua identidade. Dessa forma, dois
assemblys que diferem pelo nmero de verso so considerados pelo ambiente de execuo
assemblys completamente diferentes. Fisicamente, esse nmero de verso representado
atravs de uma seqncia dividida em quatro partes com o seguinte formato:
Visual C# Consolidado 447
< verso principal>.<verso secundria>.<nmero de compilao>.<reviso>
Por exemplo, a verso 1.5.1254.0 indica que 1 a verso principal, 5 a verso secundria, 1254
o nmero de compilao e 0 o nmero de reviso.
O nmero de verso armazenado no manifesto do assembly junto com outras informaes de a
identidade, incluindo o nome e a chave pblica do assembly e informaes de relacionamentos e
identidades de outros assemblys conectados ao aplicativo.
Quando um assembly criado, a ferramenta de desenvolvimento registra as informaes de
dependncia de cada assembly referenciado no manifesto do assembly. O ambiente de execuo
usa esses nmeros verso, em conjunto com informaes de configurao definidas por um
administrador, por um aplicativo, ou por um publisher, a fim de carregar a verso apropriada de
um assembly referenciado.
O ambiente de execuo distingue assemblys regulares de assemblys com nomes fortes para fins
de versionamento. A verificao de verso s ocorre em assemblys com nomes fortes.
Para obter informaes sobre como especificar uma poltica de ligao de verso, consulte
Arquivos de Configurao. Para obter informaes sobre como o ambiente de execuo usa
informaes de verso para localizar um Assembly especfico, consulte Como o Ambiente de
Execuo Localiza Assemblys.
Verso Informativa do Assembly
A verso informativa uma seqncia que anexa informaes adicionais de verso a um
assembly, apenas para fins informativos. Essas informaes no so usadas em tempo de
execuo. A verso informativa baseada em texto corresponde a literatura de marketing do
produto, a embalagem ou ao nome do produto e no usada pelo ambiente de execuo. Por
exemplo, uma verso informativa poderia ser "Common Language Runtime verso 1.0" ou " NET
Control SP 2 ". Na guia Version da caixa de dilogo File Properties do Microsoft Windows, essas
informaes aparecem no item "Product Version".
Observao
Embora voc possa especificar qualquer texto, uma mensagem de aviso aparecer durante a
compilao em dois casos: (i) se a seqncia no possuir o formato usado pelo nmero de verso
do assembly ou (ii) se est no formato correto, mas contm wildcards. Esse aviso inofensivo.
A verso informativa representada usando o atributo
System.Reflection.AssemblyInformationalVersionAttribute. Para obter mais informaes sobre o
atributo da verso informativa, consulte Definindo Atributos do Assembly.
Posicionamento do Assembly
Para a maioria dos aplicativos .NET Framework, voc localiza assemblies que compem um
aplicativo no diretrio do aplicativo, em uma subpasta da pasta do aplicativo ou no cache global
de assemblies (se o assembly for compartilhado). Voc pode substituir onde o Common Language
Runtime procura por um assembly, usando o elemento <CODEBASE> em um arquivo de
configurao. Se o assembly no tiver um nome forte, a localidade especificada usando o
elemento <CODEBASE> restrita para o diretrio do aplicativo ou para a subpasta. Se o
assembly tiver um nome forte, o elemento <CODEBASE> pode especificar qualquer localidade no
computador ou em uma rede.
Visual C# Consolidado 448
Regras similares se aplicam localizao de assemblies ao trabalhar com cdigo no gerenciado
ou aplicativos interop COM: se o assembly ser compartilhado por vrios aplicativos, ele dever
ser instalado no cache global de assemblies. Assemblies usados com cdigos no gerenciados
devem ser registrados e exportados como uma biblioteca de tipos. Assemblies usados pelo COM
interop devem ser registrados no catlogo, embora em alguns casos, esse registro ocorra
automaticamente.
Assemblies e execuo lado a lado
Execuo lado a lado a capacidade de armazenar e executar vrias verses de um aplicativo ou
componente no mesmo computador. Isso significa que voc pode ter vrias verses do runtime, e
vrias verses de aplicativos e componentes que usam uma verso do runtime, no mesmo
computador ao mesmo tempo. A execuo lado a lado lhe d mais controle sobre quais verses
de um componente um aplicativo est vinculado, e mais controle sobre que verso do Runtime um
aplicativo usa.
Suporte para armazenamento lado a lado e execuo de diferentes verses do mesmo assembly
uma parte integral de nomeao forte e est embutido no infra-estrutura do Runtime. Pelo fato
de o nmero da verso do assembly de nome forte fazer parte de sua identidade, o tempo de
execuo pode armazenar vrias verses de o mesmo assembly no cache global de assemblies,
e carregar esses mdulos em tempo de execuo.
Embora o Runtime proporcione a capacidade para criar aplicativos lado a lado, a execuo lado a
lado no automtica. Para obter mais informaes sobre a criao de aplicativos para execuo
lado a lado, consulte Diretrizes para criar aplicativos e componentes para execuo lado a lado.
Viso Geral da Biblioteca de Classes do .NET Framework
O .NET Framework inclui classes, interfaces e tipos de valor que aceleram e otimizam o processo
de desenvolvimento e fornecem acesso funcionalidades do sistema. Para facilitar a
interoperabilidade entre linguagens, os tipos do .NET Framework so compatveis com CLS e,
portanto, podem ser usados por qualquer linguagem de programao cujo compilador est de
acordo com a CLS (Common Language Specification).
Os tipos do .NET Framework compes a base na qual os aplicativos, componentes e controles do
.NET so criados. O .NET Framework inclui tipos que executam as seguintes funes:
Executar E/S.
Fornecer acesso a dados, uma GUI detalhada do lado do cliente e uma GUI do lado do
cliente controlada pelo servidor.
O .NET Framework fornece um rico conjunto de interfaces, bem como classes abstratas e
concretas. Voc pode usar diretamente as classes concretas ou pode derivar suas prprias
classes a partir delas. Para usar a funcionalidade de uma interface, voc pode criar uma classe
que implementa a interface ou derivar uma classe de uma das classes do .NET Framework que
implementa a interface.
Convenes de Nomenclatura
Visual C# Consolidado 449
Os tipos do .NET Framework usam um esquema de nomenclatura de sintaxe de ponto que d a
idia de hierarquia. Essa tcnica agrupa tipos relacionados em namespaces para que os tipos
possam ser procurados e referenciados mais facilmente. A primeira parte do nome completo
at o ponto mais a direita constitui o nome do namespace. A ltima parte do nome o nome do
tipo. Por exemplo, System.Collections.ArrayList representa o tipo ArrayList que pertence ao
namespace System.Collections. Os tipos em System.Collections podem ser usados para
manipular colees de objetos.
Esse esquema de nomenclatura facilita, para os desenvolvedores de bibliotecas, a extenso do
.NET Framework a fim de criar grupos hierrquicos de tipos e nome-los de uma maneira
consistente e informativa. Espera-se que os desenvolvedores de bibliotecas usem as seguintes
diretrizes ao criar nomes para seus namespaces:
NomeDaEmpresaNomeDaTecnologia
Por exemplo, o namespace Microsoft.Word est de acordo com essa diretriz.
O uso de padres de nomenclatura para agrupar tipos relacionados em namespaces uma
maneira muito til de criar e documentar bibliotecas de classes. Entretanto, esse esquema de
nomenclatura no tem efeito sobre a visibilidade, acesso a membro, herana, segurana ou
vinculao. Um namespace pode ser particionado em vrios assemblys. Um nico assembly pode
conter tipos de vrios namespaces diferentes. O assembly fornece a estrutura formal para o
versionamento, a implantao, a segurana, o carregamento e a visibilidade no Common
Language Runtime.
Para obter mais informaes sobre namespaces e nomes de tipos, consulte CTS (Common Type
System).
O Namespace System
O namespace System o namespace raiz para tipos fundamentais do .NET Framework. Esse
namespace inclui classes que representam os tipos de dados base usados por todos os
aplicativos: Object (a raiz da hierarquia de herana), Byte, Char, Array, Int32, String, etc. Muitos
desses tipos correspondem aos tipos de dados primitivos que so usados pelas linguagens de
programao. Quando voc escreve um cdigo usando os tipos do .NET Framework, voc pode
usar a correspondente palavra-chave da linguagem onde um tipo de dado base do .NET
Framework esperado.
A tabela a seguir lista alguns dos tipos de valor que so fornecidos pelo .NET Framework. dada
uma breve descrio cada tipo e uma indicao do tipo correspondente em Visual Basic, C# e
C++. A tabela tambm inclui entradas para a classes Object e String, para as quais vrias
linguagens possuem as palavras-chave correspondentes.
Categoria
Nome
da
classe Descrio
Tipo de
dado em
Visual
Basic
Tipo de
dado em
C#
Tipo de
dado em
C++
Tipo de
dado em
JScript
Inteiro Byte Um inteiro de 8 bits sem
sinal.
Byte Byte char Byte
SByte Um inteiro de 8 bits com
sinal.
No compatvel com CLS.
SByte sbyte signed
char
SByte
Int16 Um inteiro de 16 bits com
sinal.
Short short short short
Visual C# Consolidado 450
Int32 Um inteiro de 32 bits com
sinal.
Integer int int
-ou-
long
int
Int64 Um inteiro de 64 bits com
sinal.
Long long __int64 long
UInt16 Um inteiro e 16 bits sem
sinal.
No compatvel com CLS.
UShort ushort unsigned
short
UInt16
UInt32 Um inteiro de 32 bits sem
sinal.
No compatvel com CLS.
UInteger uint unsigned
int
-ou-
unsigned
long
UInt32
UInt64 Um inteiro de 64 bits sem
sinal.
No compatvel com CLS.
ULong ulong unsigned
__int64
UInt64
Ponto
flutuante
Single Nmero de ponto flutuante
de preciso simples (32
bits).
Single float float float
Double Nmero de ponto flutuante
de preciso dupla (64 bits).
Double double double double
Lgico Boolean Um valor booleano (true
ou false).
Boolean bool bool bool
Outros Char Um caractere unicode (16
bits).
Char char wchar_t char
Decimal Um valor decimal (128
bits).
Decimal decimal Decimal Decimal
IntPtr Um inteiro com sinal cujo
tamanho depende da
plataforma subjacente (um
valor de 32 bits em uma
plataforma de 32 bits e um
valor de 64 bits em uma
plataforma de 64 bits).
IntPtr
Nenhum
tipo
interno.
IntPtr
Nenhum
tipo
interno.
IntPtr
Nenhum
tipo
interno.
IntPtr
UIntPtr Um inteiro sem sinal cujo
tamanho depende da
plataforma subjacente (um
valor de 32 bits em uma
plataforma de 32 bits e um
valor de 64 bits em uma
plataforma de 64 bits).
No compatvel com CLS.
UIntPtr
Nenhum
tipo
interno.
UIntPtr
Nenhum
tipo
interno.
UIntPtr
Nenhum
tipo
interno.
UIntPtr
Objetos de
Classe
Object A raiz da hierarquia de
objeto.
Object object Object* Object
String Uma seqncia de
caracteres Unicode
imutvel e de comprimento
fixo.
String string String* String
Visual C# Consolidado 451
Alm dos tipos de dados base, o namespace System contm mais de 100 classes, variando de
classes que tratam excees a classes que lidam com os principais conceitos do ambiente de
execuo, como domnios de aplicativo e coleta de lixo. O namespace System tambm contm
vrios namespaces de segundo nvel.
Para obter mais informaes sobre namespaces, consulte a Referncia do .NET Framework. Essa
documentao fornece uma viso geral sobre cada namespace, assim como uma descrio
formal de cada tipo e de seus membros.
Localizador rpido de tecnologia
A tabela a seguir fornece uma referncia rpida para as principais reas de tecnologias do .NET
Framework.
Para aprender sobre... Consultar...
Biblioteca de classes do .NET
Framework
Viso geral sobre a biblioteca de classes do .NET
Framework
ADO.NET ADO.NET
Domnios de aplicativos Usando domnios de aplicativos
ASP.NET Criando aplicativos ASP.NET
Viso geral do ASP.NET
Controles de servidores Web do ASP.NET
Assemblies Programao com assemblies
Programao assncrona COMO: Encadear chamadas assncronas com um mtodo
de Web Service
CodeDom Gerao e compilao dinmicas de cdigo fonte
Common Language Runtime Common Language Runtime
Configurao Configurando aplicativos
Configurando aplicativos ASP.NET
Acesso a dados Acesso a dados
Depurao Depurao e perfil de aplicativos
Implantao Implantao de ClickOnce para aplicativos de formulrios do
Windows
Implantando aplicativos .NET Framework
Visual C# Consolidado 452
Noes bsicas sobre implantao de .NET Framework
Designers e o ambiente de design Estendendo suporte em tempo de design
Eventos Tratamento e disparada de eventos
Excees Tratamento e lanamento de excees
Coleta de lixo Coleta de lixo
GDI + Elementos grficos e desenho em formulrios do Windows
Tipos genricos Reflexo e tipos genrico
E/S E/S de arquivo e de fluxo
Interoperabilidade Interoperabilidade
Desenvolvimento mvel .NET Compact Framework
Criando aplicativos mveis ASP .NET
Redes Programao de redes
Reflexo Reflexo
Arquitetura de comunicao remota Objetos remotos
Viso geral sobre a arquitetura de comunicao remota do
.NET Framework
Segurana Segurana no .NET Framework
Conceitos chaves sobre segurana
Componentes atendidos Escrevendo componentes atendidos
Viso geral sobre componentes atendidos
Serializao Serializao
Execuo lado a lado Execuo lado a lado
Threads Threads gerenciadas
Formulrios do Windows Formulrios do Windows no .NET Framework
Visual C# Consolidado 453
Controles de formulrios do
Windows
Controles de formulrios do Windows
XML Documentos e dados XML
XML Web Services Viso geral sobre XML Web Services
Como Criar uma Listagem de Diretrio
O exemplo de cdigo a seguir mostra como usar as classes de E/s para criar uma lista de todos
os arquivos com a extenso ".exe " em um diretrio.
Exemplo
C#
using System; using System.IO; class DirectoryLister { public static void Main(String[] args) { string path =
"."; if (args.Length > 0) { if (File.Exists(args[0]) { path = args[0]; } else { Console.WriteLine("{0} not found;
using current directory:", args[0]); } DirectoryInfo dir = new DirectoryInfo(path); foreach (FileInfo f in
dir.GetFiles("*.exe")) { String name = f. Name; long size = f.Length; DateTime creationTime =
f.CreationTime; Console.WriteLine("{0,-12:N0} {1,-20:g} {2}", size, creationTime, name); } } }
Programao robusta
Neste exemplo, (.. ",) e o cdigo relaciona todos os arquivos na pasta atual ter uma extenso.exe,
junto com seus tamanho do arquivo, hora de criao, e nome. " a pasta atual, indicada pelo
DirectoryInfo Supondo que havia arquivos.exe na subpasta \Bin da C:\MyDir, a sada desse cdigo
pode parecer isso:
953 7/20/2000 10:42 AM C:\MyDir\Bin\paramatt.exe 664 7/27/2000 3:11 PM C:\MyDir\Bin\tst.exe 403
8/8/2000 10:25 AM C:\MyDir\Bin\dirlist.exe
Se voc desejar uma lista de arquivos em outro diretrio, como o diretrio de raiz C:\, passar o
argumento " C:\ " para o executvel gerado por compilao esse cdigo, por exemplo: "
testApplication.EXE C:\ ".
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Como: Ler e gravar em um arquivo de dados recm criado
O BinaryWriter e BinaryReader classes so usados para gravar e ler dados, em vez de caracteres
seqncias. O exemplo de cdigo a seguir demonstra gravar dados e Ler dados de um fluxo de
arquivo novo e vazio (Test.data). Aps criar os dados arquivos na pasta atual, a associada
BinaryWriter e BinaryReader so criados, usado para gravar os inteiros 0 a 10 para Test.data,
que deixa o ponteiro de arquivo no final do arquivo. e BinaryWriter Aps definir o ponteiro de
arquivo volta para a origem, as BinaryReader leituras sem o contedo especificado.
Visual C# Consolidado 454
Exemplo
C#
using System; using System.IO; class MyStream { private const string FILE_NAME = "Test.data"; public
static void Main(String[] args) { // Create the new, empty data file. if (File.Exists(FILE_NAME)) {
Console.WriteLine("{0} already exists!", FILE_NAME); return; } FileStream fs = new
FileStream(FILE_NAME, FileMode.CreateNew); // Create the writer for data. BinaryWriter w = new
BinaryWriter(fs); // Write data to Test.data. for (int i = 0; i < 11; i++) { w.Write( (int) i); } w.Close();
fs.Close(); // Create the reader for data. fs = new FileStream(FILE_NAME, FileMode.Open,
FileAccess.Read); BinaryReader r = new BinaryReader(fs); // Read data from Test.data. for (int i = 0; i < 11;
i++) { Console.WriteLine(r.ReadInt32()); } r.Close(); fs.Close(); } }
Programao robusta
Se Test.data acionada. j existe no diretrio atual, um IOException Usar FileMode.Create para
criar um novo arquivo sem organizando sempre um IOException.
Como: Abrir e anexar aum arquivo de log
e StreamWriterStreamReader caracteres para gravar e ler caracteres fluxos. O exemplo de cdigo
a seguir abre o log.txt arquivo para entrada, ou cria o arquivo se ele ainda no existir, e acrescenta
informaes ao final do arquivo. O contedo do arquivo so gravados na sada padro para
exibio. Como uma alternativa para este exemplo, as informaes pode ser armazenadas como
uma nica seqncia ou matriz de seqncia, e a WriteAllText. ou WriteAllLines mtodo pode ser
usado para obter a mesma funcionalidade
Observao
Do My.Application.Log Usurios Visual Basic podem optar por usar os mtodos e propriedades
fornecidas pelo ou My.Computer.FileSystem objetos para criar ou gravar em arquivos de log.
Para obter mais informaes, consulte Objeto My.Application.Log e Objeto
My.Computer.FileSystem.
Exemplo
C#
using System; using System.IO; class DirAppend { public static void Main(String[] args) { using
(StreamWriter w = File.AppendText("log.txt")) { Log ("Test1", w); Log ("Test2", w); // Close the writer and
underlying file. w.Close(); } // Open and read the file. using (StreamReader r = File.OpenText("log.txt")) {
DumpLog (r); } } public static void Log (String logMessage, TextWriter w) { w.Write("\r\nLog Entry : ");
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
w.WriteLine(" :"); w.WriteLine(" :{0}", logMessage); w.WriteLine ("-------------------------------"); // Update
the underlying file. w.Flush(); } public static void DumpLog (StreamReader r) { // While not at the end of the
file, read and write lines. String line; while ((line=r.ReadLine())!=null) { Console.WriteLine(line); } r.Close();
} }
Como Escrever Texto em um Arquivo
Os exemplos de cdigo a seguir mostram como gravar texto em um arquivo de texto.
Visual C# Consolidado 455
O primeiro exemplo mostra como adicionar texto a um arquivo existente. O segundo exemplo
mostra como criar um novo arquivo de texto e gravar uma seqncia a ele. Funcionalidade
semelhante pode ser fornecida pelos mtodos WriteAllText.
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Exemplo
C#
using System; using System.IO; class Test { public static void Main() { // Create an instance of StreamWriter
to write text to a file. // The using statement also closes the StreamWriter. using (StreamWriter sw = new
StreamWriter("TestFile.txt")) { // Add some text to the file. sw.Write("This is the "); sw.WriteLine("header
for the file."); sw.WriteLine("-------------------"); // Arbitrary objects can also be written to the file.
sw.Write("The date is: "); sw.WriteLine(DateTime.Now); } } }
C#
using System; using System.IO; public class TextToFile { private const string FILE_NAME = "MyFile.txt";
public static void Main(String[] args) { if (File.Exists(FILE_NAME)) { Console.WriteLine("{0} already
exists.", FILE_NAME); return; } using (StreamWriter sw = File.CreateText(FILE_NAME)) { sw.WriteLine
("This is my file."); sw.WriteLine ("I can write ints {0} or floats {1}, and so on.", 1, 4.2); sw.Close(); } } }
Como: Ler texto de um arquivo
Os exemplos de cdigo a seguir mostram como ler texto de um arquivo de texto. O segundo
exemplo notifica voc quando o final do arquivo for detectado. Do ReadAllLines essa
funcionalidade tambm pode ser obtida usando ou ReadAllText mtodos.
Exemplo
C#
using System; using System.IO; class Test { public static void Main() { try { // Create an instance of
StreamReader to read from a file. // The using statement also closes the StreamReader. using (StreamReader
sr = new StreamReader("TestFile.txt")) { String line; // Read and display lines from the file until the end of
// the file is reached. while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception
e) { // Let the user know what went wrong. Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message); } } }
C#
using System; using System.IO; public class TextFromFile { private const string FILE_NAME = "MyFile.txt";
public static void Main(String[] args) { if (!File.Exists(FILE_NAME)) { Console.WriteLine("{0} does not
exist.", FILE_NAME); return; } using (StreamReader sr = File.OpenText(FILE_NAME)) { String input; while
((input=sr.ReadLine())!=null) { Console.WriteLine(input); } Console.WriteLine ("The end of the stream has
been reached."); sr.Close(); } }
Programao robusta
Visual C# Consolidado 456
Este cdigo cria um StreamReader que aponta para MyFile.txt por meio de uma chamada para
File.OpenText. Retorna StreamReader.ReadLine cada linha como uma seqncia. Quando no
houver nenhum mais caracteres para ler, uma mensagem exibida com essa informao, e o
fluxo est fechado.
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Como Ler Caracteres de uma Seqncia de Caracteres
O exemplo de cdigo a seguir permite que voc a ler um determinado nmero de caracteres uma
seqncia existente, comeando no local especificado na seqncia. Use StringReader para fazer
isso, conforme demonstrado abaixo.
Este cdigo define uma seqncia e converte-para uma matriz de caracteres, que ento pode ser
lido pelo utilizando o mtodo apropriado StringReader.Read.
Este exemplo l apenas o nmero especificado de caracteres da seqncia, da seguinte maneira.
Some number o
Exemplo
C#
using System; using System.IO; public class CharsFromStr { public static void Main(String[] args) { // Create
a string to read characters from. String str = "Some number of characters"; // Size the array to hold all the
characters of the string // so that they are all accessible. char[] b = new char[24]; // Create an instance of
StringReader and attach it to the string. StringReader sr = new StringReader(str); // Read 13 characters from
the array that holds the string, starting // from the first array member. sr.Read(b, 0, 13); // Display the
output. Console.WriteLine(b); // Close the StringReader. sr.Close(); } }
Como Escrever Caracteres em uma Seqncia de Caracteres
O exemplo de cdigo a seguir grava um determinado nmero de caracteres de uma matriz de
caracteres em uma seqncia existente, comeando no local especificado na matriz. Use
StringWriter para fazer isso, conforme demonstrado abaixo.
Exemplo
C#
using System; using System.IO; using System.Text; public class CharsToStr { public static void Main(String[]
args) { // Create an instance of StringBuilder that can then be modified. StringBuilder sb = new
StringBuilder("Some number of characters"); // Define and create an instance of a character array from
which // characters will be read into the StringBuilder. char[] b = {' ','t','o',' ','w','r','i','t','e',' ','t','o','.'}; //
Create an instance of StringWriter // and attach it to the StringBuilder. StringWriter sw = new
StringWriter(sb); // Write three characters from the array into the StringBuilder. sw.Write(b, 0, 3); //
Display the output. Console.WriteLine(sb); // Close the StringWriter. sw.Close(); } }
Visual C# Consolidado 457
Programao robusta
Este exemplo ilustra o uso do para modificar uma seqncia existente. um StringBuilder Observe
que isso requer uma declarao adicional using, como a StringBuilder classe um membro do
espao para nome System.Text. Alm disso, em vez de definir uma seqncia e convert-la em
uma matriz de caracteres, este um exemplo de criar uma matriz de caractere diretamente e
inicializando ele.
Esse cdigo produz o seguinte resultado.
Some number of characters to
Como Adicionar ou Remover Entradas da Lista de Controle de Acesso
Para adicionar ou remover entradas controle acesso (ACL) Lista para ou de um arquivo, ou
DirectorySecurity Objeto deve ser obtido o arquivo ou pasta, modificado, e aplicados novamente
ao arquivo ou pasta.. o FileSecurity
Para adicionar ou remover uma entrada ACL de um arquivo
1. Chame o GetAccessControl mtodo para obter um FileSecurity objeto que contm as
entradas ACL atuais de um arquivo.
2. Adicionar ou remover entradas ACL do objeto FileSecurity retornado da etapa 1.
3. Passar o FileSecurity objeto para o SetAccessControl mtodo para aplicar as alteraes.
Para adicionar ou remover uma entrada ACL de um diretrio
1. Chame o GetAccessControl mtodo para obter um DirectorySecurity objeto que contm
as entradas ACL atuais de uma pasta.
2. Adicionar ou remover entradas ACL do objeto DirectorySecurity retornado da etapa 1.
3. Passar o DirectorySecurity objeto para o SetAccessControl mtodo para aplicar as
alteraes.
Exemplo
C#
using System; using System.IO; using System.Security.AccessControl; namespace FileSystemExample { class
FileExample { public static void Main() { try { string fileName = "test.xml"; Console.WriteLine("Adding
access control entry for " + fileName); // Add the access control entry to the file. AddFileSecurity(fileName,
@"DomainName\AccountName", FileSystemRights.ReadData, AccessControlType.Allow);
Console.WriteLine("Removing access control entry from " + fileName); // Remove the access control entry
from the file. RemoveFileSecurity(fileName, @"DomainName\AccountName", FileSystemRights.ReadData,
AccessControlType.Allow); Console.WriteLine("Done."); } catch (Exception e) { Console.WriteLine(e); } } //
Adds an ACL entry on the specified file for the specified account. public static void AddFileSecurity(string
fileName, string account, FileSystemRights rights, AccessControlType controlType) { // Get a FileSecurity
object that represents the // current security settings. FileSecurity fSecurity =
File.GetAccessControl(fileName); // Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType)); // Set the new access
settings. File.SetAccessControl(fileName, fSecurity); } // Removes an ACL entry on the specified file for the
specified account. public static void RemoveFileSecurity(string fileName, string account, FileSystemRights
rights, AccessControlType controlType) { // Get a FileSecurity object that represents the // current security
settings. FileSecurity fSecurity = File.GetAccessControl(fileName); // Add the FileSystemAccessRule to the
Visual C# Consolidado 458
security settings. fSecurity.RemoveAccessRule(new FileSystemAccessRule(account, rights, controlType)); //
Set the new access settings. File.SetAccessControl(fileName, fSecurity); } } }
Compilando o cdigo
Voc deve fornecer um usurio ou conta de grupo vlido para executar esse exemplo. Este
exemplo usa um File objeto; no entanto, o mesmo procedimento usado para o FileInfo,
Directory., e DirectoryInfo Classes
Criando Novas Seqncias de Caracteres
O.NET Framework fornece vrios mtodos da classe System.String que criar novos objetos de
seqncia, combinando vrias seqncias, matrizes de seqncias, ou objetos. A tabela a seguir
lista diversos mtodos til.
Nome do
mtodo Uso
String.Format Cria uma seqncia formatada de um conjunto de objetos de entrada.
String.Concat Cria seqncias de dois ou mais seqncias.
String.JOIN Cria uma nova seqncia, combinando uma matriz de seqncias.
String.Insert Cria uma nova seqncia inserindo uma seqncia no ndice especificado de
uma seqncia existente.
String.CopyTo Cpias especificado caracteres em uma seqncia em uma posio
especificada de caracteres em uma matriz.
Formato
Voc pode usar o String.Format mtodo para criar seqncias formatadas e concatenar
seqncias que representam vrios objetos Qualquer objeto passado esse mtodo converte
automaticamente em uma seqncia. Por exemplo, se seu aplicativo deve exibir um Int32 valor e
um DateTime valor para o usurio, voc pode construir uma seqncia para representar esses
valores usando o Format mtodo facilmente. Para obter informaes sobre como formatar
convenes usadas com esse mtodo, consulte a seo sobre composio formatao.
O exemplo a seguir usa o Format mtodo para criar uma seqncia que usa uma varivel Inteiro.
C#
int MyInt = 12; string MyString = String.Format("Your dog has {0} fleas. It is time to get a flea collar. The
current universal date is: {1:u}." , MyInt, DateTime.Now); Console.WriteLine(MyString);
O exemplo anterior exibe o texto ' Your dog has 12 fleas. It is time to get a flea collar. The current
universal date is: 2001-04-10 15:51:24Z.. ' para o console Exibe DateTime.Now a data atual e tempo
de uma maneira especificada pela cultura associada a segmento atual.
Concat
O String.Concat mtodo pode ser usado para facilmente criar um novo objeto seqncia de
caracteres de dois ou mais objetos existentes. Ele fornece uma forma independente de linguagem
para concatenar seqncias. Esse mtodo aceita qualquer classe que deriva de System.Object.
O exemplo a seguir cria uma seqncia de dois objetos de seqncia e um caractere separating.
Visual C# Consolidado 459
C#
string MyString = "Hello"; string YourString = "World!"; Console.WriteLine(String.Concat(MyString, ' ',
YourString));
Esse cdigo exibe Hello World! para o console.
Ingressar
O String.Join mtodo cria uma nova seqncia de uma matriz de seqncias e uma seqncia
de caracteres separadores. Esse mtodo til se voc desejar concatenar vrias seqncias
juntos, fazer uma lista talvez separada por uma vrgula.
O exemplo a seguir usa um espao para vincular uma matriz de seqncia de caracteres.
C#
string[] MyString = {"Hello", "and", "welcome", "to", "my" , "world!"}; Console.WriteLine(String.Join(" ",
MyString));
Esse cdigo exibe Hello and welcome to my world! para o console.
Inserir
O String.Insert mtodo cria uma nova seqncia inserindo uma seqncia em uma posio na
outra seqncia especificada. Esse mtodo usa um ndice com base zero. O exemplo a seguir
insere uma seqncia no quinta a posio do MyString ndice e cria uma nova seqncia com
esse valor.
C#
string MyString = "Once a time."; Console.WriteLine(MyString.Insert(4, " upon"));
Esse cdigo exibe Once upon a time. para o console.
CopyTo
O String.CopyTo mtodo copia partes de uma seqncia em uma matriz de caracteres. Voc
pode especificar os dois ndice Incio da seqncia e o nmero de caracteres a serem copiados.
Este mtodo utiliza o ndice fonte, uma matriz de caracteres, o ndice de destino, e o nmero de
caracteres para copiar. Todos os ndices so baseada em zero.
O exemplo a seguir usa o CopyTo mtodo para copiar os caracteres da palavra " Hello " de um
objeto de seqncia para a primeira posio de ndice de uma matriz de caracteres.
C#
string MyString = "Hello World!"; char[] MyCharArray = {'W','h','e','r','e'}; Console.WriteLine("The original
character array: {0}", MyCharArray); MyString.CopyTo(0, MyCharArray,0 ,5); Console.WriteLine("The new
character array: {0}", MyCharArray);
Esse cdigo exibir o seguinte para o console.
The original character array: Where The new character array: Hello
Visual C# Consolidado 460
Aparando e Removendo Caracteres
Se voc estiver analisando uma frase em palavras individuais, voc pode finalizar backup com
palavras que tenham espaos em branco (tambm chamados espaos em branco) em qualquer
uma das extremidades da palavra. Nessa situao, voc pode usar um dos mtodos aparo na
classe System.String para remover qualquer nmero de espaos ou outros caracteres de uma
posio especificada na seqncia de caracteres A tabela a seguir descreve os mtodos aparo
disponveis.
Nome do
mtodo Uso
String.Trim Remove espaos em branco de incio e no fim de uma seqncia.
String.TrimEnd Remove caracteres especificados em uma matriz de caracteres a partir do final
de uma seqncia.
String.TrimStart Remove caracteres especificados em uma matriz de caracteres de incio de
uma seqncia.
String.Remove Remove um nmero especificado de caracteres de uma posio ndice
especificado na seqncia.
Aparar
Facilmente voc pode remover espaos em branco de ambas as extremidades de uma seqncia
usando o String.Trim mtodo, conforme mostrado no exemplo o seguir.
C#
String MyString = " Big "; Console.WriteLine("Hello{0}World!", MyString ); string TrimString =
MyString.Trim(); Console.WriteLine("Hello{0}World!", TrimString );
Esse cdigo exibe as seguintes linhas ao console.
Hello Big World! HelloBigWorld!
TrimEnd
O String.TrimEnd mtodo Remove caracteres a partir do final de uma seqncia, criando um
novo objeto de seqncia. Uma matriz de caracteres passado para este mtodo para especificar
os caracteres a ser removido. A ordem dos elementos na matriz de caracteres no afeta a
operao aparo. O Trim pra quando for encontrado um caractere no especificado na matriz.
O exemplo a seguir remove as letras de uma seqncia usando o TrimEnd mtodo ltima. Neste
exemplo, a posio do caractere 'r' e o 'W' caractere esto invertidos para ilustrar que a ordem dos
caracteres na matriz no importa. Observe que este cdigo remove a palavra ltima de MyString
mais a primeira parte.
C#
string MyString = "Hello World!"; char[] MyChar = {'r','o','W','l','d','!',' '}; string NewString =
MyString.TrimEnd(MyChar); Console.WriteLine(NewString);
Esse cdigo exibe He para o console.
Visual C# Consolidado 461
O exemplo a seguir remove a ltima palavra de uma seqncia usando o TrimEnd mtodo. Nesse
cdigo, uma vrgula segue a palavra Hello e, porque a vrgula no est especificada na matriz de
caracteres para cortar, o Trim termina na vrgula.
C#
string MyString = "Hello, World!"; char[] MyChar = {'r','o','W','l','d','!',' '}; string NewString =
MyString.TrimEnd(MyChar); Console.WriteLine(NewString);
Esse cdigo exibe Hello, para o console.
TrimStart
O String.TrimStart mtodo semelhante ao mtodo String.TrimEnd exceto que ele cria uma
nova seqncia, removendo caracteres do incio da seqncia um objeto existente. Uma matriz de
caracteres passado para o TrimStart mtodo para especificar os caracteres a ser removido.
Como com o TrimEnd mtodo, a ordem dos elementos na matriz de caracteres no afeta a
operao aparo. O Trim pra quando for encontrado um caractere no especificado na matriz.
O exemplo a seguir remove a primeira palavra de uma seqncia. Neste exemplo, a posio do
caractere 'l' e o 'H' caractere esto invertidos para ilustrar que a ordem dos caracteres na matriz
no importa.
C#
string MyString = "Hello World!"; char[] MyChar = {'e', 'H','l','o',' ' }; string NewString =
MyString.TrimStart(MyChar); Console.WriteLine(NewString);
Esse cdigo exibe World! para o console.
Remover
O String.Remove mtodo, comeando em uma posio especificada em uma seqncia
existente, remove um nmero especificado de caracteres. Este mtodo assume um ndice com
base zero.
O exemplo a seguir remove dez caracteres de um Incio de seqncia na posio cinco de um
ndice da seqncia baseada em zero.
C#
string MyString = "Hello Beautiful World!"; Console.WriteLine(MyString.Remove(5,10));
Esse cdigo exibe Hello World! para o console.
Preenchendo Seqncias de Caracteres
Pode usar um dos mtodos a seguir para criar uma nova verso de uma seqncia existente que
alinhado direita ou alinhada esquerda a um nmero especificado de espaos. A nova
seqncia ou pode ser preenchida com espaos vazios (tambm chamados espaos em branco)
ou com caracteres personalizados.
Nome do
mtodo Uso
Visual C# Consolidado 462
String.PadLeft Alinha direita e PADS uma seqncia para que seja uma distncia
especificada a partir do incio da seqncia seu caractere mais direita.
String.PadRight Alinha esquerda e PADS uma seqncia para que seja uma distncia
especificada a partir do final de seqncia seu caractere mais direita.
PadLeft
O String.PadLeft mtodo cria uma nova seqncia que alinhado direita para que o ltimo
caractere seja um nmero de espaos do primeiro ndice da seqncia especificado. Espaos em
branco so inseridos se voc no usar uma substituio que permite que voc se especificar seu
prprio caractere de preenchimento personalizada.
O exemplo a seguir usa o PadLeft mtodo para criar uma nova seqncia que tenha um
comprimento total de vinte espaos.
C#
string MyString = "Hello World!"; Console.WriteLine(MyString.PadLeft(20, '-'));
Este exemplo exibe --------Hello World! para o console.
PadRight
O String.PadRight mtodo cria uma nova seqncia que alinhado esquerda para que a
seqncia atual ser estendida especificado um nmero de espaos para a direita do primeiro
ndice a seqncia na. Esse mtodo preenche a nova seqncia com espaos em branco se voc
no especificar um caractere personalizado.
O exemplo a seguir usa o PadRight mtodo para criar uma nova seqncia que tenha um
comprimento total de vinte espaos.
C#
string MyString = "Hello World!"; Console.WriteLine(MyString.PadRight(20, '-'));
Este exemplo exibe Hello World!-------- para o console.
Comparando Seqncias de Caracteres
O.NET Framework fornece vrios mtodos para comparar os valores de seqncias. A tabela a
seguir lista e descreve os mtodos Comparison valor.
Nome do mtodo Uso
String.Compare Compara os valores das duas seqncias. Retorna um valor inteiro.
String.CompareOrdinal Compara duas seqncias sem considerar a cultura local. Retorna um
valor inteiro.
String.CompareTo Compara o objeto de seqncia atual outra seqncia. Retorna um valor
inteiro.
String.StartsWith Determina se uma seqncia comea com a seqncia passada. Retorna
um valor booleano.
String.EndsWith Determina se uma seqncia termina com a seqncia passada. Retorna
Visual C# Consolidado 463
um valor booleano.
String.Equals Determina se duas seqncias so os mesmos. Retorna um valor
booleano.
String.IndexOf Retorna a posio de ndice de um caractere ou seqncia, comeando a
partir do incio da seqncia voc est examinando. Retorna um valor
inteiro.
String.LastIndexOf Retorna a posio de ndice de um caractere ou seqncia, comeando a
partir do final de seqncia voc est examinando. Retorna um valor
inteiro.
Compare
O String.Compare mtodo fornece uma maneira completa de comparar o objeto de seqncia
atual para outro objeto ou seqncia. Esse mtodo culturally ciente. Voc pode usar esta funo
para comparar dois seqncias ou substrings de duas seqncias. Alm disso, overloads so
fornecidos que considerar ou Ignorar maisculas e culturais varincia. A tabela a seguir mostra
valores inteiros trs que podem ser retornados por esse mtodo.
Tipo de valor Condio
Um inteiro negativo strA menor que strB.
0 igual a strAstrB.
Um inteiro positivo
Ou-
1
Esta instncia maior que value.
Ou-
value uma referncia nula (Nothing no Visual Basic.)
O exemplo a seguir usa o Compare mtodo para determinar os valores das duas seqncias
relativos.
C#
string MyString = "Hello World!"; Console.WriteLine(String.Compare(MyString, "Hello World?"));
Este exemplo exibe -1 para o console.
O exemplo anterior confidenciais culture-por padro. Para executar uma comparao de
seqncia culture-insensitive, use uma sobrecarga do String.Compare mtodo que permite que
voc para especificar a cultura para usar, fornecendo um culture parmetro. Para obter um
exemplo que demonstra como usar o String.Compare mtodo para realizar uma comparao
culture-insensitive, consulte Executar Comparisons String Insensitive Culture-.
CompareOrdinal
O String.CompareOrdinal mtodo compara dois objetos de seqncia sem considerar a cultura
local. Os valores de retorno desse mtodo so idnticos aos valores retornados pelo mtodo
Compare na tabela anterior.
O exemplo a seguir usa o CompareOrdinal mtodo para comparar os valores das duas
seqncias.
C#
string MyString = "Hello World!"; Console.WriteLine(String.CompareOrdinal(MyString, "hello world!"));
Visual C# Consolidado 464
Este exemplo exibe -32 para o console.
CompareTo
O String.CompareTo mtodo compara a seqncia que o objeto de seqncia atual encapsula a
outro seqncia ou objeto. Os valores de retorno desse mtodo so idnticos aos valores
retornados pelo mtodo Compare na tabela anterior.
O exemplo a seguir usa o CompareTo mtodo para comparar o MyString objeto do OtherString
objeto.
C#
String MyString = "Hello World"; String OtherString = "Hello World!"; int MyInt =
MyString.CompareTo(OtherString); Console.WriteLine( MyInt );
Este exemplo exibe 1 para o console.
Todos os overloads do mtodo String.CompareTo executar comparaes confidenciais culture-e
maisculas de minsculas por padro. Nenhum overloads desse mtodo so fornecidos que
permitem a voc para realizar uma comparao insensitive culture-. Para maior clareza de cdigo,
recomendvel que voc utilize o String.Compare mtodo em vez disso, especificando
CultureInfo.CurrentCulture para operaes confidenciais culture-ou CultureInfo.InvariantCulture
para operaes insensitive culture-. Para obter exemplos que demonstram como usar o
String.Compare mtodo para realizar comparaes confidenciais culture-e-insensitive culture,
consulte Executar Comparisons String Insensitive Culture-.
Igual a
O String.Equals mtodo facilmente pode determinar se duas seqncias so os mesmos.
Maisculas de Minsculas esse mtodo retorna um true ou false boolean valor. Pode ser usado
de uma classe existente, conforme ilustrado no exemplo a seguir. O exemplo a seguir usa o
Equals mtodo para determinar se um objeto de seqncia contm a frase " Hello World ".
C#
string MyString = "Hello World"; Console.WriteLine(MyString.Equals("Hello World"));
Este exemplo exibe True para o console.
Esse mtodo tambm pode ser usado como um mtodo esttico. O exemplo a seguir compara
dois objetos de seqncia usando um mtodo esttico.
C#
string MyString = "Hello World"; string YourString = "Hello World";
Console.WriteLine(String.Equals(MyString, YourString));
Este exemplo exibe True para o console.
StartsWith e EndsWith
Voc pode utilizar o String.StartsWith mtodo para determinar se um objeto de seqncia
comea com os mesmos caracteres que abranger outra seqncia. Esse mtodo maisculas de
minsculas retorna true se o objeto de seqncia atual comea com a seqncia passada e false
Visual C# Consolidado 465
se no estiver. O exemplo a seguir usa esse mtodo para determinar se um objeto de seqncia
comea com " Hello ".
C#
string MyString = "Hello World"; Console.WriteLine(MyString.StartsWith("Hello"));
Este exemplo exibe True para o console.
O String.EndsWith mtodo Compara uma seqncia passada para os caracteres que existem no
final da seqncia o objeto atual. Ele tambm retorna um valor booleano. O exemplo a seguir
verifica o fim de uma seqncia usando o EndsWith mtodo.
C#
string MyString = "Hello World"; Console.WriteLine(MyString.EndsWith("Hello"));
Este exemplo exibe False para o console.
IndexOf e LastIndexOf
Voc pode usar o String.IndexOf mtodo para determinar a posio da primeira ocorrncia de um
caractere especfico dentro de uma seqncia. Este mtodo maisculas de minsculas inicia
contagem do incio de uma seqncia e retorna a posio de um caractere utilizando um ndice
com base zero passado. Se o caractere no puder ser encontrado, um valor de 1 retornado.
O exemplo a seguir usa o IndexOf mtodo para procurar a primeira ocorrncia da. ' l ' caracteres
em uma seqncia
C#
string MyString = "Hello World"; Console.WriteLine(MyString.IndexOf('l'));
Este exemplo exibe 2 para o console.
O String.LastIndexOf mtodo semelhante ao mtodo String.IndexOf exceto que ela retorna a
posio da ltima ocorrncia de um caractere especfico dentro de uma seqncia. Ele diferencia
maisculas de minsculas e usa um ndice com base zero.
O exemplo a seguir utiliza o LastIndexOf mtodo para pesquisar para a ltima ocorrncia da. ' l '
caracteres em uma seqncia
C#
string MyString = "Hello World"; Console.WriteLine(MyString.LastIndexOf('l'));
Este exemplo exibe 9 para o console.
Ambos os mtodos so teis quando usada em conjunto com o String.Remove mtodo. Voc
pode usar um ou LastIndexOf Mtodos para recuperar a posio do caractere, e fornea naquela
posio para o Remove mtodo para remover um caractere ou uma palavra que comece com
esse caractere. o IndexOf
Visual C# Consolidado 466
Alterando a Caixa
Se voc escrever um aplicativo que aceita entrada de um usurio, nunca pode certificar-que caso
ele ou ela usar para inserir os dados. Como os mtodos que comparam seqncias e caracteres
diferenciam maisculas de minsculas, voc deve converter caso de seqncias de caracteres
inseridos pelos usurios antes comparando-os em valores constantes. Voc pode alterar
facilmente caso de uma seqncia. A tabela a seguir descreve dois mtodos alterao caso. Cada
mtodo fornece uma substituio que aceita uma cultura.
Nome do mtodo Uso
String.ToUpper Converte todos os caracteres em uma seqncia em maisculas.
String.ToLower Converte todos os caracteres em uma seqncia em minsculas.
ToUpper
O String.ToUpper mtodo altera todos os caracteres em uma seqncia em maisculas. O
exemplo seguinte converte a seqncia " World hello! de " Misto caso em maisculo.
C#
String MyString = "Hello World!"; Console.WriteLine(MyString.ToUpper());
Este exemplo exibe HELLO WORLD! para o console.
O exemplo anterior confidenciais culture-por padro. Para executar uma alterao caso culture-
insensitive, use uma sobrecarga do String.Upper mtodo que permite que voc para especificar a
cultura para usar, fornecendo um culture parmetro. Para obter um exemplo que demonstra como
usar o String.Upper mtodo para executar uma alterao caso culture-insensitive, consulte
Executar alteraes caso Insensitive Culture-.
ToLower
O String.ToLower mtodo semelhante ao mtodo anterior, mas em vez disso converte todos os
caracteres em uma seqncia para minsculas. O exemplo a seguir converte a seqncia " World
hello! " em minsculas.
C#
String MyString = "Hello World!"; Console.WriteLine(MyString.ToLower());
Este exemplo exibe hello world! para o console.
O exemplo anterior confidenciais culture-por padro. Para executar uma alterao caso culture-
insensitive, use uma sobrecarga do String.Lower mtodo que permite que voc para especificar a
cultura para usar, fornecendo um culture parmetro. Para obter um exemplo que demonstra como
usar o String.Lower mtodo para executar uma alterao caso culture-insensitive, consulte
Executar alteraes caso Insensitive Culture-.
Visual C# Consolidado 467
Usando a Classe StringBuilder
O String objeto imutvel. Sempre que voc utilizar um dos mtodos da classe System.String,
voc criar um novo objeto de seqncia na memria, que requer uma nova alocao de espao
para esse novo objeto. Em situaes em que voc precise realizar modificaes repetidas em
uma seqncia de caracteres, a sobrecarga associada criando um novo String objeto pode ser
caro. A System.Text.StringBuilder classe pode ser usada quando voc deseja modificar uma
seqncia sem criar um novo objeto. Por exemplo, usando a StringBuilder classe pode melhorar
o desempenho quando concatenao Muitas seqncias juntos em um loop.
Voc pode criar uma nova instncia da classe StringBuilder por inicializar a varivel com um dos
mtodos sobrecarregados de construtor, conforme ilustrado no exemplo a seguir.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
Definir a capacidade e comprimento
Embora voc pode especificar um valor para o nmero mximo de caracteres que pode conter.
um objeto dinmico que permite que voc para expandir o nmero de caracteres na seqncia
que ele encapsula, o StringBuilder Esse valor chamada a capacidade do objeto e no deve ser
confundido com o comprimento da seqncia de caracteres que mantm o atual StringBuilder.
Por exemplo, voc pode criar uma nova instncia da classe StringBuilder com a seqncia " Al
", que possui um comprimento de 5, e voc pode especificar que ele tiver a capacidade mxima
de 25. Quando voc modificar ele no no realocar tamanho para si at que a capacidade seja
alcanada. o StringBuilder, Quando isso ocorrer, o novo espao distribudo automaticamente e
a capacidade duplicada. Voc pode especificar a capacidade da StringBuilder classe usando
um dos construtores sobrecarregados. O exemplo a seguir especifica que o MyStringBuilder objeto
pode ser expandido para um mximo de 25 espaos.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);
Alm disso, voc pode usar a leitura / gravar Capacidade propriedade para definir o tamanho
mximo do objeto. O exemplo a seguir usa a Capacity propriedade para definir o comprimento
mximo de objeto.
C#
MyStringBuilder.Capacity = 25;
O EnsureCapacity mtodo pode ser usado para verificar a capacidade do atual StringBuilder. Se
a capacidade for maior que o valor passado, nenhuma alterao feita; no entanto, se a
capacidade for menor que o valor passado, a capacidade atual alterada para corresponder o
valor passado.
A Comprimento propriedade pode tambm ser exibido ou definido. Se voc definir a Length
propriedade para um valor que maior que a Capacity propriedade, a Capacity propriedade
automaticamente alterada para o mesmo valor que a Length propriedade. A configurao da
Length propriedade para um valor que menor que o comprimento da seqncia de caracteres
dentro da atual StringBuilder diminui a seqncia.
Modificar a seqncia de caracteres StringBuilder
Visual C# Consolidado 468
A tabela a seguir lista os mtodos que podem ser usados para modificar o contedo de um
StringBuilder.
Nome do mtodo Uso
StringBuilder.Append Acrescenta informaes ao final do atual StringBuilder.
StringBuilder.AppendFormat Substitui um especificador de formato passado em uma seqncia
com texto formatado.
StringBuilder.Insert Insere uma seqncia ou objeto para o ndice especificado do atual
StringBuilder.
StringBuilder.Remove Remove um nmero especificado de caracteres da atual
StringBuilder.
StringBuilder.Replace Substitui um caractere especificado em um ndice especificado.
Acrescentar
O Append mtodo pode ser usado para adicionar texto ou uma representao seqncia de um
objeto ao final de uma seqncia representada por atual StringBuilder. O exemplo a seguir
inicializa e ento acrescenta algum texto para o final do objeto. Para " Hello World " um
StringBuilder Espao em alocado automaticamente conforme necessrio.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a
beautiful day."); Console.WriteLine(MyStringBuilder);
Este exemplo exibe Hello World! What a beautiful day. para o console.
AppendFormat
Do Formatao seo o AppendFormat mtodo adiciona texto ao final do StringBuilder, mas
tambm implementa a IFormattable interface e portanto aceita as seqncias Formato padro
descritas em. Voc pode usar esse mtodo para personalizar o formato de variveis e acrescentar
esses valores para um StringBuilder. O exemplo a seguir utiliza o AppendFormat mtodo para
colocar um valor inteiro formatado como um valor de moeda no final de um StringBuilder.
C#
int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);
Este exemplo exibe Your total is $25.00 para o console.
Inserir
O Insert mtodo adiciona uma seqncia ou objeto para uma posio especificada na atual
StringBuilder. O exemplo a seguir utiliza esse mtodo para inserir uma palavra na sexta posio
de um StringBuilder.
Visual C# Consolidado 469
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
Este exemplo exibe Hello Beautiful World! para o console.
Remover
Use o Remove mtodo para remover um nmero especificado de caracteres da atual
StringBuilder, comeando em um ndice com base zero especificado. O exemplo a seguir utiliza
o Remove mtodo para diminuir um StringBuilder.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
Este exemplo exibe Hello para o console.
Replace
O Replace mtodo pode ser usado para substituir caracteres dentro do StringBuilder objeto com
outro caractere especificado. O exemplo a seguir usa o Replace mtodo para localizar um
StringBuilder objeto para todas as ocorrncias do caractere ponto de exclamao (!) e substitui-
los com o caractere ponto de interrogao (?).
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
Este exemplo exibe Hello World? para o console.
Como Executar Manipulaes sobre Seqncia de Caracteres Usando Operaes Bsicas
O exemplo a seguir usa alguns dos mtodos discutidos nos tpicos Bsico operaes String para
construir uma classe que executa manipulations de seqncia de uma maneira que pode ser
encontrada em um aplicativo do mundo real. A MailToData classe armazena o nome e endereo
de uma pessoa em propriedades separadas e fornece uma maneira para combinar o City, State., e
Zip campos em uma nica seqncia para exibio para o usurio Alm disso, a classe permite ao
usurio para inserir a cidade, estado, e informaes cdigo postal como uma nica seqncia; o
aplicativo analisa a seqncia de caracteres nica e insere as informaes adequadas na
propriedade correspondente automaticamente.
Para simplificar, este exemplo usa um aplicativo de console com uma interface de linha de
comando.
Exemplo
C#
using System; class MainClass { static void Main(string[] args) { MailToData MyData = new MailToData();
Console.Write("Enter Your Name:"); MyData.Name = Console.ReadLine(); Console.Write("Enter Your
Address:"); MyData.Address = Console.ReadLine(); Console.Write("Enter Your City, State, and ZIP Code
separated by spaces:"); MyData.CityStateZip = Console.ReadLine(); Console.WriteLine("Name: {0}",
Visual C# Consolidado 470
MyData.Name); Console.WriteLine("Address: {0}", MyData.Address); Console.WriteLine("City: {0}",
MyData.City); Console.WriteLine("State: {0}", MyData.State); Console.WriteLine("Zip: {0}", MyData.Zip);
Console.WriteLine("The following address will be used:"); Console.WriteLine(MyData.Address);
Console.WriteLine(MyData.CityStateZip); } } public class MailToData { string name = " "; string address = "
"; string citystatezip = " "; string city = " "; string state = " "; string zip = " "; public MailToData() { } public
string Name { get{return name;} set{name = value;} } public string Address { get{return address;}
set{address = value;} } public string CityStateZip { get { return ReturnCityStateZip(); } set { citystatezip =
value; ParseCityStateZip(); } } public string City { get{return city;} set{city = value;} } public string State {
get{return state;} set{state = value;} } public string Zip { get{return zip;} set{zip = value;} } private void
ParseCityStateZip() { int CityIndex; int StateIndex; // Check for an exception if the user did not enter spaces
between // the elements. try { // Find index position of the space between // city and state and assign that
value to CityIndex. CityIndex = citystatezip.IndexOf(" "); // Initialize the CityArray to the value of the //
index position of the first white space. char[] CityArray = new char[CityIndex]; // Copy the city to the
CityArray. citystatezip.CopyTo(0,CityArray ,0, CityIndex); // Find index position of the space between //
state and zip and assign that value to CityIndex. StateIndex = citystatezip.LastIndexOf(" "); // Initialize the
StateArray to the length of the state. char[] StateArray = new char[StateIndex - CityIndex]; // Copy the state
to the StateArray. citystatezip.CopyTo(CityIndex, StateArray, 0, (StateIndex - CityIndex)); // Initialize the
ZipArray to the length of the zip. char[] ZipArray = new char[citystatezip.Length - StateIndex]; // Copy the
zip to the ZipArray. citystatezip.CopyTo(StateIndex, ZipArray, 0, (citystatezip.Length - StateIndex)); //
Assign city to the value of CityArray. city = new String(CityArray); // Trim white spaces, commas, and so on.
city = city.Trim(new char[]{' ', ',', ';', '-', ':'}); // Assign state to the value of StateArray. state = new
String(StateArray); // Trim white spaces, commas, and so on. state = state.Trim(new char[]{' ', ',', ';', '-', ':'});
// Assign zip to the value of ZipArray. zip = new String(ZipArray); // Trim white spaces, commas, and so on.
zip = zip.Trim(new char[]{' ', ',', ';', '-', ':'}); } // If an exception is encountered, alert the user to enter spaces
// between the elements. catch(OverflowException) { Console.WriteLine("\n\nYou must enter spaces
between elements.\n\n"); } } private string ReturnCityStateZip() { // Make state uppercase. state =
state.ToUpper(); // Put the value of city, state, and zip together in the proper manner. string MyCityStateZip
= String.Concat(city, ", ", state, " ", zip); return MyCityStateZip; } }
Quando o cdigo anterior executado, o usurio solicitado a digitar sua prpria nome e
endereo. O aplicativo coloca as informaes nas propriedades adequadas e exibe as
informaes novamente para o usurio, criar uma nica seqncia que exibe a cidade, estado e
CEP informaes.
Como Converter Tipos de Dados Usando System.Convert
A System.Convert classe fornece um conjunto completo de mtodos para converses com
suporte. Ele fornece uma maneira idioma neutro para realizar converses e est disponvel para
todos os idiomas que direcionar o Common Language Runtime. Enquanto idiomas diferentes
podem ter tcnicas diferentes para converter tipos de dados, a Convert classe assegura que
todas as converses comuns sero disponveis em um formato genrico. Esta classe executa
converses restrio, bem como converses para tipos de dados no relacionadas. Por exemplo,
converses de String tipos para tipos numricos, DateTime Tipos a String tipos, e String Tipos
para Boolean tipos tm suporte. Do lista de mtodos para obter uma lista de converses
disponveis, consulte na classe Convert. A Convert classe executa converses verificados e
sempre gera uma exceo se no houver suporte para a converso. A exceo geralmente um
OverflowException. Para obter uma lista de converses com suporte, consulte o Digite tabelas de
converso.
Visual C# Consolidado 471
Voc pode passar o valor que voc deseja para converter em um dos mtodos apropriados na
classe Convert e inicializar o valor retornado para uma nova varivel. Por exemplo, o cdigo a
seguir usa a Convert classe para transformar um String valor em um Boolean valor.
Exemplo
C#
string MyString = "true"; bool MyBool = Convert.ToBoolean(MyString); // MyBool has the value of True.
A Convert classe tambm til se voc tiver uma seqncia que voc deseja converter em um
valor numrico. O exemplo de cdigo a seguir converte uma seqncia de caracteres que contm
caracteres numricos em um Int32 valor.
C#
string newString = "123456789"; int MyInt = Convert.ToInt32(newString); // MyInt has the value of
123456789.
A Convert classe tambm pode ser usada para uma converso restrio que no pode ser
executada implicitamente em voc estiver usando o idioma especfico. O exemplo de cdigo a
seguir mostra uma converso de restrio em uma menor Int32 utilizando o Convert.ToInt32
Mtodo. um Int64
C#
Int64 MyInt64 = 123456789; int MyInt = Convert.ToInt32(MyInt64); // MyInt has the value of 123456789.
s vezes, executar uma converso restrio com as Convert alteraes de classe o valor do item
est sendo convertido. O seguinte cdigo exemplo converte em um Int32 valor. um Double Nesse
caso, o valor arredondado de 42.72 para 43 para concluir a converso.
C#
Double MyDouble = 42.72; int MyInt = Convert.ToInt32(MyDouble); // MyInt has the value of 43.
Como Remover Caracteres Invlido de uma Seqncia de Caracteres
O exemplo de cdigo a seguir usa o mtodo esttico Regex.Replace para tirar de uma seqncia
caracteres invlidos. Voc pode usar o CleanInput mtodo definido aqui para retirar
potencialmente prejudiciais caracteres que tiver sido inseridos em um campo Texto em um
formulrio que aceita entrada do usurio. Retorna CleanInput uma seqncia aps stripping fora
todos os caracteres exceto nonalphanumeric @, - (um trao), e. (um perodo).
Exemplo
C#
String CleanInput(string strIn) { // Replace invalid characters with empty strings. return
Regex.Replace(strIn, @"[^\w\.@-]", ""); }
Como Verificar se Seqncias de Caracteres Esto em um Formato de Email Vlido
O exemplo de cdigo a seguir usa o mtodo esttico Regex.IsMatch para verificar se uma
seqncia est no formato de email vlido. O IsValidEmail mtodo retorna true Se a seqncia
contm um endereo de email vlido e false se ele no estiver, mas leva nenhuma outra ao.
Voc pode usar IsValidEmail Para filtrar sem endereos de email que contm caracteres invlidos
Visual C# Consolidado 472
antes o aplicativo armazena os endereos em um banco de dados ou exibe-os em uma pgina
ASP.NET.
Exemplo
C#
bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn,
@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }
Colees e Estruturas de Dados
Dados intimamente relacionados podem ser manuseados com mais eficincia Quando agrupadas
juntas para uma coleo. Em vez de escrever cdigo separado para manipular cada objeto
individual, voc pode usar o mesmo cdigo para processar todos os elementos de uma coleo.
Para gerenciar uma coleo, a Array classe e as System.Collections classes so usadas para
adicionar, remover e modificar a elementos individuais da coleo ou um intervalo de elementos.
Uma coleo inteira ainda pode ser copiada para outra coleo.
Algumas Collections Classes tero Recursos, classificao e a maioria so indexadas.
Gerenciamento de memria tratado automaticamente, e a capacidade de uma coleo
expandida conforme necessrio. Sincronizao fornece segurana do segmento ao acessar
membros da coleo. Algumas Collections classes podem gerar wrappers que tornam a coleo
somente leitura ou de tamanho fixo. Qualquer Collections classe pode gerar seu prprio
enumerador que torna fcil a percorrer os elementos.
No.NET Framework verso 2.0, a coleo genrica classes Fornecer nova funcionalidade e
facilitar para criar conjuntos de tipo forte. Do System.Collections.Generic Consulte e
System.Collections.ObjectModel espaos de nome.
Definir colees
Uma coleo um conjunto de objetos que so agrupados da mesma forma digitados.
Objetos de qualquer tipo podem ser agrupados em uma nica coleo do tipo Object para tirar
proveito dos construes que so inerentes no mesmo idioma. Por exemplo, a instruo C#
foreach (for each. no Visual Basic) espera todos os objetos na coleo para ser de um nico tipo
No entanto, em uma coleo de tipo Object, processamento adicional feito nos elementos
individualmente, como boxing e unboxing ou converses, que afetam o desempenho da coleo.
Boxing e unboxing geralmente ocorrem se armazenar ou recuperar um tipo de valor em uma
coleo de tipo Object.
Genricas colees, como List, e altamente digitadas colees nongeneric, como StringCollection,
evitar esses acertos de desempenho se o tipo de elemento o tipo que a coleo destinada a
(por exemplo, armazenar ou recuperar seqncias de.) um StringCollection Alm disso,
conjuntos de tipo forte executar automaticamente validao Tipo de cada elemento adicionado
coleo.
Todas as colees que direta ou indiretamente implementam a ICollection interface ou a
ICollection interface genrico compartilhar vrios recursos, alm de mtodos que adicionar,
remover, ou procurar elementos:
Visual C# Consolidado 473
Um enumerador.
Um enumerador um objeto que itera atravs de sua coleo associada. Ele pode ser
considerado de um ponteiro mvel para qualquer elemento na coleo. Um enumerador pode
ser associado a uma coleo, mas um conjunto pode ter vrios enumeradores. A instruo C#
foreach (for each. no Visual Basic) usa o enumerador e oculta a complexidade da
manipulao o enumerador
Membros de sincronizao.
Sincronizao fornece segurana do segmento ao acessar elementos da coleo. As colees
so no segmento seguro por padro. Apenas classes de alguns em espaos para nome
System.Collections fornecem um Synchronize mtodo que cria um wrapper isenta de
segmentos atravs da coleo. No entanto, todas as classes em todos os System.Collections
espaos fornecem uma SyncRoot propriedade que pode ser usada para criar seus prprios
wrapper isenta de segmentos por classes derivadas. Uma IsSynchronized propriedade
tambm fornecida para determinar se a coleo segmento seguro. Sincronizao no est
disponvel na interface ICollection genrico.
The CopyTo method.
Todas as colees podem ser copiadas para uma matriz usando o CopyTo mtodo; no
entanto, a ordem dos elementos na matriz novo est baseado a seqncia em que o
enumerador retorna-los. A matriz resultante sempre unidimensional com um limite inferior de
zero.
Observe que a ICollection interface genrica tem membros adicionais que no inclui a interface
nongeneric.
Os seguintes recursos so implementados em algumas classes em espaos para nome
System.Collections:
Capacidade e Contagem.
A capacidade de uma coleo o nmero de elementos ele pode conter. A contagem de uma
coleo o nmero de elementos ele realmente contm. A BitArray um caso especial; sua
capacidade o mesmo que seu comprimento, que o mesmo que a contagem. Algumas
colees ocultar a capacidade, a contagem ou ambos.
Automaticamente todas as colees na System.Collections espaos expanda na capacidade
quando a capacidade atual alcanada. A memria realocada, e os elementos so copiados
da coleo antiga para a nova OU. Isso reduz o cdigo necessrio para usar a coleo;
entretanto, o desempenho da coleo pode ainda ser afetado negativamente. A melhor
maneira de evitar desempenho deficiente causado por vrios realocaes para definir a
capacidade inicial a ser o tamanho estimado da coleo.
Bound LOWER.
O limite inferior de uma coleo o ndice de seu primeiro elemento. Todas as colees
indexadas na System.Collections espaos tm um limite inferior de zero. tem Array um limite
inferior de zero por padro, mas um limite inferior diferente pode ser definido ao criar uma
instncia da Array classe usando CreateInstance.
classes System.Collections geralmente podem ser categorizados em trs tipos:
Normalmente usados colees.
Estas so as variaes comuns de coletas de dados, como tabelas hash, filas, pilhas,
dicionrios, e listas. Colees comumente usadas ter verses genricos e verses nongeneric.
Bit colees.
Visual C# Consolidado 474
Esses so colees cujos elementos so sinalizadores de bit. Se eles comportar de maneira
ligeiramente diferente das outras colees.
Especializado colees.
Esses so colees com finalidades, geralmente para lidar com um tipo especfico de
elemento, como StringDictionary altamente especficas.
Certifique-se de escolher uma classe coleo cuidadosamente. Como cada coleo tem seu
prprio funcionalidade, cada tambm possui seu prprio limitaes. O mais especializada uma
coleo , quanto mais limitado ele . Para obter dicas sobre como escolher uma coleo,
consulte Selecionar uma Classe de coleo.
Comumente usados tipos da coleo
Tipos de coleo so as variaes comuns de coletas de dados, como tabelas hash, filas, pilhas,
dicionrios, e listas.
Colees so baseadas na ICollection interface, a IList Interface, interface IDictionary, ou suas
contrapartes genricos. A IList interface e a IDictionary interface ambos so derivados a partir da
ICollection interface; portanto, todas as colees so baseadas na ICollection interface seja
direta ou indiretamente. Nas colees com base na interface IList (.,)) ou diretamente na interface
ICollection, cada elemento contm apenas um valor, como Array, ArrayList ou List, como Queue,
Stack ou LinkedList (, Nas colees com base na interface IDictionary a Hashtable. e SortedList
Classes genricos), cada elemento contm uma chave e um valor, como (e SortedList classes, ou
o Dictionary A KeyedCollection classe exclusiva porque uma lista de valores com chaves
incorporadas nos valores, e, portanto, ele funciona como uma lista e como um dicionrio.
Colees genricas so a melhor soluo para forte digitando. Entretanto, se o idioma no
oferece suporte generics, espao para nome System.Collections inclui colees, base, como
CollectionBase, ReadOnlyCollectionBase,. e DictionaryBase, quais so classes base abstratas
que podem ser estendidos para criar classes coleo que esto digitados altamente
Colees podem variar, dependendo em como os elementos so armazenados, como eles so
classificados, como pesquisas so executadas, e como comparaes so feitas. A Queue classe
e a Queue classe genrica fornecem listas primeiro First-In--Out, enquanto a Stack classe e a
Stack classe fornecem listas ltima in primeiro-fora. A SortedList classe e a SortedList classe
genrica fornecem classificadas verses de classe Hashtable e a Dictionary classe genrica. Os
elementos de uma Hashtable ou uma Dictionary so acessveis somente para a chave do
elemento, mas os elementos de uma SortedList ou uma KeyedCollection so acessveis, seja
atravs da tecla ou pelo ndice do elemento. Os ndices em todas as colees so base zero,
exceto Array, que permite matrizes que so base no zero.
Colees de bits
Colees bits so colees cujos elementos so sinalizadores de bit. Ter porque cada elemento
um pouco em vez de um objeto, essas colees comportamento um pouco diferente das outras
colees.
A BitArray classe uma classe coleo na qual a capacidade sempre o mesmo que a
contagem. Elementos so adicionados ao aumentando a Length propriedade; elementos so
excludos diminuindo a Length propriedade. um BitArray A BitArray classe oferece mtodos que
no so encontrados em outras colees, incluindo aqueles que permitem vrios elementos a ser
modificado usando um filtro, como And, Or uma vez, Xor., Not e SetAll
Visual C# Consolidado 475
A BitVector32 classe uma estrutura que oferece a mesma funcionalidade como BitArray, mas
com desempenho mais rpido. BitVector32 mais rpido porque um tipo de valor e portanto
alocados na pilha, enquanto BitArray um tipo de referncia e, portanto, alocado na pilha.
Pode BitVector32 Armazenar exatamente 32 bits, enquanto BitArray pode armazenar um
nmero de bits varivel. Armazena BitVector32 os sinalizadores de bit e pequenos nmeros
inteiros, tornando assim ideal para dados que no seja expostos para o usurio. No entanto, se o
nmero de sinalizadores de bit necessrio desconhecido, varivel, ou maior que 32, use
BitArray.
BitArray no espao para nome System.Collections; BitVector32 no espao para nome
System.Collections.Specialized.
Colees especializados
Colees especializadas so colees com finalidades altamente especficas.
NameValueCollection baseado no NameObjectCollectionBase; No entanto,
NameValueCollection aceita vrios valores por chave, enquanto NameObjectCollectionBase
aceita apenas um valor por chave.
Algumas colees altamente digitadas no espao para nome System.Collections.Specialized so
StringCollection e StringDictionary, ambos os quais contm valores que so seqncias
exclusivamente.
A CollectionsUtil classe cria instncias de colees no diferencia maisculas de minsculas.
Algumas colees transformar. Por exemplo, a HybridDictionary classe inicia como se tornar
grande. e se torna um Hashtable quando um ListDictionary O KeyedCollection uma lista mas ela
tambm cria um dicionrio de pesquisa quando o nmero de elementos atinge um limite
especificado.
Criando e Manipulating colees
As colees mais comuns so fornecidas pelo .NET Framework. Voc pode usar qualquer uma
das-los ou criar sua prprias coleo com base em um deles. Cada coleo foi projetada para
finalidades especficas. Os membros includos no cada System.Collections Classe refletem o
objetivo da coleo. Alm disso, as colees genricas no System.Collections.Generic tornam
mais fcil para criar conjuntos de tipo forte.
Se voc optar por implementar seu prprio coleo, use as seguintes diretrizes:
Inicie com a classe base direita e interfaces. Consulte Selecionar uma Classe de coleo
Para obter dicas sobre como escolher um tipo de coleo.
Considere a possibilidade de fazer sua coleo altamente digitada. Conjuntos de tipo forte
fornece validao tipo automtica e evitar processos que afetam negativamente o
desempenho, como boxing e unboxing e converses. Se o idioma suporta generics, use um
dos tipos System.Collections.Generic. Se o idioma no oferece suporte generics,
System.Collections.Specialized contm exemplos de colees de tipo forte.
Voc precisa uma lista seqencial onde o elemento normalmente ser descartado aps
seu valor recuperado?
o
Caso afirmativo, considere o uso da Queue classe ou a Queue classe genrica se
voc precisar comportamento (FIFO) primeiro First-In--fora. Considere o uso da Stack classe
ou a Stack classe genrica se voc precisar comportamento (LIFO) ltima in primeiro-Out.
o
Caso contrrio, considere usar as outras colees.
Voc precisa acessar os elementos em uma determinada ordem, tais como FIFO, LIFO, ou
aleatrios?
o
A Queue classe e a Queue classe genrica oferece acesso fifo.
o
A Stack classe e a Stack classe genrica oferece acesso LIFO.
o
A LinkedList classe genrico permite acesso seqencial originados do topo para o
final ou o final para a cabea de.
o
O restante das colees oferecem acesso aleatrio.
Cada elemento ir conter um valor, uma combinao de uma chave e um valor, ou uma
combinao de uma chave e vrios valores?
o
Um valor: usar qualquer um das colees com base na IList interface ou a IList
interface genrica.
o
Uma chave e um valor: usar qualquer um das colees com base na IDictionary
interface ou a IDictionary interface genrica.
o
Um valor com chave incorporado: usar a KeyedCollection classe genrica.
o
Uma chave e vrios valores: usar a NameValueCollection classe.
Voc precisa classificar os elementos de forma diferente de como eles foram inseridos?
o
A Hashtable classe classifica seus elementos por seus cdigos hash.
o
A SortedList classe com base em implementaes de interface IComparer e a
IComparer interface genrica. e SortedDictionary e SortedList Classes genricos classificar
seus elementos atravs da tecla,
o
Fornece ArrayList um Sort mtodo que leva uma IComparer Implementao como
um parmetro. Sua contraparte genrico, a List classe genrica, fornece um Sort mtodo que
leva uma implementao da interface IComparer como um parmetro genrico.
LinkedList uma lista vinculada de propsito geral que fornece operaes de insero e
remoo O(1).
KeyedCollection um hbrido entre uma lista e um dicionrio, que fornece uma maneira
para armazenar objetos que contm suas prprias chaves.
Funcionalidade adicional
Alguns dos tipos genricos tm funcionalidade no encontrada na coleo nongeneric os tipos.
Por exemplo, a List classe, que corresponde da classe nongeneric ArrayList, tem um nmero de
mtodos que aceitam representantes genricas, como o Predicate representante que permite que
voc se especificar mtodos de pesquisa a lista, o Action representante que representa mtodos
que atuam sobre cada elemento da lista, e o Converter representante que permite que voc definir
converses entre tipos.
A List classe permite-lhe especificar suas prprias IComparer implementaes interface genrica
para classificao e pesquisa a lista. O SortedDictionary e SortedList classes tambm possui
esse recurso, e em disso permitem os comparers deve ser especificado quando a coleo
criada. Do Dictionary de maneira semelhante, e KeyedCollection classes permitem que voc
para especificar suas prprias comparers de igualdade.
Classe genrica List
Representa uma lista de objetos que podem ser acessados pelo ndice altamente digitada.
Oferece mtodos para pesquisar, classificar e manipular listas.
Namespace: System.Collections.Generic
Assembly: mscorlib (em mscorlib.dll)
Sintaxe
C#
[SerializableAttribute] public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection,
IEnumerable
Parmetros de tipo
T
O tipo de elementos em Da lista.
Comentrios
A List classe o equivalente da classe ArrayList genrico. Ele implementa a IList interface
genrica usando uma matriz cujo tamanho aumentado dinamicamente conforme necessrio.
A List classe usa uma comparer de igualdade e um comparer pedido.
Mtodos, como BinarySearch e Sort use um comparer pedido para os elementos lista. O
comparer padro para tipo T determinada da seguinte maneira. Se tipo T implementa a
IComparable interface genrica, ento o comparer padro o CompareTo mtodo de interface;
caso contrrio, se tipo T implementa a interface nongeneric IComparable, ento o comparer
padro o CompareTo mtodo de interface. Se tipo T implementa nenhuma interface, ento
no h nenhum comparer padro, e um representante comparer ou comparao deve ser
fornecido explicitamente.
O List no garantida a serem classificados. Voc deve classificar a serem classificados. antes
de executar operaes (como BinarySearch) que exigem o List o List
Elementos nessa coleo podem ser acessados usando um ndice inteiro. ndices nessa coleo
so baseada em zero.
Aceita Lista null reference (Nothing in Visual Basic) como um valor vlido para tipos de referncia
e permite elementos duplicados.
Consideraes sobre desempenho
A decidir se deseja usar ou ArrayList Classe, ambos os quais tm semelhante funcionalidade,
lembrar que a List classe efetua melhor na maioria dos casos e tipo seguro.. o List Se um tipo
de referncia for usado para tipo T de classe List, o comportamento das duas classes idntico.
No entanto, se um tipo de valor for usado para tipo T, voc precisar considerar implementao e
questes boxing.
Se um tipo de valor for utilizado para tipo T, o compilador gera uma implementao da classe List
especificamente para esse tipo de valor. Isso significa um elemento um lista de um List objeto no
tenha que ser Boxed antes do elemento pode ser usado, e Aps cerca de 500 elementos de lista
so criados a memria economizada elementos lista boxing no maior que a memria usada
para gerar a implementao de classe.
Certifique-se o tipo de valor usado para tipo T implementa a IEquatable interface genrico. Caso
contrrio, mtodos, como Contains deve chamar o Object.Equals(Object) mtodo, que caixas o
elemento lista afetado. Do BinarySearch se o tipo de valor implementa a IComparable interface e
voc possuir o cdigo de fonte tambm implementam a IComparable interface genrica para
evitar e Sort mtodos de boxing elementos de lista. Se voc no possui cdigo-fonte, passar um
IComparer objeto para o BinarySearch e Sort mtodos
Ele para sua vantagem em usar a implementao especficos do tipo de classe List em vez de
atravs da ArrayList classe ou escrever um conjunto wrapper altamente digitado mesmo. A razo
sua implementao deve fazer que o .NET Framework faz por voc j, e o Common Language
Runtime pode compartilhar cdigo linguagem intermediria Microsoft e metadados, que no pode
sua implementao.
Exemplo
O exemplo de cdigo a seguir demonstra vrias propriedades e mtodos da classe List genrico.
O construtor padro usado para criar uma lista de seqncias com uma capacidade de 0. A
Capacity propriedade exibida e depois o Add mtodo usado para adicionar vrios itens. Os
itens so listados, e a Capacity propriedade ser exibida novamente, juntamente com a Count
propriedade, para mostrar que a capacidade foi aumentou conforme necessrio.
O Contains mtodo usado para testar a presena de um item na lista, o Insert mtodo usado
para inserir um novo item no meio da lista, e o contedo da lista so exibidos novamente.
Visual C# Consolidado 482
A propriedade padro Item (o indexador em C#) usada para recuperar um item, o Remove
mtodo usado para remover a primeira instncia de adicionada anteriormente, o item duplicado
e o contedo ser exibido novamente. O Remove mtodo Sempre remove a primeira instncia
encontrar.
O TrimExcess mtodo usado para reduzir a capacidade para corresponder a contagem, e
Capacity. e Count propriedades so exibidas Se a capacidade no utilizada tinha sido menos de
10 % da capacidade total, a lista no seria foram redimensionada.
Finalmente, o Clear mtodo usado para remover todos os itens da lista, e Capacity. e Count
propriedades so exibidas
C#
using System; using System.Collections.Generic; public class Example { public static void Main() {
List<string> dinosaurs = new List<string>(); Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
dinosaurs.Add("Tyrannosaurus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus"); dinosaurs.Add("Compsognathus"); Console.WriteLine(); foreach(string
dinosaur in dinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine("\nCapacity: {0}",
dinosaurs.Capacity); Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("\nContains(\"Deinonychus\"): {0}", dinosaurs.Contains("Deinonychus"));
Console.WriteLine("\nInsert(2, \"Compsognathus\")"); dinosaurs.Insert(2, "Compsognathus");
Console.WriteLine(); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); }
Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);
Console.WriteLine("\nRemove(\"Compsognathus\")"); dinosaurs.Remove("Compsognathus");
Console.WriteLine(); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); }
dinosaurs.TrimExcess(); Console.WriteLine("\nTrimExcess()"); Console.WriteLine("Capacity: {0}",
dinosaurs.Capacity); Console.WriteLine("Count: {0}", dinosaurs.Count); dinosaurs.Clear();
Console.WriteLine("\nClear()"); Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count); } } /* This code example produces the following output:
Capacity: 0 Tyrannosaurus Amargasaurus Mamenchisaurus Deinonychus Compsognathus Capacity: 8
Count: 5 Contains("Deinonychus"): True Insert(2, "Compsognathus") Tyrannosaurus Amargasaurus
Compsognathus Mamenchisaurus Deinonychus Compsognathus dinosaurs[3]: Mamenchisaurus
Remove("Compsognathus") Tyrannosaurus Amargasaurus Mamenchisaurus Deinonychus Compsognathus
TrimExcess() Capacity: 5 Count: 5 Clear() Capacity: 5 Count: 0 */
Hierarquia de herana
System.Object
System.Collections.Generic.List
Segurana de segmentos
Esttico pblico (Shared. no Visual Basic) os membros do tipo so segmento seguro Os membros
da instncia no so garantidos para ser segmento seguro.
Suporte vrios leitores simultaneamente,, desde que a coleo no modificada A List.
Enumerando atravs de um conjunto intrinsically no um procedimento isenta de segmentos. No
caso raro onde uma enumerao contends com um ou mais acessos de gravao, a nica
maneira para garantir segurana do segmento para bloquear a coleo durante toda a
enumerao. Para permitir que a coleo para ser acessado por vrios segmentos para leitura e
gravao, voc dever implementar sua prprias sincronizao.
Visual C# Consolidado 483
Plataformas
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for
Pocket PC, Windows Mobile for Smartphone, Windows Server 2003,
Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2,
Windows XP Starter Edition
O .NET Framework no d suporte a todas as verses de cada plataforma. Para obter uma lista
das verses com suporte, consulte Requisitos do sistema.
Informaes de verso
.NET Framework
Compatvel com: 2.0
.NET Compact Framework
Compatvel com: 2.0
Classe genrica SortedDictionary
Representa uma coleo de pares chave / valor que so classificadas na chave.
Namespace: System.Collections.Generic
Assembly: System (em system.dll)
Sintaxe
C#
[SerializableAttribute] public class SortedDictionary<TKey,TValue> : IDictionary<TKey,TValue>,
ICollection<KeyValuePair<TKey,TValue>>, IEnumerable<KeyValuePair<TKey,TValue>>, IDictionary,
ICollection, IEnumerable
Parmetros de tipo
TKey
O tipo das teclas no dicionrio.
TValue
O tipo dos valores no dicionrio.
Comentrios
A SortedDictionary classe genrico uma rvore da pesquisa binrio com recuperao O (log
n), onde n o nmero de elementos no dicionrio. Neste aspecto, ele semelhante para a
SortedList classe genrico. As duas classes tm modelos de objeto semelhantes, e ambas tm O
(log n) recuperao. Onde as duas classes diferem est em uso de memria e velocidade de
insero e remoo:
Se a lista estiver preenchida todos de uma vez dos dados SortedList classificados mais
rpida que SortedDictionary.
Cada par chave / valor pode ser recuperado como uma KeyValuePair estrutura, ou atravs da
interface nongeneric IDictionary. um DictionaryEntry
As chaves devem ser imutveis, desde que eles so usados como chaves no SortedDictionary..
o SortedDictionary Cada chave em um SortedDictionary deve ser exclusivo. Uma chave no
pode ser a null reference (Nothing in Visual Basic), mas um valor pode ser, se o tipo TValue de
valor um tipo de referncia.
Requer SortedDictionary uma implementao comparer para realizar comparaes de chave.
Voc pode especificar uma implementao da interface IComparer genrica, utilizando um
construtor que aceita um comparer parmetro; se voc no especificar uma implementao, o
comparer Comparer.Default genrico padro usada. Se tipo TKey implementa a
System.IComparable interface genrico, o comparer padro usa essa implementao.
A foreach instruo da linguagem C# (for each. em C++, For Each no Visual Basic) requer o tipo
de cada elemento na coleo Desde cada elemento do tipo elemento no o tipo da chave ou o
tipo do valor. um par chave / valor, o SortedDictionary Em vez disso, o tipo de elemento
KeyValuePair. O cdigo a seguir mostra sintaxe C#, C++ e Visual Basic.
C#
foreach (KeyValuePair<int, string> kvp in myDictionary) {...}
A foreach instruo um invlucro em torno o enumerador, que permite somente leitura a partir
da coleo, no gravar para ele.
Exemplo
O exemplo de cdigo a seguir cria um vazio SortedDictionary de seqncias com chaves de
seqncia e usa o Add mtodo para adicionar alguns elementos. O exemplo demonstra que o
Add mtodo gera um ArgumentException quando tentativa de adicionar uma chave duplicada.
O exemplo usa a Item propriedade (o indexador em C#) para recuperar valores, demonstrando
que acionada quando uma chave solicitado no existir, e mostra que o valor associado a uma
chave pode ser substituda. um KeyNotFoundException
O exemplo mostra como usar o TryGetValue mtodo como uma forma mais eficiente para
recuperar valores se um programa com freqncia deve tentar valores chave que no esto no
dicionrio, e ele mostra como usar o ContainsKey mtodo para testar se uma chave existe antes
de chamar o Add mtodo.
O exemplo mostra como para enumerar as chaves e valores em um dicionrio e como enumerar
as chaves e valores sozinho usando a Keys propriedade e a Values propriedade.
Finalmente, o exemplo demonstra o Remove mtodo.
C#
using System; using System.Collections.Generic; public class Example { public static void Main() { // Create
a new dictionary of strings, with string keys. // Dictionary<string, string> openWith = new
Dictionary<string, string>(); // Add some elements to the dictionary. There are no // duplicate keys, but
some of the values are duplicates. openWith.Add("txt", "notepad.exe"); openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe"); openWith.Add("rtf", "wordpad.exe"); // The Add method throws an
Visual C# Consolidado 485
exception if the new key is // already in the dictionary. try { openWith.Add("txt", "winword.exe"); } catch
(ArgumentException) { Console.WriteLine("An element with Key = \"txt\" already exists."); } // The Item
property is another name for the indexer, so you // can omit its name when accessing elements.
Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]); // The indexer can be used to change
the value associated // with a key. openWith["rtf"] = "winword.exe"; Console.WriteLine("For key = \"rtf\",
value = {0}.", openWith["rtf"]); // If a key does not exist, setting the indexer for that key // adds a new
key/value pair. openWith["doc"] = "winword.exe"; // The indexer throws an exception if the requested key is
// not in the dictionary. try { Console.WriteLine("For key = \"tif\", value = {0}.", openWith["tif"]); } catch
(KeyNotFoundException) { Console.WriteLine("Key = \"tif\" is not found."); } // When a program often has
to try keys that turn out not to // be in the dictionary, TryGetValue can be a more efficient // way to retrieve
values. string value = ""; if (openWith.TryGetValue("tif", out value)) { Console.WriteLine("For key = \"tif\",
value = {0}.", value); } else { Console.WriteLine("Key = \"tif\" is not found."); } // ContainsKey can be used
to test keys before inserting // them. if (!openWith.ContainsKey("ht")) { openWith.Add("ht",
"hypertrm.exe"); Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]); } // When you use
foreach to enumerate dictionary elements, // the elements are retrieved as KeyValuePair objects.
Console.WriteLine(); foreach( KeyValuePair<string, string> kvp in openWith ) { Console.WriteLine("Key =
{0}, Value = {1}", kvp.Key, kvp.Value); } // To get the values alone, use the Values property.
Dictionary<string, string>.ValueCollection valueColl = openWith.Values; // The elements of the
ValueCollection are strongly typed // with the type that was specified for dictionary values.
Console.WriteLine(); foreach( string s in valueColl ) { Console.WriteLine("Value = {0}", s); } // To get the
keys alone, use the Keys property. Dictionary<string, string>.KeyCollection keyColl = openWith.Keys; // The
elements of the KeyCollection are strongly typed // with the type that was specified for dictionary keys.
Console.WriteLine(); foreach( string s in keyColl ) { Console.WriteLine("Key = {0}", s); } // Use the Remove
method to remove a key/value pair. Console.WriteLine("\nRemove(\"doc\")"); openWith.Remove("doc"); if
(!openWith.ContainsKey("doc")) { Console.WriteLine("Key \"doc\" is not found."); } } } /* This code example
produces the following output: An element with Key = "txt" already exists. For key = "rtf", value =
wordpad.exe. For key = "rtf", value = winword.exe. Key = "tif" is not found. Key = "tif" is not found. Value
added for key = "ht": hypertrm.exe Key = txt, Value = notepad.exe Key = bmp, Value = paint.exe Key = dib,
Value = paint.exe Key = rtf, Value = winword.exe Key = doc, Value = winword.exe Key = ht, Value =
hypertrm.exe Value = notepad.exe Value = paint.exe Value = paint.exe Value = winword.exe Value =
winword.exe Value = hypertrm.exe Key = txt Key = bmp Key = dib Key = rtf Key = doc Key = ht
Remove("doc") Key "doc" is not found. */
Hierarquia de herana
System.Object
System.Collections.Generic.SortedDictionary
Segurana de segmentos
Esttico pblico (Shared. no Visual Basic) os membros do tipo so segmento seguro Os membros
da instncia no so garantidos para ser segmento seguro.
Suporte vrios leitores simultaneamente,, desde que a coleo no modificada A
SortedDictionary. Mesmo assim, enumerando atravs de um conjunto intrinsically no um
procedimento isenta de segmentos. Para garantir segurana do segmento durante enumerao,
voc pode bloquear a coleo durante toda a enumerao. Para permitir que a coleo para ser
acessado por vrios segmentos para leitura e gravao, voc dever implementar sua prprias
sincronizao.
Visual C# Consolidado 486
Plataformas
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003,
Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2,
Windows XP Starter Edition
O .NET Framework no d suporte a todas as verses de cada plataforma. Para obter uma lista
das verses com suporte, consulte Requisitos do sistema.
Informaes de verso
.NET Framework
Compatvel com: 2.0
Como Usar Excees Especficas em um Bloco Catch
Quando ocorre uma exceo, ele passado a pilha e cada bloco catch fornecido a oportunidade
para lidar com ele. A ordem das instrues Catch importante. Colocar blocos catch direcionados
a excees especficas antes um bloco catch de Exceo geral ou o compilador pode emitir um
erro. O bloco catch adequada determinado pela correspondncia o tipo de exceo para o nome
da exceo especificada no bloco catch. Se no houver nenhum especfico catch bloco, a
Exceo capturada por um bloco catch gerais, se existir.
O exemplo de cdigo a seguir usa um bloco try / catch para capturar um InvalidCastException. O
exemplo cria uma classe chamada Employee com uma nica propriedade nvel funcionrio,
(Emlevel). Um mtodo , PromoteEmployee, assume um objeto e incrementa o nvel do funcionrio.
Um InvalidCastException ocorre quando uma DATETIME instncia passada para o
PromoteEmployee mtodo.
Exemplo
C#
using System; public class Employee { //Create employee level property. public int Emlevel { get {
return(emlevel); } set { emlevel = value; } } int emlevel; } public class Ex13 { public static void
PromoteEmployee(Object emp) { //Cast object to Employee. Employee e = (Employee) emp; // Increment
employee level. e.Emlevel = e.Emlevel + 1; } public static void Main() { try { Object o = new Employee();
DateTime newyears = new DateTime(2001, 1, 1); //Promote the new employee. PromoteEmployee(o);
//Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
PromoteEmployee(newyears); } catch (InvalidCastException e) { Console.WriteLine("Error passing data to
PromoteEmployee method. " + e); } } }
O Common Language Runtime captura excees que no so detectadas por um bloco catch.
Dependendo de como o Runtime configurado, ser exibida uma caixa de dilogo de depurao
ou executar o programa pra e uma caixa de dilogo com informaes de exceo exibida. Para
obter informaes sobre depurao, consulte Depurao e perfil Applications.
Como: Usar o bloco Try/Catch para capturar excees
Coloque as sees de cdigo que podem descartar excees em um bloco try e colocar cdigo
que manipula excees em um bloco catch. O bloco catch uma srie de instrues comeando
com a palavra-chave catch, seguida por um tipo de exceo e uma ao a ser executada.
Visual C# Consolidado 487
Observao
Praticamente qualquer linha de cdigo pode causar uma exceo, especialmente excees que
so geradas pelo Common Language Runtime, como OutOfMemoryException propriamente dito,
e StackOverflowException. A maioria dos aplicativos no necessrio para lidar com essas
excees, mas voc deve estar ciente dessa possibilidade ao escrever bibliotecas a ser usado por
outros. Para obter sugestes sobre quando para definir cdigo em um bloco try, consulte Prticas
recomendadas para tratamento de excees.
O exemplo de cdigo a seguir usa um bloco try / catch para capturar uma exceo possvel. O
Main mtodo contm um bloco try com uma StreamReader instruo que abre um arquivo de
dados chamado data.txt e grava uma seqncia a partir do arquivo. Aps o bloco Try um bloco
catch que captura qualquer exceo que resulta da bloco try.
Exemplo
C#
using System; using System.IO; using System.Security.Permissions; // Security permission request.
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum, All = @"d:\\data.txt")] public class
ProcessFile { public static void Main() { try { StreamReader sr = File.OpenText("data.txt");
Console.WriteLine("The first line of this file is {0}", sr.ReadLine()); } catch(Exception e) {
Console.WriteLine("An error occurred: '{0}'", e); } } }
Este exemplo ilustra uma instruo catch bsico que ir detectar qualquer exceo. Em geral,
recomendvel programao prtica para capturar um tipo especfico de Exceo em vez de usar a
instruo bsica catch. Para obter mais informaes sobre catching excees especficas,
consulte Usando excees especficas em um bloco catch.
Como Criar Excees Definida pelo Usurio
Se voc quiser que os usurios para poder se programaticamente distinguir entre algumas
condies de erro, voc pode criar seus prprios excees definida pelo usurio. O.NET
Framework fornece uma hierarquia de classes de exceo basicamente derivadas de uma classe
Exceo base. Cada um dessas classes define uma exceo especfica, para que em muitos
casos voc s precise capturar a exceo. Voc tambm pode criar suas prprias classes de
exceo por derivar da classe Exception.
Ao criar seu prprio excees, recomendvel codificao prtica para finalizar o nome de classe
de exceo definida pelo usurio com a palavra " exceo ". Tambm boa prtica para
implementar as trs recomendada construtores comuns, como mostrado no exemplo o seguir.
Observao
No situaes onde voc estiver usando o Remoting,, voc precisa garantir que os metadados para
qualquer exceo definida pelo usurio est disponvel no servidor (chamado) e para o cliente (o
objeto proxy ou chamador). Por exemplo, Cdigo chamar um mtodo em um domnio de
aplicativos separados deve ser capaz para localizar o conjunto que contm uma Exceo
acionada por uma chamada remota. Para obter mais informaes, consulte Prticas
recomendadas para tratamento de excees.
Visual C# Consolidado 488
No exemplo a seguir, uma Nova Exceo derivada da Exception classe,
EmployeeListNotFoundException. Construtores trs so definidos na classe, cada levando
parmetros diferentes.
Exemplo
C#
using System; public class EmployeeListNotFoundException: Exception { public
EmployeeListNotFoundException() { } public EmployeeListNotFoundException(string message) :
base(message) { } public EmployeeListNotFoundException(string message, Exception inner) : base(message,
inner) { } }
Como Usar Blocos Finally
Quando ocorre uma exceo, execuo pra e controle dada ao manipulador de exceo mais
prximo. Isso geralmente significa que linhas de cdigo voc pretende sempre ser chamado no
sero executadas. Alguns limpeza de recursos, tais como fechar um arquivo, sempre deve ser
executada mesmo que uma exceo gerada. Para fazer isso, voc pode usar bloco finally. Um A
finalmente bloco ser sempre executado, independentemente de se uma exceo gerada.
O exemplo de cdigo a seguir usa um bloco try / catch para capturar um
ArgumentOutOfRangeException. O Main mtodo cria duas matrizes e tenta se copiar uma para a
outra. A ao gera um ArgumentOutOfRangeException e o erro gravado no console. O
finalmente bloco executa independentemente sobre o resultado da ao da cpia.
Exemplo
C#
using System; class ArgumentOutOfRangeExample { static public void Main() { int[] array1={0,0}; int[]
array2={0,0}; try { Array.Copy(array1,array2,-1); } catch (ArgumentOutOfRangeException e) {
Console.WriteLine("Error: {0}",e); } finally { Console.WriteLine("This statement is always executed."); } } }
Como Lanar Excees Explicitamente
Explicitamente voc pode acionar uma exceo usando a instruo throw. Voc tambm pode
descartar uma exceo caught novamente usando a instruo throw. recomendvel codificao
prtica para adicionar informaes a uma exceo que rethrown para fornecer mais informaes
ao depurar.
O exemplo de cdigo a seguir usa um bloco try / catch para detectar um possvel
FileNotFoundException. Do FileNotFoundException seguinte bloco Try um bloco catch que
captura e grava uma mensagem para o console se o arquivo de dados no for encontrado. A
prxima instruo a Instruo throw que gera um novo FileNotFoundException e adiciona
informaes de texto para a exceo.
Exemplo
C#
using System; using System.IO; public class ProcessFile { public static void Main() { FileStream fs = null; try
//Opens a text tile. { fs = new FileStream("data.txt", FileMode.Open); StreamReader sr = new
StreamReader(fs); string line; //A value is read from the file and output to the console. line = sr.ReadLine();
Console.WriteLine(line); } catch(FileNotFoundException e) { Console.WriteLine("[Data File Missing] {0}",
e); throw new FileNotFoundException("[data.txt not in c:\\dev directory]",e); } finally { fs.Close(); } } }
Visual C# Consolidado 489
Como Consumir Eventos em um Aplicativo do Windows Forms
Um cenrio comum em aplicativos Windows Forms para exibir um formulrio com controles, e
depois executar uma ao especfica com base no que controlam o usurio clicar. Por exemplo,
um Button controle gerar um evento quando o usurio clica-lo no formulrio. Ao manipular o
evento, o aplicativo pode executar a lgica aplicativo apropriado para que clique de boto.
Para obter mais informaes sobre Windows Forms, consulte Guia de introduo ao Windows
Forms.
Para lidar com um boto clique evento em um formulrio do Windows
1. Criar um formulrio que tem um Button controle do Windows.
C#
private Button button; Private WithEvents myButton As Button
2. Define um manipulador de eventos que corresponda a Click Assinatura de representante
de evento. O Click evento usa a EventHandler classe para o tipo delegate e a EventArgs
classe para os dados do evento.
C#
void Button_Clicked(object sender, EventArgs e) {...} Sub Button_Clicked(sender As Object, e As
EventArgs) ... End Sub
3. Adicione o mtodo do manipulador de eventos para o Click evento do Button.
C#
button.Click += new EventHandler(this.Button_Clicked); AddHandler myButton.Click, AddressOf
Me.Button_Clicked
Observao
Um Designer (tais como Visual Studio 2005) ser fazer esta Cabeamento de evento para voc,
gerando cdigo que semelhante ao cdigo, neste exemplo.
Exemplo
O exemplo de cdigo a seguir manipula o Click evento de para alterar a cor de TextBox Plano de
Fundo. um Button Mostrar os elementos em negrito o manipulador de eventos e como ele
cabeado para o Click evento do Button.
O cdigo, neste exemplo foi escrito sem usar um criador visual (tais como Visual Studio 2005) e
contm somente essenciais elementos de programao. Se voc usar um designer, ele ir gerar
cdigo adicional.
C#
using System; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; public
class MyForm : Form { private TextBox box; private Button button; public MyForm() : base() { box = new
TextBox(); box.BackColor = System.Drawing.Color.Cyan; box.Size = new Size(100,100); box.Location = new
Point(50,50); box.Text = "Hello"; button = new Button(); button.Location = new Point(50,100); button.Text
= "Click Me"; // To wire the event, create // a delegate instance and add it to the Click event. button.Click +=
new EventHandler(this.Button_Clicked); Controls.Add(box); Controls.Add(button); } // The event handler.
private void Button_Clicked(object sender, EventArgs e) { box.BackColor = System.Drawing.Color.Green; }
Visual C# Consolidado 490
// The STAThreadAttribute indicates that Windows Forms uses the // single-threaded apartment model.
[STAThreadAttribute] public static void Main(string[] args) { Application.Run(new MyForm()); } } Option
Explicit Option Strict Imports System Imports System.ComponentModel Imports System.Windows.Forms
Imports System.Drawing Public Class MyForm Inherits Form Private box As TextBox Private WithEvents
myButton As Button Public Sub New() box = New TextBox() box.BackColor = System.Drawing.Color.Cyan
box.Size = New Size(100, 100) box.Location = New Point(50, 50) box.Text = "Hello" myButton = New
Button() myButton.Location = New Point(50, 100) myButton.Text = "Click Me"
AddHandler myButton.Click, AddressOf Me.Button_Clicked
Controls.Add(box) Controls.Add(myButton) End Sub ' The event handler. Private Sub
Button_Clicked(sender As Object, e As EventArgs) box.BackColor = System.Drawing.Color.Green End Sub '
The STAThreadAttribute indicates that Windows Forms uses the ' single-threaded apartment model.
<STAThreadAttribute()> _ Public Shared Sub Main(args() As String) Application.Run(New MyForm()) End
Sub End Class
Compilando o cdigo
Salvar o cdigo anterior em um arquivo com (uma extenso. cs) para um arquivo C# e.vb para
Visual Basic 2005, compilar, e executar. Por exemplo, se o arquivo de origem for denominado
WinEvents.cs (ou WinEvents.vb), execute o seguinte comando:
C#
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs vbc
/r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
Seu arquivo executvel ser denominado WinEvents.exe.
Como Conectar Mtodos de Manipulao de Eventos a Eventos
Para consumir eventos definidos na outra classe, voc deve definir e registrar um manipulador de
eventos. O manipulador de eventos deve ter a mesma assinatura mtodo como o representante
declarado para o evento. Registrar o manipulador de eventos, adicionando o manipulador ao
evento. Aps ter adicionado o manipulador de eventos para o evento, o mtodo chamado
sempre que a classe gera o evento.
Para um exemplo completo que ilustra eventos raising e Handling, consulte Como aumentar e
Consume eventos:.
Para adicionar um mtodo do manipulador de eventos para um evento
1. Definir um mtodo do manipulador de eventos com a mesma assinatura como o
representante de evento.
C#
public class WakeMeUp { // AlarmRang has the same signature as AlarmEventHandler. public void
AlarmRang(object sender, AlarmEventArgs e) {...}; ... }
2. Criar uma instncia do representante, usando uma referncia para o mtodo do
manipulador de eventos. Quando a instncia de representante chamada, ele por sua vez
chama o mtodo do manipulador de eventos.
C#
Visual C# Consolidado 491
// Create an instance of WakeMeUp. WakeMeUp w = new WakeMeUp(); // Instantiate the event
delegate. AlarmEventHandler alhandler = new AlarmEventHandler(w.AlarmRang);
3. Adicione a instncia de representante para o evento. Quando o evento gerado, a
instncia de representante e seu mtodo do manipulador de evento associado chamado.
C#
// Instantiate the event source. AlarmClock clock = new AlarmClock(); // Add the delegate instance to
the event. clock.Alarm += alhandler;
O seguinte programa exemplo demonstra elevar um evento em uma classe e manipular o evento
no outra classe. A AlarmClock classe define o evento Alarm pblico, e fornece mtodos para
aumentar o evento. A AlarmEventArgs classe derivada da EventArgs e define os dados
especficos a um Alarm evento. A WakeMeUp classe define o mtodo AlarmRang, que trata um
Alarm evento. A AlarmDriver classe usa as classes juntos, como o AlarmRang Mtodo de
WakeMeUp manipular o Alarm evento do AlarmClock.
Este programa exemplo usa conceitos descritos com detalhes no Eventos e representantes e
Elevar um evento.
Exemplo
C#
// EventSample.cs. // namespace EventSample { using System; using System.ComponentModel; // Class
that contains the data for // the alarm event. Derives from System.EventArgs. // public class
AlarmEventArgs : EventArgs { private readonly bool snoozePressed ; private readonly int nrings;
//Constructor. // public AlarmEventArgs(bool snoozePressed, int nrings) { this.snoozePressed =
snoozePressed; this.nrings = nrings; } // The NumRings property returns the number of rings // that the
alarm clock has sounded when the alarm event // is generated. // public int NumRings { get { return nrings;}
} // The SnoozePressed property indicates whether the snooze // button is pressed on the alarm when the
alarm event is generated. // public bool SnoozePressed { get {return snoozePressed;} } // The AlarmText
property that contains the wake-up message. // public string AlarmText { get { if (snoozePressed) { return
("Wake Up!!! Snooze time is over."); } else { return ("Wake Up!"); } } } } // Delegate declaration. // public
delegate void AlarmEventHandler(object sender, AlarmEventArgs e); // The Alarm class that raises the
alarm event. // public class AlarmClock { private bool snoozePressed = false; private int nrings = 0; private
bool stop = false; // The Stop property indicates whether the // alarm should be turned off. // public bool
Stop { get {return stop;} set {stop = value;} } // The SnoozePressed property indicates whether the snooze //
button is pressed on the alarm when the alarm event is generated. // public bool SnoozePressed { get {return
snoozePressed;} set {snoozePressed = value;} } // The event member that is of type AlarmEventHandler. //
public event AlarmEventHandler Alarm; // The protected OnAlarm method raises the event by invoking //
the delegates. The sender is always this, the current instance // of the class. // protected virtual void
OnAlarm(AlarmEventArgs e) { AlarmEventHandler handler = Alarm; if (handler != null) { // Invokes the
delegates. handler(this, e); } } // This alarm clock does not have // a user interface. // To simulate the alarm
mechanism it has a loop // that raises the alarm event at every iteration // with a time delay of 300
milliseconds, // if snooze is not pressed. If snooze is pressed, // the time delay is 1000 milliseconds. // public
void Start() { for (;;) { nrings++; if (stop) { break; } else if (snoozePressed) {
System.Threading.Thread.Sleep(1000); { AlarmEventArgs e = new AlarmEventArgs(snoozePressed, nrings);
OnAlarm(e); } } else { System.Threading.Thread.Sleep(300); AlarmEventArgs e = new
AlarmEventArgs(snoozePressed, nrings); OnAlarm(e); } } } } // The WakeMeUp class has a method
AlarmRang that handles the // alarm event. // public class WakeMeUp { public void AlarmRang(object
Visual C# Consolidado 492
sender, AlarmEventArgs e) { Console.WriteLine(e.AlarmText +"\n"); if (!(e.SnoozePressed)) { if
(e.NumRings % 10 == 0) { Console.WriteLine(" Let alarm ring? Enter Y"); Console.WriteLine(" Press
Snooze? Enter N"); Console.WriteLine(" Stop Alarm? Enter Q"); String input = Console.ReadLine(); if
(input.Equals("Y") ||input.Equals("y")) return; else if (input.Equals("N") || input.Equals("n")) {
((AlarmClock)sender).SnoozePressed = true; return; } else { ((AlarmClock)sender).Stop = true; return; } } }
else { Console.WriteLine(" Let alarm ring? Enter Y"); Console.WriteLine(" Stop Alarm? Enter Q"); String
input = Console.ReadLine(); if (input.Equals("Y") || input.Equals("y")) return; else {
((AlarmClock)sender).Stop = true; return; } } } } // The driver class that hooks up the event handling method
of // WakeMeUp to the alarm event of an Alarm object using a delegate. // In a forms-based application, the
driver class is the // form. // public class AlarmDriver { public static void Main (string[] args) { //
Instantiates the event receiver. WakeMeUp w= new WakeMeUp(); // Instantiates the event source.
AlarmClock clock = new AlarmClock(); // Wires the AlarmRang method to the Alarm event. clock.Alarm +=
new AlarmEventHandler(w.AlarmRang); clock.Start(); } } }
Como Manipular Vrios Eventos Usando Propriedades de Evento
Para usar propriedades de evento em Visual Basic 2005 (eventos personalizados), voc definir as
propriedades de evento na classe que aumenta os eventos, e defina os delegados para as
propriedades de evento em classes que manipular os eventos. Para implementar vrias
propriedades de evento em uma classe, deve a classe internamente armazenar e manter o
representante definido para cada evento. Uma abordagem comum para implementar uma
coleo de representante que indexada por uma chave de evento.
Para armazenar os delegados para cada evento, voc pode usar a EventHandlerList classe, ou
implementar sua prpria coleo A classe coleo deve fornecer mtodos para definir, acessando,
e recuperar o representante do manipulador de eventos de acordo com a chave de evento. Por
exemplo, voc pode usar uma Tabela de hash classe, ou derivar uma classe personalizada de
classe DictionaryBase. Os detalhes da implementao da coleo de representante no precisar
ser expostos fora sua classe.
Cada propriedade de evento dentro da classe define um mtodo de assessor Add e um mtodo
de assessor remover. O acessador de adio para uma propriedade de evento adiciona a
instncia de representante entrada coleo de representante. O acessador remover para uma
propriedade de evento remove a instncia de representante entrada da coleo de representante.
As assessores propriedade de evento usar a chave predefinida para a propriedade de evento para
adicionar e remover instncias de uma coleo de representante.
Para manipular vrios eventos usando propriedades de evento
1. Definir uma coleo de representante dentro da classe que gera os eventos.
2. Defina uma chave para cada evento.
3. Definir as propriedades de evento na classe que gera os eventos.
4. Use a coleo de representante para implementar a adicionar e remover Mtodos
acessadores para as propriedades de evento.
5. Use as propriedades de evento pblica para adicionar e remover representantes do
manipulador de eventos nas classes que manipular os eventos.
Exemplo
O exemplo C# implementa as propriedades MouseDown de evento e MouseUp, Usando. para
armazenar representante cada do evento um EventHandlerList As palavras-chave das
construes Propriedade das evento so em negrito.
Visual C# Consolidado 493
Observao
No h suporte para propriedades de evento no Visual Basic 2005.
C#
// The class SampleControl defines two event properties, MouseUp and MouseDown. class SampleControl:
Component { // : // Define other control methods and properties. // : // Define the delegate collection.
protected EventHandlerList listEventDelegates = new EventHandlerList(); // Define a unique key for each
event. static readonly object mouseDownEventKey = new object(); static readonly object mouseUpEventKey
= new object(); // Define the MouseDown event property. public event MouseEventHandler MouseDown { //
Add the input delegate to the collection. add { listEventDelegates.AddHandler(mouseDownEventKey, value);
} // Remove the input delegate from the collection. remove {
listEventDelegates.RemoveHandler(mouseDownEventKey, value); } } // Define the MouseUp event
property. public event MouseEventHandler MouseUp { // Add the input delegate to the collection. add {
listEventDelegates.AddHandler(mouseUpEventKey, value); } // Remove the input delegate from the
collection. remove { listEventDelegates.RemoveHandler(mouseUpEventKey, value); } } }
Como Implementar Eventos em sua Classe
Os procedimentos a seguir descrevem como implementar um evento em uma classe. O primeiro
procedimento implementa um evento que no no associou dados; ele usa as classes
System.EventArgs e System.EventHandler para dados e delegue o manipulador de eventos. O
segundo procedimento implementa um evento com dados personalizada; ela define classes para
os dados do evento e o manipulador de representante eventos personalizados.
Para um exemplo completo que ilustra eventos raising e Handling, consulte Como aumentar e
Consume eventos:.
Para implementar um evento sem dados eventos especficos
1. Definir um membro de evento pblica na sua classe. Definir o tipo do membro de evento
para um System.EventHandler representante.
C#
public class Countdown { ... public event EventHandler CountdownCompleted; }
2. Fornece um mtodo protegido na sua classe que gera o evento. Nome do mtodo
OnEventName. Aumentar o evento dentro do mtodo.
C#
public class Countdown { ... public event EventHandler CountdownCompleted; protected virtual void
OnCountdownCompleted(EventArgs e) { if (CountdownCompleted != null)
CountdownCompleted(this, e); } }
3. Determinar quando para elevar o evento na sua classe. Chamar OnEventName para
elevar o evento.
C#
public class Countdown { ... public void Decrement { internalCounter = internalCounter - 1; if
(internalCounter == 0) OnCountdownCompleted(new EventArgs()); } }
Para implementar um evento com dados eventos especficos
Visual C# Consolidado 494
1. Definir uma classe que fornece dados para o evento. Nome da classe EventNameArgs,
derivar a classe de System.EventArgs, e adicionar os membros especficos eventos-.
C#
public class AlarmEventArgs : EventArgs { private readonly int nrings = 0; private readonly bool
snoozePressed = false; //Properties. public string AlarmText { ... } public int NumRings { ... } public
bool SnoozePressed{ ... } }
2. Declare um representante para o evento. Nome o representante
EventNameEventHandler.
C#
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
3. Definir um membro de evento pblica denominado EventName na sua classe. Definir o tipo
do membro de evento para o tipo delegate de evento.
C#
public class AlarmClock { ... public event AlarmEventHandler Alarm; }
4. Definir um mtodo protegido na sua classe que gera o evento. Nome do mtodo
OnEventName. Aumentar o evento dentro do mtodo.
C#
public class AlarmClock { ... public event AlarmHandler Alarm; protected virtual void
OnAlarm(AlarmEventArgs e) { if (Alarm != null) Alarm(this, e); } }
5. Determinar quando para elevar o evento na sua classe. Chamar OnEventName para gerar
o evento e passar dados especficos eventos-usando EventNameEventArgs o.
C#
Public Class AlarmClock { ... public void Start() { ... System.Threading.Thread.Sleep(300);
AlarmEventArgs e = new AlarmEventArgs(false, 0); OnAlarm(e); } }
Visual C# Consolidado 495
Depurao (Como fazer em C#)
Esta pgina possui um link para a Ajuda sobre tarefas de depurao amplamente usadas. Para
ver outras categorias de tarefas populares abordadas na Ajuda, consulte Como fazer em C#.
Compilando no Visual Studio
O Visual Studio 2005 fornece ferramentas para testar e depurar aplicativos continuamente
medida que eles so compilados. Quando um projeto do Visual Studio criado, so definidas
configuraes-padro de projeto e so atribudas configuraes-padro de compilao soluo
para fornecer-lhe contexto para quando ele for compilado. As equipes de desenvolvimento podem
editar essas configuraes-padro de soluo e projeto conforme necessrio, e criar novas
configuraes, salvando cpias modificadas de configuraes-padro.
Compilao Durante o Desenvolvimento de Aplicativos
Uma soluo e seus projetos individuais so normalmente criados e testados usando uma
compilao de depurao (Debug). Os desenvolvedores compilaro uma em modo de depurao
vrias vezes no decorrer de cada etapa do seu processo de desenvolvimento. A depurao um
processo de duas etapas. Primeiramente, erros de tempo de compilao so corrigidos. Esses
erros podem incluir sintaxe incorreta, palavras-chave incorretas e inconsistncias entre tipos de
dados. Em seguida, o depurador usado para detectar e corrigir problemas tais como erros
lgicos e erros semnticos que so detectados em tempo de execuo.
Quando um projeto ou soluo estiver totalmente desenvolvido e suficientemente depurado, seus
componentes so compilados em uma verso de lanamento (Release). Via de regra, uma
compilao de lanamento emprega vrias otimizaes. Compilaes otimizadas so compiladas
para serem menores e de execuo mais rpida que compilaes no-otimizadas.
Selecionando e Editando Configuraes de Compilao
Use a Caixa de Dilogo Configuration Manager para definir configuraes de projeto, que so
conjuntos de propriedades para cada combinao suportada de verso e plataforma (por
exemplo, Release Win32). Voc pode criar suas prprias compilaes especiais, como uma
configurao de compilao de perguntas e respostas para os testadores, ou uma configurao
de compilao pessoal para experimentar alguns cdigos preliminares. Voc pode usar o Project
Designer para modificar as configuraes de cada combinao de compilao e plataforma. Para
mais informaes, consulte Introduo ao Compilador do Projeto.
Use a caixa de dilogo Solution Property Pages para definir as propriedades da soluo. As
propriedades mais comuns incluem configuraes para o projeto de inicializao e dependncias
de projeto. As propriedades de configurao incluem menus suspensos listando tipos de
configuraes do projeto e plataformas disponveis, e caixas de seleo para selecionar os
projetos a serem criados e a serem implantados (se ativado). A combinao de configurao de
projeto e plataforma escolhida determina a configurao de compilao do projeto a ser usada.
Para mais informaes, consulte Caixa de Dilogo Solution Property Pages.
Use a lista suspensa Solution Configurations na barra de ferramentas Standard para selecionar
a configurao compilao soluo ativa, e para abrir a caixa de dilogo Configuration Manager.
Voc tambm pode acessar o Configuration Manager selecionando Configuration Manager a
partir do menu Build.
Visual C# Consolidado 496
Configuraes de Compilao
Configuraes de compilao fornecem uma maneira de armazenar vrias verses de soluo e
propriedades do projeto. A configurao ativa pode ser rapidamente acessada e alterada,
permitindo que voc facilmente crie vrias configuraes do mesmo projeto.
Por padro, e projetos criados com Visual Studio incluiem configuraes Debug e Release.
Configuraes Debug so automaticamente configuradas para depurar um aplicativo, e
configuraes Release so configuradas para a verso final do aplicativo. Para mais informaes,
consulte COMO: defina configuraes Debug e Verso. Voc tambm pode criar e editar suas
prprias configuraes personalizadas de soluo e projeto para atender s necessidades do seu
aplicativo. Para mais informaes, consulte Como criar e editar configuraes:.
Dois nveis de configuraes de compilao podem ser definidos no Visual Studio: configuraes
de soluo e configuraes do projeto.
Configuraes de Soluo
Um Configurao de soluo especifica como os projetos em uma soluo sero compilados e (se
ativado) implantado. Para definir uma nova configurao de soluo, abra a Caixa de Dilogo
Configuration Manager . e selecione New da lista Active solution configuration
Cada entrada em uma configurao de soluo inclui um nome de projeto, uma configurao, uma
configurao de plataforma, uma configurao de compilao, e (se ativado) uma configurao
Deploy. A combinao da configurao de soluo e da configurao de plataforma escolhidas
determina a configurao do projeto que ser usada. Para obter mais informaes sobre soluo
de plataformas, consulte Criar plataformas.
Voc pode criar quaisquer nmeros de configuraes de soluo, cada um com um nome
exclusivo. O Ambiente integrado de desenvolvimento do Visual Studio (IDE) automaticamente
atribui configuraes de soluo sempre que voc:
Adicionar uma plataforma de projeto com Create new solution platforms selecionada.
Adicionar um novo projeto que ir ser implantado em vrias plataformas, um dos quais
novo.
Configuraes de soluo tambm fornecem informaes de contexto do projeto em geral para o
IDE. Por exemplo, se a configurao de soluo ativa especifica que um projeto ser compilado
para um dispositivo mvel, a Caixa de ferramentas exibir somente itens de projeto que podem
ser usados em um projeto de dispositivo mvel enquanto voc estiver trabalhando neste projeto.
Configuraes do projeto
A configurao e plataforma do projeto so usadas juntas para especificar as propriedades a
serem usadas ao compilar o projeto. Um projeto pode ter um conjunto de propriedades de projeto
definidas para cada combinao exclusiva de uma configurao e plataforma. Propriedades do
projeto so editadas com o Project Designer. Determinados painis no Project Designer contm
listas suspensas que indicam a configurao e combinao de plataforma do projeto atual.
Voc pode definir as propriedades dependentes da configurao em cada configurao de projeto
conforme necessrio. Propriedades de projeto podem ser usadas para determinar, por exemplo,
Visual C# Consolidado 497
quais itens de projeto sero includos em uma compilao particular, quais arquivos de sada
sero criados, onde os arquivos de sada sero colocados, e como eles sero otimizados.
Configuraes de projeto podem diferir bastante. Por exemplo, as propriedades de configurao
de um projeto podem especificar que seu arquivo de sada seja otimizado para que o binrio
resultante ocupe o espao mnimo, enquanto outro projeto pode ser otimizado de forma que o seu
executvel execute com a velocidade mxima.
Configuraes do projeto no so armazenadas pelo usurio, mas pela soluo, para que elas
possam ser compartilhadas por uma equipe. Embora as dependncias de projeto so
independentes da configurao, somente os projetos especificados na configurao de soluo
ativa sero compilados.
Alterar Configuraes de Solution
Quando voc cria uma soluo, o Visual Studio usa a configurao de soluo ativa, que
especifica as configuraes do projeto para usar para cada projeto a ser compilado. Voc pode
alterar a configurao ativa diretamente na lista suspensaSolution Configurations na barra de
ferramentas padro, ou a partir da caixa de dilogo Configuration Manager .
Observao
Se voc no puder encontrar as configuraes de soluo na barra de ferramentas padro ou no
puder acessar o Configuration Manager, voc pode ter as configuraes de desenvolvedor do
Visual Basic aplicadas. Para mais informaes, consulte COMO: Gerenciar configuraes de
compilao desenvolvedor de configuraes aplicado.
Como o IDE atribui configuraes do projeto para serem compiladas
Quando voc cria uma nova soluo de configurao (ao invs de copiar a que j exista), o IDE
determina as configuraes padro do projeto para os projetos que ele ir compilar usando os
seguintes critrios de seleo para cada projeto (avaliados nesta ordem):
1. A nova soluo de configurao criar uma configurao de projeto cujo nome
corresponde exatamente ao seu. Os nomes de configurao no diferenciam maisculas de
minsculas.
2. Se no houver nenhuma correspondncia de nome exato, a nova configurao de soluo
ir compilar uma configurao de projeto cujo nome corresponde parte de configurao do
seu nome, mesmo que a parte da plataforma tambm no corresponda. (Lembre-se que a
conveno de nomeao <configuration name> <platform-name>.)
3. Se ainda no houver correspondncia, a nova configurao de soluo ir compilar a
primeira configurao listada para o projeto.
Como o IDE atribui configuraes de soluo
Quando voc cria uma configurao de projeto e marca Create new solution configurations o
IDE procura uma configurao de soluo nomeada apropriadamente para compilar o projeto em
cada plataforma que ele suporta. Em alguns casos, o IDE ir renomear as configuraes de
soluo existentes ou criar novas.
A IDE determina como atribuir as configuraes de soluo usando os critrios de seleo a
seguir:
Visual C# Consolidado 498
Para Visual Basic projetos, consulte COMO: Otimizar um aplicativo para um Tipo
especfico de CPU.
Para projetos Visual C#, consulte PAGE compilao, Designer projeto c (#).
Para projetos Visual C++, consulte COMO: configurar projetos Visual C++ para direcionar
para plataformas de 64 bits.
COMO: Configurar projetos para direcionar para vrias plataformas
Visual Studio 2005 permite que uma soluo direcione para vrias arquiteturas de CPU diferentes,
ou plataformas, de uma vez. As propriedades para definir isto so acessados atravs da Caixa de
Dilogo do Configuration Manager.
Selecionando uma plataforma
A Caixa de dilogo Configuration Manager permite que voc crie e defina configuraes e
plataformas no nvel de soluo e de projeto. Cada combinao de configuraes no nvel de
soluo e destinos pode ter um conjunto exclusivo de propriedades associadas a ela, permitindo
que voc facilmente alterne entre, por exemplo, uma configurao Release que direciona uma
plataforma x64, uma configurao Release que direciona uma plataforma x 86, e uma
configurao Debug que direciona uma plataforma x 86.
Para definir a configurao para direcionar diferentes plataformas
1. No menu Build, clique em Configuration Manager.
2. Em Active solution platform box, selecione a plataforma que voc deseja direcionar a
soluo, ou selecione <New> para criar uma nova plataforma. Para obter informaes sobre
como usar a caixa de dilogo New Solution Platform, consulte a New Solution Platform
Dialog Box.. Visual Studio. ir compilar seu aplicativo para direcionar a plataforma que
definida como a plataforma ativa na caixa de dilogo Configuration Manager
Remover uma plataforma
Se voc percebe que no tem necessidade de uma plataforma, pode remov-la usando a caixa de
dilogo Gerenciador de configuraes. Este procedimento remover todas as configuraes de
soluo e projeto que voc configurou para essa combinao de configurao e de destino.
Para remover uma plataforma
1. No menu Build, clique em Configuration Manager.
Visual C# Consolidado 500
2. Em a Active solution platform box, selecione <Edit>. A Edit Solution Platforms Caixa
de dilogo aberta.
3. Clique na plataforma voc deseja remover, e clique em Remove.
Selecionando vrias plataformas com uma soluo
Porque voc pode alterar as configuraes com base na combinao de configurao e
configuraes de plataforma, voc pode configurar uma soluo que pode selecionar mais de uma
plataforma.
Para direcionar vrias plataformas
1. Use o Configuration Manager para adicionar pelo menos duas plataformas destino para a
soluo.
2. Selecione a plataforma que voc deseja direcionar a partir da lista Active solution
platform.
3. Compilar uma soluo.
Para criar vrias configuraes de soluo de uma nica vez
1. Use o Configuration Manager para adicionar pelo menos duas plataformas destino para a
soluo.
2. Use a janela Batch Build para criar vrias configuraes de soluo de uma vez. Para
mais informaes, consulte a caixa de dilogo compilao em lotes.
possvel ter uma plataforma no nvel de soluo como, por exemplo, x64, e no ter projetos
nesta soluo direcionando para a mesma plataforma. Tambm possvel ter vrios projetos na
sua soluo, cada um direcionado para diferentes plataformas. recomendvel que se voc tiver
uma dessas situaes, voc crie uma nova configurao com um nome descritivo para evitar
confuso.
COMO: Preparar e gerenciar Compilaes
Visual Studio 2005 oferece uma variedade de formas para ajud-lo a organizar quais arquivos
esto includos em uma compilao de uma soluo ou projeto, qual conjunto de propriedades do
projeto est em vigor enquanto compila, e em que ordem os projetos sero compilados. Esta
seo contm tpicos que explicam vrios procedimentos para preparar e gerenciar compilaes.
A seguir esto os procedimentos comuns do Visual Studio para preparar e gerenciar compilaes.
Observao
As opes disponveis nas caixas de dilogo, e os nomes e locais do menu de comandos que
voc v, podem diferir do que descrito na Ajuda dependendo das configuraes ou edio
ativas. Esta pgina Ajuda foi escrita com base no General Development settings. Para exibir ou
alterar as configuraes, escolha Import and Export Settings no menu Tools. Para mais
informaes, consulte Configuraes do Visual Studio.
Para compilar, recompilar, ou limpar uma soluo inteira
1. Em Solution Explorer, selecione ou abra a soluo desejada.
2. No menu Build, escolha Build Solution, Rebuild Solution,. ou Clean Solution
o
Escolha Build ou Build Solution para compilar somente os arquivos e
componentes de projetos que foram alterados desde a ltima compilao.
Visual C# Consolidado 501
Observao
O comando Build passa a ser Build Solution quando uma soluo inclui mais de um projeto.
o
Escolha Rebuild Solution para " Limpar " a primeira soluo, e ento compilar
todos os arquivos e componentes de projeto .
o
Escolha Clean Solution para excluir quaisquer arquivos intermedirios e de sada,
deixando somente os arquivos e componentes de projeto, dos quais novas ocorrncias de
arquivos intermedirios e de sada podem ser compiladas.
Para criar ou reconstruir um nico projeto
1. Em Solution Explorer, selecione ou abra o projeto desejado.
2. No menu Build, escolha Build [Project Name] ou Rebuild [Project Name].
o
Escolha Build [Project Name] para criar somente esses componentes de projeto
que foram alterados desde a ltima compilao.
o
Escolha Rebuild [Project Name] para " Limpar " o projeto primeiro, e ento
compilar os arquivos de projeto e todos os seus componentes.
Para criar somente o projeto de inicializao e suas dependncias
1. No menu Tools, escolha Options.
2. Na caixa de dilogo Options, expanda a pasta Projects and Solutions, e escolha Build
and Run.
A caixa de dilogo Compilar e executar, projetos e solues, Opes aberta.
3. Selecione a opo Only build startup projects and dependencies on Run.
Quando esta opo estiver selecionada, somente o projeto de inicializao atual e suas
dependncias so criados quando voc:
o
Escolhe Start (F5) a partir do Menu Debug.
Ou-
o
Escolhe Build Solution (CTRL+SHIFT+B) a partir do Menu Build.
Quando esta opo estiver desmarcada, o comando anterior no compila todos os projetos,
suas dependncias, e os arquivos de soluo. Por padro, esta opo no selecionada.
Para compilar somente o projeto Visual C++ selecionado
Somente para projetos em Visual C++, um submenu Project Only do menu Build exibe
trs comandos especficos do projeto:
o
Criar somente projname < >
o
Reconstruir somente projname < >
o
Limpar somente projname < >
Esses trs comandos compilam, limpam e compilam, ou limpam o Projeto Visual C++
atualmente selecionado no Solution Explorer, sem compilar ou limpar quaisquer dependncias
do projeto ou arquivos de soluo.
Para compilar em lotes vrias configuraes do projeto
1. No menu Build, escolha Batch Build.
2. Marque as caixas de seleo para as configuraes do projeto que deseja criar.
3. Escolha Build ou Rebuild.
Para definir opes de salvar para os comandos de compilao
Visual C# Consolidado 502
1. No menu Tools, escolha Options.
2. Na caixa de dilogo Options, expanda a pasta Projects and Solutions, e escolha Build
and Run.
A caixa de dilogo Opes, Criar e executar, projetos e solues abre.
3. Selecione uma opo na lista Before building.
Para mostrar comentrios sobre compilaes
1. No menu Tools, escolha Options.
2. Na caixa de dilogo Options, expanda a pasta Projects and Solutions, e escolha
General.
A caixa de dilogo Opes, Geral, projetos e solues abre.
3. Se desejar que a janela de sada venha para a frente e mostre o andamento da
compilao, selecione Show Output window when build starts.
4. Se voc desejar para ver todos os erros de uma compilao na lista a tarefas quando a
compilao terminado, selecione Always show Error List if build finishes with errors.
COMO: Alterar a pasta de sada de compilao
Visual Studio fornece uma maneira para que voc modifique a localidade de sada gerada pelo
seu projeto. Devido a diferenas no Project Designers para as diferentes linguagens, o
procedimento para modificar a pasta de sada de compilao varia.
Projetos do Visual Basic
Para projetos Visual Basic, a alterao da pasta de sada de compilao feita atravs do
Compile Pane. do Project Designer. Para mais informaes, consulte COMO: alterar o local de
compilao para um aplicativo.
,Projetos Visual C# e Visual J#
Para alterar o diretrio de sada de compilao:
1. No menu Project, clique em Properties.
2. Clique na guiaBuild.
3. Clique no boto Browse ao lado da caixa Output e selecione uma nova pasta de sada de
compilao.
Visual projetos C++
Para alterar o diretrio de sada da compilao:
1. No menu Project, clique em Properties.
2. Expanda a guia Configuration Properties e clique em General.
3. Altere a caixa Output Directory para a nova pasta de sada.
COMO: compilar para uma pasta de sada comum
Por padro, o Visual Studio 2005 cria cada projeto em uma soluo na sua prpria pasta dentro
da soluo. Voc pode alterar os caminhos de sada de compilao dos projetos para forar que
todas as sadas sejam colocadas na mesma pasta.
Para colocar todas as sadas de soluo em uma pasta comum
1. Clique em um projeto na soluo.
Visual C# Consolidado 503
2. No menu Project, clique em Properties.
3. Dependendo do tipo de projeto, clique na guia Compile ou na guia Build, e defina o
Output path para uma pasta que ser usada por todos os projetos na soluo. o
4. Repita as etapas de 1 a 3 para todos os projetos na soluo.
COMO: Personalizar Eventos de Compilao
Eventos de compilao especificam comandos executados antes do inicio da compilao ou
depois que a compilao termina. Eventos de compilao so executados somente se a
compilao atingir esses pontos com xito no processo de compilao. Devido a diferenas na
elaborao do projeto para os diferentes idiomas, o procedimento para personalizar eventos de
compilao varia.
Projetos do Visual Basic
Para obter informaes sobre como personalizar eventos de compilao para projetos do Visual
Basic, consulte Especificando eventos de compilao:.
Projetos Visual C# e Visual J#
Para obter informaes sobre como personalizar eventos de compilao para Projetos Visual C# e
Visual J# , consulte COMO: especificar eventos de compilao (c #, j #).
Projetos Visual C++
Para obter informaes sobre como personalizar eventos de compilao para projetos Visual C++
, consulte Especificando eventos de compilao.
COMO: definir vrios projetos de inicializao
Visual Studio 2005 permite que voc especifique como mais de um projeto executado quando
voc inicia o depurador.
Para definir vrios projetos de inicializao
1. Em Solution Explorer, selecione a soluo.
2. No menu Project, clique em Properties. O A caixa de dilogo de pginas de Propriedades
da Soluo abre.
3. Expanda o n Common Properties, e clique em Startup Project.
4. Clique em Multiple Startup Projects e defina as aes do projeto. Para mais informaes,
consulte Projetos de inicializao, Propriedades Comuns, Caixa de dilogo de Pginas de
Propriedades de Soluo.
COMO: Criar e Remover Dependncias de Projeto
Ao criar uma soluo que contm vrios projetos, pode ser necessrio criar determinados projetos
primeiro, para gerar cdigo usado por outros projetos. Quando um projeto consome cdigo
executvel gerado pelo outro projeto, o projeto que gera o cdigo conhecido como uma
Visual C# Consolidado 504
dependncia de projeto do projeto que consome o cdigo. Essas relaes de dependncia podem
ser definidas na Caixa de Dilogo Project Dependencies.
Para atribuir dependncias a projetos
1. Em Solution Explorer, selecione um projeto.
2. No menu Project, escolha Project Dependencies.
A caixa de dilogo Project Dependencies aberta.
Observao
A opo Project Dependencies somente estar disponvel em solues contendo mais de um
projeto.
3. Na aba Dependencies , selecione um projeto a partir do menu suspenso Project.
4. No campo Depends on, selecione a caixa de seleo de qualquer outro projeto que deve
ser compilado antes deste projeto.
Para remover dependncias de projetos
1. Em Solution Explorer, selecione um projeto.
2. No menu Project, escolha Project Dependencies.
A caixa de dilogo Project Dependencies aberta.
Observao
A opo Project Dependencies somente estar disponvel em solues contendo mais de um
projeto.
3. Na aba Dependencies, selecione um projeto a partir do menu suspenso Project.
4. No campo Depends on, desmarque as caixas de seleo ao lado de outros projetos que
no sejam mais dependncias deste projeto.
Compilar elementos de interface do usurio
Esses elementos de interface do usurio ajudam-no a compilar seus aplicativos e controlar o
andamento da compilao.
Caixa de Dilogo Batch Build
Use esta caixa de dilogo para criar vrias configuraes de projeto todas ao mesmo tempo. Voc
pode decidir, por exemplo, compilar todas as configuraes de projeto para um projeto com um
comando. Voc pode acessar esta caixa de dilogo a partir do menu Build.
Verifique as configuraes de compilao do projeto
Cada entrada inclui os seguintes campos:
Projeto
Visual C# Consolidado 505
Exibe nomes de projetos na soluo atual. Podem aparecer vrias entradas para o mesmo
projeto, uma para cada configurao de projeto. Todas as entradas de todos os projetos
so listados numa nica lista simples.
Configurao
Exibe o tipo de compilao do projeto especificado pela configurao de soluo
selecionado (Solution Config).
Plataforma
Exibe o nome da plataforma na qual o projeto ser executado
Soluo Config
Exibe a configurao de compilao da soluo que ir fornecer o contexto como este tipo
de configurao do projeto compilado para a plataforma especificada. Por exemplo,
suponha que projeto P1 dependa de recursos de outro projeto, P2. A configurao da
soluo especificar que a configurao de projeto de P1 para esta plataforma seja
compilada, e que a configurao de projeto de P2 que fornecer os recursos dos quais P1
precisa tambm seja compilada.
Para alterar uma configurao de soluo, use a Caixa de Dilogo Configuration Manager
para editar a configurao da soluo ou criar uma nova configurao. Aps alterar uma
configurao de soluo, clique em Rebuild nesta caixa de dilogo para a compilao em
lotes de todas as configuraes do projeto.
Criar
Especifica se a configurao de projeto especificada deve ser includa na compilao em
lotes.
Botes
Criar
Compila apenas os itens de projeto para as combinaes selecionadas de configurao do
projeto e plataforma que foram alterados desde a ltima compilao.
Recriar
Faz uma compilao completa a partir do zero de todos os itens para os itens de projeto
selecionado para as combinaes selecionado de configurao do projeto e plataforma.
Limpar
Exclui todos os arquivos intermedirios e pastas de sada para as combinaes
selecionadas de configurao do projeto e plataforma.
Selecione Tudo
Marca cada configurao de projeto a ser includa na compilao em lotes.
Desmarcar tudo
Remove cada configurao de projeto da compilao em lotes.
Visual C# Consolidado 506
Fechar
Fecha a caixa de dilogo Batch Build.
Janela de sada
Esta janela pode exibir mensagens de status para vrios recursos no ambiente de
desenvolvimento integrados (IDE). Para exibir a janela Output , selecione Output a partir do
menu View. Para fechar a janela Output e voltar o foco para o editor, pressione a tecla Escape
(ESC).
Toolbar
Show output from
Exibe um ou mais painis de sada para serem visualizados. Vrios painis de informaes
podem estar disponveis, dependendo de quais ferramentas do IDE tiverem usado a janela
Output para enviar mensagens para o usurio.
Find Messsage in Code
Move o ponto de insero no Editor de Cdigos para a linha que contm o erro de
compilao selecionado.
Go to Previous Message
Altera o foco na janela Output para o erro de compilao anterior e move o ponto de
insero no Editor de Cdigos para a linha que contm esse erro de compilao.
Go to Next Message
Altera o foco na janela Output para o prximo erro de compilao e move o ponto de
insero no Editor de Cdigos para a linha que contm esse erro de compilao.
Clear all
Limpa todo o texto a partir do Painel Output.
Toggle Word Wrap
Ativa e desativa o recurso quebra automtica de linha no painel Output. Quando a quebra
automtica de linha estiver ativada, a continuao de textos que se estendem alm rea
de visualizao so exibidos na linha seguinte.
Painel Output
O painel Output escolhido na lista Show output from exibe a sada a partir da origem indicada.
Direcionando mensagens para a janela output
Para exibir a janela Output sempre que voc criar um projeto, selecione a opo Show Output
window when build starts na caixa de dialogo General, Projects and Solutions Option. Em
Visual C# Consolidado 507
seguida, com um arquivo de cdigo aberto para edio, clique nos botes Go To Previous
Message e Go to Next Message na barra de ferramentas da janela Output para selecionar as
entradas do painel Output. Na medida em que voc faz isso, o ponto de insero no editor de
cdigo saltar para a linha do cdigo onde o problema selecionado ocorre.
Certos recursos do IDE (Integrated Development Enviroments, ambiente de desenvolvimento
integrado) e comandos chamados na Janela de Comando entregam suas sadas para a janela
Output. Sadas de ferramentas externas como arquivos .bat e .com, normalmente exibidas na
janela do DOS, sero roteadas para um painel Output quando voc seleciona a opo Use
Output Window na caixa de dilogo External Tools. Muitos outros tipos de mensagens tambm
podem ser exibidas nos painis Output. Por exemplo, quando a sintaxe TSQL em um
procedimento armazenado verificada em um banco de dados de destino, os resultados sero
exibidos na janela Output.
Voc tambm pode programar seus prprios aplicativos para escreverem mensagens de
diagnstico em tempo de execuo em um painel Output. Para fazer isso, use membros da
classe Debug ou Trace no espao para nome da System.Diagnostics da .NET Framework Class
Library Reference. Membros de classe Debug exibem a sada quando voc compila as
configuraes de depurao da sua soluo ou projeto; membros da classe Trace exibem a sada
quando voc compila tanto as configuraes de depurao quanto as de criao de verso. Para
mais informaes, consulte Mensagens de diagnstico na janela de sada.
No Visual C++, voc pode criar etapas personalizadas de compilao e criar eventos cujos avisos
e erros so exibidos e contados no painel Output. Pressionando F1 em uma linha de sada ser
exibido um tpico da Ajuda apropriado. Para mais informaes, consulte Formatao da sada de
uma etapa de compilao personalizada ou evento de compilao.
Caixa de Dilogo Configuration Manager
Use esta caixa de dilogo para criar e editar configuraes de compilao de solues e
configuraes de projeto. Quaisquer alteraes feitas em configuraes de compilao de
solues so refletidas na pgina Configuration da caixa de dilogo Solution Property Pages.
Voc pode acessar o Configuration Manager a partir do menu Build, da caixa de dilogo
Solution Property Pages, ou da lista suspensa de configuraes de soluo na barra de
ferramentas principal.
Configurao de soluo ativo
Exibe as configuraes de compilao de soluo disponveis. Use esta lista suspensa ou
a lista suspensa Configuration na barra de ferramentas principal para alterar a
configurao de soluo ativa. Para criar novas configuraes de soluo e modificar
configuraes existentes, escolha <New...> ou <Edit...> na lista suspensa.
Plataforma soluo ativo
Exibe as plataformas disponveis para as quais compilar a soluo. Quando voc altera a
plataforma de soluo ativa, a alterao aplicada para todos os projetos na soluo. Para
criar novas plataformas de soluo e modificar plataformas existentes, escolha <New...>
ou <Edit...> na lista suspensa.
Contextos projeto
Cada entrada em Project contexts na configurao de compilao da soluo
selecionada inclui um nome de projeto, para selecionar os projetos a ser criado listas
suspensas de tipos de configurao e plataformas, e caixas de seleo e (se ativado). A
Visual C# Consolidado 508
combinao de tipo e plataforma escolhida determina a configurao do projeto que ser
usada. Clique nos cabealhos de coluna para classificar as colunas na grade.
Projeto
Exibe os nomes dos projetos encontrados na soluo atual.
Configurao
Exibe o tipo de compilao de projeto desejada, e lista todos os tipos disponveis de
compilao. Para criar um novo tipo de compilao para o projeto ou renomear um tipo
existente, escolha <New...> ou <Edit...> desta lista suspensa.
Plataforma
Exibe a plataforma na qual a compilao desejada deve executar e lista todas as
plataformas disponveis para o projeto. Para adicionar uma nova plataforma ou editar um
arquivo existente, escolha <New...> ou <Edit...> desta lista suspensa. O tipo de projeto
com o qual voc estiver trabalhando determina se voc pode adicionar mais de uma
plataforma e que plataformas esto disponveis para que voc adicione ao projeto. Quando
voc adicionar uma plataforma a um projeto, uma nova configurao de projeto ser
criada.
Criar
Especifica se o projeto ser compilado pela configurao de soluo atual. Projetos no
selecionados no so compilados, ainda que haja qualquer dependncia de projeto
recaindo sobre eles. Projetos no selecionados para serem compilados so, ainda assim,
includos na depurao, execuo, embalagem, e implantao da soluo.
Implantar
Se ativado, especifica se o projeto ser implantado quando os comandos Run ou Deploy
forem usados com a configurao selecionada de compilao da soluo. Esta caixa de
seleo aparece somente para projetos implantveis.
Depurao no Visual Studio
Voc criou o seu aplicativo e resolveu os erros de compilao. Agora voc deve corrigir esses
erros de lgica que evitam que seu aplicativo ou procedimentos armazenados sejam executados
corretamente. Voc pode fazer isso com o desenvolvimento integrado de funes de depurao
do ambiente. Eles permitem que voc se parar em locais de procedimento, inspecionar memria e
registrar valores, alterar variveis, observar trfego de mensagens, e obter uma viso de perto do
que seu cdigo faz.
O que h de novo no depurador Visual Studio 2005
O depurador Visual Studio 2005 foi aprimorado pela adio dos seguintes recursos:
Visualizadores.
Ferramentas eficientes permitem voc exibir dados em um formato natural e intuitivo. Voc
pode iniciar um visualizador em uma janela Watch ou a partir do novo DataTips aprimorado.
Por exemplo, agora voc pode exibir uma seqncia de caracteres como um documento HTML
ou XML. Voc pode usar os visualizadores existentes ou escrever seus prprios. Para obter
mais informaes, consulte Visualizadores.
Depurao remota usando pipes, uma nova alternativa para depurao TCP/IP que ajuda
e proporciona mais segurana. Para obter mais informaes, consulte Depurao Remota
Usando Pipes.
Depurao automtica em servios XML da Web. Para obter mais informaes, consulte
Depurao em Servios XML da Web.
Uma nova pseudovarivel $exception para recuperar informaes sobre excees C#.
Alteraes no Depurador do Visual Studio .NET 2002
O Visual Studio .NET 2002 fornecia um nico depurador integrado para todas as linguagens do
Visual Studio. Uma nova e unificada interface combinou recursos de antigos depuradores do
Visual C++ e Visual Basic, bem como muitos novos recursos. As principais melhorias para
depurao incluem:
Depurao de linguagens cruzadas do Visual Basic . NET, Visual C++ .NET, Visual C# .
NET, Managed Extensions for C++, script, e SQL.
Usar verificao de erros em tempo de execuo no Visual C++ para detectar erros
comuns em tempo de execuo, tais como corrupo do ponteiro da pilha, saturaes de
matrizes locais, corrupo de pilha, dependncias ao inicializar variveis locais, e perda de
dados em uma atribuio a uma varivel mais curta.
Verificar a segurana de buffer dos aplicativos do Visual C++ com a opo /GS. Voc pode
usar esta opo para detectar saturaes de buffer, o que substitui o endereo do remetente
Visual C# Consolidado 511
Definir um ponto de interrupo em uma DLL que ainda no foi carregada. O ponto de
interrupo automaticamente tornar-se-a ativo quando a DLL carregar. Voc no precisar
especificar DLLs que voc deseja depurar em uma caixa de dilogo Additional DLLs, como
voc fez no depurador do Visual C++.
Depurao de clientes de servios XML da Web aos servios XML da Web, com um pilha
de chamadas integrada entre aplicativos cliente e servidor.
Certifique-se de que voc sabe que o servidor Web seguro antes de depur-lo. Se voc
no tiver certeza de que ele seguro, no faa a depurao.
Tome cuidado principalmente se voc estiver depurando um servio da Web que est
exposto na Internet.
Componentes Externos
Esteja ciente dos status de confiana de componentes externos com que o programa interage,
especialmente se voc no tiver escrito o cdigo. Tambm esteja ciente de componentes que o
Visual Studio ou o depurador possa usar.
Smbolos e Cdigo Fonte
Duas ferramentas do Visual Studio que exigem preocupao com a segurana so as seguintes:
Source Saver, que lhe fornece verses de cdigo fonte provenientes de um repositrio de
cdigo fonte. Ele til quando voc no tiver a verso atual do cdigo fonte de um programa.
Para obter mais informaes, consulte Como: Obter cdigo fonte usando Source Server e
Aviso de Segurana: depurador deve executar comando no confiveis.
Symbol Server, que usado para fornecer os smbolos necessrios para depurar uma
falha durante um chamada do sistema. Para obter mais informaes, consulte Como
especificar um caminho smbolo: e Como usar um servidor smbolo:.
Preparao e configuraes de depurao
Esta seo descreve as configuraes de propriedades relacionadas ao depurador, e a
preparao necessria para depurar o programa com o depurador do Visual Studio. Se voc criar
seu programa no Visual Studio usando os modelos de projeto, essas configuraes so definidas
corretamente para voc na configurao Debug.
Para obter mais informaes, consulte HOW TO: definir depurao e configuraes de verso.
Visual C# Consolidado 513
Configuraes do Projeto do Depurador
Determinadas configuraes do projeto tambm afetam a depurao. Essas configuraes
determinam tais itens em quais diretrios o depurador examina o comando e argumentos de
comando usados para iniciar o programa e o tipo de informao da depurao criada para o
programa. Voc pode alterar essas configuraes na caixa de dilogo Property Pages.
Esta seo descreve quais opes esto disponveis e como defini-las.
Requisitos de software depurao SQL
Este tpico se aplica a:
Edio do Visual Studio Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Padro No No No No No
Pro / Team Sim Sim Sim No No
Esta seo descreve o software necessrio para depurar o cdigo em um banco de dados do SQL
Server. H requisitos adicionais quando estiver depurando um aplicativo de mltiplas camadas do
SQL Server. Para obter mais informaes, consulte Depurao de aplicao multi-camada de
banco de dados.
Requisitos de Softwares de Camadas de Banco de Dados
A depurao em SQL com o Microsoft Visual Studio 2005 requer o seguinte software no servidor:
O SQL Server 2005 ou o SQL Server 2000 com o Service Pack 3 necessrio.
Requisitos de Softwares de Camadas de Banco de Dados (somente CLR do SQL)
A depurao da CLR do SQL requer os seguintes softwares adicionais no servidor:
Todoos os outros requisitos desta pgina aplicam-se CLR do SQL, bem como do TSQL.
Requisitos Adicionais de Softwares de Mltiplas Camadas
Com o Visual Studio 2005, voc pode depurar aplicativos de vrias camadas que faam conexes
com banco de dados do SQL Server e que executem procedimentos armazenados em SQL. Para
fazer isso, a camada do aplicativo deve conectar-se ao bancos de dados usando um dos
seguintes procedimentos:
Visual C# Consolidado 514
Cliente SQL
Uma tecnologia como ADO ou ADO.NET que foi construda a cima do OLE DB ou do
ODBC.
A conta do aplicativo a conta de usurio que Visual Studio ou o aplicativo cliente que
estiver executando sob. Esta conta uma conta de usurio do Windows e deve ser um
membro do grupo sysadmin no SQL Server que est sendo depurado.
A conta de conexo a identidade usada para fazer a conexo ao SQL Server. Esta a
conta que voc insere quando define a conexo no Server Explorer ou que voc especifica na
seqncia de conexo quando o aplicativo se conecta a um banco de dados. Esta conta pode
ser uma conta de usurio do Windows, usando a autenticao do Windows, nesse caso, a
mesma conta como a conta do Windows na qual Visual Studio est sendo executado. Ou a
conta de conexo pode ser uma conta de logon do SQL Server. Para depurao SQL Server
2005, a conta de conexo deve ser um membro da funo sysadmin.
Para adicionar uma conta de logon do Windows como sysAdmin
Esse arquivo armazena todas as informaes da depurao para o arquivo .exe. Para
C/C++, ele reside na subpasta \debug.
Sempre que ele cria um arquivo OBJ, o compilador C/C++ mescla informaes da depurao no
VC x 0.PDB. As informaes inseridas incluem informaes de tipo mas no inclui informaes
smbolo, como definies de funo. Ento, mesmo que todos os arquivos de origem incluam
arquivos de cabealho como <windows.h>, os typedefs daqueles cabealhos so armazenados
apenas uma vez, especialmente estando em todo arquivo OBJ.
O vinculador cria project.PDB, que contm informaes da depurao para o arquivo EXE do
projeto. O arquivo do project.PDB contm informaes completas da depurao, incluindo
prottipos de funo, no apenas as informaes encontradas em VC x 0.PDB Os dois arquivos
PDB permitem atualizaes incrementais. O vinculador tambm incorpora o caminho para o
arquivo .pdb no arquivo .exe ou .dll que ele cria.
O depurador Visual Studio usa o caminho para o PDB no arquivo EXE ou DLL para localizar o
arquivo do project.PDB. Se o depurador no pode localizar o arquivo PDB naquele local ou se o
caminho for invlido (por exemplo, se o projeto foi movido para outro computador), o depurador
pesquisa o caminho que contm o EXE, os caminhos smbolo especificados na caixa de dilogo
Options (pasta Debugging, n Symbols). O depurador no carregar um PDB que no coincide
com o binrio que est sendo depurado.
Arquivos DBG
Este tpico se aplica a:
Visual Studio Visual Basic C# C++ J# Dev Web
Express No No Sim No No
Padro No No Sim No No
Pro / Team No No Sim No No
Visual C# Consolidado 522
Os arquivos DBG so formatos de arquivos executveis portveis (PE) que contm informaes
da depurao no formato Codeview para o depurador no Visual Studio (e possivelmente outros
formatos, dependendo de como o DBG foi criado). Quando voc no tem origem para
determinados cdigos, tais como bibliotecas ou APIs do Windows, os arquivos DBG permitem a
depurao. Os arquivos DBG tambm permitem voc para fazer depurao do OLE RPC.
Arquivos DBG podem ter sido substitudos por arquivos PDB, que agora so mais comumente
usados na depurao.
Voc pode usar o utilitrio REBASE.EXE para tirar informaes da depurao de um executvel
no formato PE e armazen-lo em um arquivo DBG. O campo de caracterstica do arquivo
IMAGE_FILE_DEBUG_STRIPPED no cabealho do arquivo PE informa o depurador que as
informaes do Codeview foram extradas para um arquivo DBG separado.
Voc pode baixar e instalar arquivos DBG que contm smbolos de depurao de chamadas para
as APIs Windows do sistema. Para obter mais informaes, consulte Instalar smbolos de
depurao do sistema.
Quando voc depurar utilizando smbolos de um arquivo DBG, voc deve usar os nomes
totalmente decorados. Por exemplo, para definir um ponto de interrupo em uma chamada para
a funo sndPlaySound do Windows, voc precisar especificar o _sndPlaySoundA@8.
O depurador do Visual Studio no foi criado para depurao no modo protegido do cdigo no
Kernel, mesmo com smbolos DBG.
Para modo de depurao do usurio, o Visual Studio requer os seguintes arquivos:
Voc pode baixar os smbolos mais recentes para sua verso do Windows em
http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx#Windows symbol packages.
Visual C# Consolidado 523
Mixed-Mode Debugging
Ser criado em outro projeto na mesma soluo Visual Studio que contm a biblioteca de
classes.
Ser um aplicativo da Web que contm uma pgina da Web que incorpore a DLL.
Visual C# Consolidado 525
Depurando o aplicativo de chamada
Para depurar uma DLL, inicie depurando o aplicativo de chamada, geralmente um executvel ou
um aplicativo da Web. H vrias maneiras para depurar.
Se voc tiver um projeto para o aplicativo de chamada, voc pode abrir esse projeto e
comear a execuo a partir do menu Debug. Para obter mais informaes, consulte Como
iniciar execuo:.
Voc pode depur-la a partir do projeto de DLL. Para obter mais informaes, consulte
Como depurar do um Project DLL:.
Voc pode depur-la a partir da janela Visual Studio Immediate: neste caso a janela
Immediate atua no papel de aplicativo.
Antes de iniciar a depurao do aplicativo de chamada, voc geralmente desejar definir um
ponto de interrupo na biblioteca de classes. Para obter mais informaes, consulte Pontos de
interrupo e Tracepoints. Quando o ponto de interrupo alcanado, voc pode depurar o
cdigo, observando a ao em cada linha, at que voc isole o problema. Para obter mais
informaes, consulte Cdigo Overview Stepping.
Controles em uma pgina da Web
Para depurar um controle de pgina da Web, crie uma pgina ASP.NET que o incorpore, se essa
pgina j no existir. Voc ento coloca pontos de interrupo no cdigo da pgina da Web, bem
como no cdigo do controle. Voc ento chama a pgina da Web do Visual Studio.
Antes de iniciar a depurao do aplicativo de chamada, voc geralmente desejar definir um
ponto de interrupo na DLL. Quando o ponto de interrupo alcanado, voc pode depurar o
cdigo, observando a ao em cada linha, at que voc isole o problema. Para obter mais
informaes, consulte Pontos de interrupo e Tracepoints e Cdigo Overview Stepping.
A janela Immediate
Voc pode avaliar funes ou mtodos na DLL sem ter um aplicativo de chamada, fazendo
depurao em tempo de design utilizando a janela Immediate. Para depurar dessa forma, faa o
seguinte enquanto o projeto DLL est aberto:
1. Abra a janela Immediate do depurador.
2. Para testar um mtodo denominado Test na classe Class1, instancie um objeto do tipo
Class1, digitando o cdigo C# a seguir na janela Immediate, esse procedimento funciona
para outras linguagens gerenciadas (C++, VB, J#,) com alteraes de sintaxe apropriadas:
Class1 obj = new Class1();
Em C#, todos os nomes devem ser totalmente qualificados. Alm disso, quaisquer mtodos
ou variveis devem estar no escopo atual e no contexto da sesso de depurao.
3. Supondo que Test usa um parmetro int, avalie Test utilizando a janela Immediate:
?obj.Test(10)
O resultado ser impresso na janela Immediate.
Visual C# Consolidado 526
4. Voc pode continuar a depurao de Test colocando um ponto de interrupo dentro dele e
depois avaliando a funo novamente:
?obj.Test(10);
O ponto de interrupo ser atingido e voc poder andar pelo cdigo Test. Depois da
execuo deixar Test, o depurador estar novamente no modo de design.
Preparao da depurao: Projetos de console
A preparao para depurar um projeto de console semelhante a preparao para depurar um
projeto do Windows, com algumas consideraes adicionais. Para obter mais informaes, veja
Depurao preparao: Applications formulrios Windows (.NET) e Preparao para depurao:
Aplicativos de Windows Forms. Devido semelhana de todos os aplicativos de console, este
tpico aborda os seguintes tipos de projeto:
Aplicativo de console do C#
Aplicativo de console do J#
A MPI deve ser instalada e configurada em cada mquina no cluster. A MPI est includa
no Windows Server 2003, Compute Cluster Edition. Outras implementaes da MPI esto
disponveis.
O MPIShim.exe deve ser instalado em cada mquina no cluster. MPIShim est includo no
Visual Studio 2005 e instalado com os componentes de depurao remota para ativar a
depurao paralela. O MPIShim pode ser instalado em qualquer diretrio, mas deve estar no
mesmo diretrio em cada mquina no cluster. Um caminho possvel :
c:\windows\system32\mpishim
Como alternativa, ele pode ser instalado em um diretrio local ao alvo de depurao.
O hospedeiro do Visual Studio (o computador de onde voc est depurando) deve ser
configurado com uma conta que tenha os privilgios apropriados para depurar os
computadores do cluster. (Consulte Permisses de depurao remota.)
Para preparar um projeto do Visual Studio para depurao MPI
1. Abra a soluo que contm o aplicativo paralelo no Visual Studio.
2. No Solution Explorer, clique com o boto direito do mouse no projeto e escolha
Properties a partir do menu de atalho.
3. Na caixa de dilogo Project Properties , selecione Debugging.
4. Na caixa de listagem Debugger to Launch, escolha MPI Cluster Debugging.
5. Na caixa MPIRun command, digite a localizao do MPIRun ou MPIExec (que inicia o
aplicativo MPI) na mquina do cluster. Por exemplo:
c:\windows\system32\mpiexec.exe
6. Na caixa MPIRun arguments, digite os argumentos que voc deseja passar para MPIRun
ou MPIExec. Por exemplo:
-np 2
7. Na caixa MPIRun working directory, digite a pasta de trabalho para MPIRun ou MPIExec.
Por exemplo:
c:\temp
8. Na caixa Application Command, digite o caminho para o aplicativo que o MPI ir executar
em cada mquina cluster (que tambm o aplicativo cujo projeto est aberto no Visual
Studio). O caminho pode ser um compartilhamento ou um caminho local em cada mquina
no cluster. Se ele for um caminho local, o caminho deve ser idntico em cada mquina. Por
exemplo:
$(TargetPath)
Visual C# Consolidado 538
9. Na caixa Application Arguments, digite quaisquer argumentos que voc deseja passar
para o aplicativo.
10. Na caixa MPIShim location, digite o caminho para o MPIShim.exe. Por exemplo:
c:\windows\system32\mpishim
11. Voc pode deixar a caixa de listagem Debugger Type definida como auto (o padro) e o
depurador ir escolher o tipo de depurador correto para o cdigo que est executando.
Como alternativa, voc pode escolher o tipo correto (native, managed ou mixed code)
para seu aplicativo.
12. Feche a caixa de dilogo Project Properties.
13. A partir do menu Tools, escolha Options.
14. Na caixa de dilogo Options, selecione o n Debugging, categoria General.
15. Localize a caixa de seleo When one process breaks, break all other processes.
Marque ou desmarque a caixa de seleo de acordo com o comportamento desejado
durante a sesso de depurao. (Como essa uma opo de Tools, essa configurao
permanecer em vigor para todos os projetos at voc alter-la.) Para obter mais
informaes, consulte Como interromper a execuo:.
16. Clique OK para fechar a caixa de dilogo Options.
Para depurar o aplicativo paralelo
1. No menu Debug, clique em Start para iniciar a depurao.
Se voc tiver configurado o projeto corretamente, o aplicativo comear executando em
todos os computadores no cluster.
Se voc tiver definido pontos de interrupo no seu cdigo, a execuo interromper no
primeiro ponto de interrupo.
2. No menu Debug, clique Windows, e clique em Processes.
A janela Processes. Voc pode usar esta janela para definir um processo ativo. Para
passar somente pelo nico processo ativo, use os botes na parte superior da janela.
Voc pode usar DataTips para obter valores de variveis enquanto estiver depurando um
aplicativo paralelo. Os valores de variveis que voc v nas DataTips sero baseados no
processo ativo atual definido na janela Processes.
Como: Depurar Aplicativos de 64 bits:
Este tpico se aplica a:
Edio do Visual Studio Visual Basic C# C++ J#
Express Sim Sim Sim No
Standard Sim Sim Sim No
Pro / Team Sim Sim Sim No
Voc pode depurar um aplicativo de 64 bits que esteja executando no computador local ou em um
computador remoto com oVisual Studio 2005.
Visual C# Consolidado 539
Se voc estiver depurando localmente, o Visual Studio 2005 executado no WOW64, o emulador
de 32 bits x86 que permite que que aplicativos de 32 bits do Windows sejam executados no
Windows 64-Bits.A depurao local no WOW64 suportada somente no x64 .
Se voc estiver depurando remotamente, o Visual Studio 2005 pode ser executado no WOW64 ou
em uma mquina de 32 bits. Voc pode depurar tanto aplicativos do IA64 e do x64, bem como
aplicativos de 32 bits em execuo no modo WOW do x64 ou em plataformas de 32 bits.
Para depurar um aplicativo de 64 bits que esteja executando em um computador remoto, voc
precisar instalar o depurador remoto de 64 bits no computador remoto. O depurador remoto de
64 bits est disponvel no ltimo disco do seu conjunto instalao do Visual Studio 2005.
Se voc depurar um aplicativo de 64 bits na mquina local, o Visual Studio 2005 usa depurao
remota para realizar a conexo entre o WOW64 e o aplicativo de 64 bits na mesma mquina. Para
obter mais informaes, consulte Depurao na uma plataforma de 64 bits. Os componentes de
depurao remota sero instalados automaticamente quando voc instalar o Visual Studio 2005
no computador.
Em ambos os casos, a instalao da depurao remota em uma mquina de 64 bits instala as
verses de 32 bits e 64 bits do Monitor de Depurao Remota. Para depurar um aplicativo de 64
bits, use a verso correta, que Remote Debugger (x64) no menu Start.
A depurao do cdigo de 64 bits quase idntica a depurao do cdigo de 32-bits. No entanto,
existem duas diferenas:
Voc no pode depurar no modo misto, realizar chamadas de cdigo nativo para cdigo
gerenciado, ou vice-versa, no cdigo de 64 bits.
Para iniciar o Monitor de Depurao Remota de 64 bits
1. Clique em Start, aponte para All Programs, aponte para Microsoft Visual Studio 2005,
aponte para Visual Studio Tools, e clique em Remote Debugger (x64) ou Remote
Debugger (IA64)
Ou-
No Command Prompt do Windows, execute o comando Install path\Microsoft Visual Studio
8\Common7\IDE\Remote Debugger\x64 ou o comando Install path\Microsoft Visual Studio
8\Common7\IDE\Remote Debugger\ia64.
2. Configure a Remote Debugging Monitor para depurao remota
o
Para configurar a depurao remota no Windows Authentication mode, consulte
Como configurar modo Autenticao do Windows:.
o
Para configurar a depurao remota, somente para cdigo nativo, no No
Authentication mode, consulte Como: Configurar " sem autenticao " modo. O modo No
Authentication mode permite uma depurao mais rpida em redes lentas, mas ele no
seguro e deve ser usado somente em redes seguras.
Depurao na uma plataforma de 64 bits
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Visual C# Consolidado 540
Express Sim Sim Sim No
Standard Sim Sim Sim No
Pro/Team Sim Sim Sim No
O Visual Studio 2005 pode ser executado em uma plataforma de 64 bits x64 no WOW64, que o
emulador de 32 bits x86 que permite que aplicativos do Windows de 32 bits sejam executados no
Windows de 64 bits. O Visual Studio 2005 no d suporte a IA64 WOW. Voc pode depurar um
aplicativo IA64, mas deve faz-lo remotamente. (Consulte Como: Depurar Aplicativos de 64 bits:.)
Quando voc executa o Visual Studio 2005 no modo WOW para depurar um aplicativo de 64 bits
na mesma mquina, o Visual Studio 2005 parece fazer depurao local normal. No entanto, o
Visual Studio 2005 est realmente usando o mecanismo de depurao remota para conectar-se
do WOW para o aplicativo de 64 bits. Portanto, todas as consideraes que se aplicam
depurao remota tambm se aplicam depurao local em uma plataforma de 64 bits. Isso
significa que a janela do console externo no funciona em uma plataforma de 64 bits.
Para obter mais informaes sobre como depurar aplicativos de 64 bits, consulte Como depurar
um despejo de aplicativos de 64 bits:.
Depurao e o processo Hosting
O processo de hospedagem do Visual Studio melhora o desempenho do depurador e permite
novos recursos do depurador, como depurao de confiana parcial e avaliao de expresses
em tempo de design. Voc pode desativar o processo de hospedagem, caso voc precise. Para
obter mais informaes, consulte Como: Desativar o processo de hospedagem. As sees a
seguir descrevem algumas diferenas entre a depurao com e sem o processo de hospedagem.
Depurao de Confiana Parcial e Segurana de Click-Once
A depurao de confiana parcial requer o processo de hospedagem. Se voc desativar o
processo de hospedagem, a depurao de confiana parcial no ir funcionar mesmo que esteja
ativada na pgina Security de Project Properties. Para obter mais informaes, consulte Como:
Desativar o processo de hospedagem e Como: Depurar um aplicativo de confiana parcial.
Avaliao de Expresses em Tempo de Design
As expresses em tempo de design sempre utilizam o processo de hospedagem. Desativar o
processo de hospedagem na Project Properties desativa a avaliao de expresses em tempo
de design para projetos da Class Library. Para outros tipos de projeto, a avaliao de expresses
em tempo de design no desativada. Em vez disso, o Visual Studio inicia o executvel real e
utiliza a avaliao em tempo de design sem o processo de hospedagem. Essa diferena pode
produzir resultados diferentes.
Diferenas no AppDomain.CurrentDomain.FriendlyName
AppDomain.CurrentDomain.FriendlyName retorna resultados diferentes, dependendo se o processo
de hospedagem estiver ativado ou no. Se voc chamar AppDomain.CurrentDomain.FriendlyName
com o processo de hospedagem ativado, ele retorna app_name.vhost.exe. Se voc o chamar com
o processo de hospedagem desativado, ser retornado app_name.exe.
Visual C# Consolidado 541
Diferenas no Assembly.GetCallingAssembly().FullName
Assembly.GetCallingAssembly().FullName retorna resultados diferentes, dependendo se o processo
de hospedagem estiver ativado ou no. Se voc chamar Assembly.GetCallingAssembly().FullName
com o processo de hospedagem ativado, ele retorna mscorlib. Se voc chamar
Assembly.GetCallingAssembly().FullName com o processo de hospedagem desativado, ser
retornado o nome do aplicativo.
Como: Especificar uma verso do .NET Framework para depurao
O depurador Visual Studio 2005 oferece suporte a depurao de verses mais antigas do .NET
Framework, bem como a verso 2.0 atual. Se voc iniciar um aplicativo no Visual Studio, o
depurador sempre poder identificar a verso correta do .NET Framework para o aplicativo que
voc est depurando. Se o aplicativo j est sendo executado e voc usar Attach to, o depurador
pode no ser capaz de identificar uma verso mais antiga do .NET Framework. Se isso acontecer,
voc receber uma mensagem de erro que diz,
O depurador fez uma suposio incorreta sobre a verso do Microsoft .NET Framework que seu
aplicativo estar usando.
Nesses casos raros, voc pode definir uma chave do registro para indicar ao depurador a verso a
ser usada.
Para especificar uma verso do .NET Framework para depurao
1. Examine a pasta Windows\Microsoft .NET\Framework para localizar as verses do .NET
Framework instaladas no computador. O aspecto dos nmeros de verso algo assim:
V1.1.4322
Identifique o nmero da verso correta e tome nota dele.
2. Iniciar o Registry Editor (Regedit).
3. Na Registry Editor, abra a pasta HKEY_LOCAL_MACHINE.
4. Navegue at:
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\AD7Metrics\Engine\{449EC4
CC-30D2-4032-9256-EE18EB41B62B
Se a chave no existir, clique com boto direito mouse
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\AD7Metrics\Engine, e clique
em New Key no menu de atalho. Nomeie a nova chave {449EC4CC-30D2-4032-9256-
EE18EB41B62B}.
5. Aps navegar at {449EC4CC-30D2-4032-9256-EE18EB41B62B}, procure na coluna
Name, e encontre a chave CLRVersionForDebugging.
1. Se a chave no existir, clique com o boto direito do mouse em {449EC4CC-30D2-
4032-9256-EE18EB41B62B}, e clique New String Value no menu de atalho. Ento
clique o boto direito do mouse no novo valor, clique Rename, e digite
CLRVersionForDebugging.
6. Clique duas vezes em CLRVersionForDebugging.
7. Na caixa Edit String, digite o nmero de verso do .NET Framework na caixa Value. Por
exemplo: V1.1.4322
8. Clique em OK.
9. Feche o Registry Editor.
Se voc ainda receber uma mensagem de erro quando voc iniciar a depurao, verifique se
voc inseriu o nmero da verso corretamente no registro. Tambm verifique se voc est
Visual C# Consolidado 542
usando uma verso do .NET Framework suportada pelo Visual Studio. O depurador
compatvel com o .NET Framework verso 2.0 e verses anteriores, mas pode no ser
diretamente compatvel com verses futuras.
Explicao detalhada sobre o depurador
O depurador do Visual Studio uma ferramenta poderosa que permite a voc observar o
comportamento em tempo de execuo do seu programa e localizar erros de lgica. O depurador
funciona com todas as linguagens de programao do Visual Studio e suas bibliotecas
associadas. Com o depurador voc pode interromper, ou suspender, a execuo do seu programa
para examinar seu cdigo, avaliar e editar variveis no seu programa, exibir registros, consultar as
instrues criadas no seu cdigo fonte, e exibir espao de memria usado pelo seu aplicativo.
Com a Edio e Continuao, voc pode fazer alteraes em seu cdigo durante a depurao, e
depois continuar a execuo.
O depurador do Visual Studio fornece um menu Debug para acesso a ferramentas do depurador.
As janelas e caixas de dilogo do depurador exibem informaes sobre o programa e permitem a
voc inserir informaes adicionais. Voc pode obter ajuda sobre qualquer janela ou caixa de
dilogo pressionando F1.
Depurando o cdigo gerenciado
Esta seo aborda problemas comuns de depurao e tcnicas para aplicativos gerenciados ou
aplicativos escritos em linguagens que visam Common Language Runtime, como Visual Basic,
C#, J#, e C++. As tcnicas descritas aqui so tcnicas de alto nvel. Para obter mais informaes,
consulte Viso geral sobre Common Language Runtime ou Usando o depurador.
Diagnstico de mensagens na janela de sada
Voc pode escrever mensagens em tempo de execuo para a janela Output usando a classe
Debug ou a classe de Trace, que fazem parte da biblioteca de classes System.Diagnostics. Use a
classe Debug se voc quiser mensagens apenas na verso de depurao do seu programa. Use
a classe Trace se voc quiser mensagens nas verses de depurao e de publicao.
Mtodos de sada
As classes Trace e Debug fornecem os seguintes mtodos de sada:
Vrios mtodos Write, que fornecem sada de informaes sem interromper a execuo.
Esses mtodos substituem o mtodo Debug.Print usado nas verses anteriores do Visual
Basic.
Os mtodos System.Diagnostics.Debug.Assert(System.Boolean) e
System.Diagnostics.Trace.Assert(System.Boolean) que interrompem a execuo e fornecem
sada de informaes se uma condio especificada falhar. Por padro, o mtodo Assert exibe
as informaes em uma caixa de dilogo. Para obter mais informaes, consulte Assertivas em
cdigo gerenciado.
Os mtodos System.Diagnostics.Debug.Fail(System.String) e
System.Diagnostics.Trace.Fail(System.String) os quais sempre interrompem a execuo e
fornecem sada de informaes. Por padro, os mtodos Fail exibem as informaes em uma
caixa de dilogo.
Alm de informaes partindo do seu aplicativo, a janela Output pode exibir informaes sobre:
Se voc j tiver uma soluo aberta, feche-a. (No menu File, selecione Close Solution.)
Criar um novo formulrio do Windows
Em seguida, voc criar um novo formulrio do Windows.
Para criar o formulrio do Windows para essa explicao passo a passo
1. No menu File, escolha New e clique Project.
A caixa de dilogo New Project ser exibida.
2. No painel tipos de projeto, abra o n Visual C#Visual Basic, Visual J# ou Visual C++, em
seguida,
1. Para Visual Basic, Visual C# ou Visual J#, selecione a Windows., em seguida,
marque Windows Application no painel Templates.
2. Para Visual C++, selecione o CLR.
3. No painel Templates, selecione Windows Application.
4. Na caixa Name, d ao projeto um nome exclusivo (por exemplo,
Walkthrough_SimpleDebug).
5. Clique em OK.
Visual Studio cria um novo projeto e exibe um novo formulrio no Windows Forms .
PaDesignerra obter mais informaes, consulte Windows Forms Designer.
6. No menu View, selecione Toolbox.
Abre a caixa de ferramentas. Para obter mais informaes, consulte Caixa de ferramentas.
7. Na caixa de ferramentas, clique sobre o controle Button e arraste o controle para a
superfcie de projeto de formulrio. Solte o boto no formulrio.
8. Na caixa de ferramentas, clique sobre o controle TextBox e arraste o controle para a
superfcie de projeto de formulrio. Solte a TextBox no formulrio.
9. Na superfcie de projeto de formulrio, clique duas vezes no boto.
Isso leva voc para a pgina de cdigo. O cursor deve estar no button1_Click.
10. Na funo button1_Click., adicione o seguinte cdigo:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!"; // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
11. No menu Build, selecione Build Solution.
O projeto deve criar-se com erros.
Depurar seu formulrio
Visual C# Consolidado 548
Agora, voc est pronto para iniciar a depurao.
Para depurar o formulrio do Windows criado para essa explicao passo a passo
1. Na janela de origem, clique na margem esquerda na mesma linha quo o texto foi
adicionado:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!"; // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
Um ponto vermelho aparece e o texto na linha realado em vermelho. O ponto vermelho
representa um ponto de interrupo. Para obter mais informaes, consulte Pontos de
interrupo. Quando voc executa o aplicativo sob o depurador, o depurador interromper a
execuo nesse local quando o cdigo controntado. Voc pode exibir o estado do seu
aplicativo e depur-lo.
2. A partir do menu Debug, escolha Start.
O formulrio do Windows comea a ser executado.
3. No formulrio do Windows, clique no boto que voc adicionou.
No Visual Studio, isso leva voc para a linha onde voc define o ponto de interrupo na
pgina de cdigo. Esta linha deve ser realada em amarelo. Agora voc pode exibir as
variveis no seu aplicativo e controlar sua execuo. Agora o aplicativo foi interrompido
quando executava, aguardando uma ao de voc.
Observao
Se voc tiver definido a Active Solution Configuration como Release, a execuo no ser
paralisada no ponto de interrupo. Isso simula o comportamento de um programa na verso real.
O crculo que marca o ponto de interrupo ir conter um ponto de interrogao branco. Se
necessrio, use a caixa de dilogo Configuration Manager para alterar essa configurao
novamente para Debug.
4. No menu Debug, escolha Windows, em seguida Watch, e clique em Watch1.
5. Na janela Watch1, clique em um linha em branco. Na coluna Name, digite textBox1.Text (se
voc estiver usando Visual Basic, Visual C#, ou J#) ou textBox1->Text (se voc estiver
usando C++), pressione ENTER.
A janela Watch1 mostra o valor dessa varivel entre aspas como:
""
6. A partir do Menu Debug, escolha Step Into.
O valor de textBox1.Text muda na janela Watch1 para:
Button was clicked!
7. A partir do Menu Debug, escolha Continue para continuar a depurao do programa.
8. No formulrio do Windows, clique no boto novamente.
Visual Studio quebra a execuo novamente.
9. Clique no ponto vermelho que representa o ponto de interrupo.
Isso remove o ponto de interrupo do seu cdigo.
10. A partir do Menu Debug, escolha Stop Debugging.
Anexar ao seu formulrio para depurao
Visual C# Consolidado 549
No Visual Studio 2005, voc pode anexar o depurador a um processo em execuo. Se voc
estiver usando um Edition Express, no h suporte para este recurso.
Para anexar ao formulrio do Windows para depurao
1. No projeto criado acima, clique Na margem esquerda para definir mais uma vez um ponto
de interrupo na linha que voc adicionou:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!" // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
2. No menu Debug, selecione Start Without Debugging.
O formulrio do Windows inicia executando sob Windows, como se voc tivesse clicado
duas vezes seu executvel. O depurador no est anexado.
3. No menu Debug, selecione Attach to Process. (Este comando tambm est disponvel a
partir do menuTools.)
A caixa de dilogo Attach to Process ser exibida.
4. No painel Available Processes, localize o nome do processo
(Walkthrough_SimpleDebug.exe) na coluna Process e clique nele.
5. Clique no boto Attach.
6. No seu formulrio do Windows, clique em um e somente um boto.
O depurador quebra a execuo do formulrio do Windows no ponto de interrupo.
Depurar o mtodo OnStart como:
Voc pode depurar o construtor do Windows Service, depurando em uma instncia do servio.
Voc pode depurar o prprio Windows Service iniciando o servio e anexando o depurador ao
processo do servio. No entanto, para depurar o mtodo OnStart de um Windows Service, voc
deve adicionar algumas linhas de cdigo para simular o servio. Para obter mais informaes,
consulte System.ServiceProcess.ServiceBase.OnStart(System.String[]).
Para depurar um problema no mtodo OnStart
Crie uma simulao do servio (um aplicativo de console, por exemplo) para determinar
onde o problema est.
Por exemplo, suponha que voc tenha um Visual C# Windows Service parecido com este:
public class ManagedWindowsService : System.ServiceProcess.ServiceBase { // // designer and user
generated methods and properties // public static int main(String[] args) { ServiceBase.Run( new
ManagedWindowsService() ); } }
Adicione as linhas de cdigo a seguir para depurar o mtodo OnStart:
public static int main(String[] args) { (new ManagedWindowsService()).OnStart(); // allows easy
debugging of OnStart() ServiceBase.Run( new ManagedWindowsService() ); }
O servio no poder executar nesse modo, mas voc pode depurar o mtodo OnStart e
verificar se ele est se comportando conforme esperado.
Para obter mais informaes, consulte Depurando Aplicativos do Windows Service.
Como: Depurar Aplicativos de Modo Misto
Visual C# Consolidado 550
Um aplicativo de modo misto qualquer aplicativo que combine cdigo nativo (C++) com cdigo
gerenciado (como Visual Basic, Visual C# ou C++ que executado no Common Language
Runtime). Depurao de aplicativos de modo misto amplamente transparente no Visual Studio;
ela no muito diferente da depurao de um aplicativo de modo nico. H algumas
consideraes especiais, entretanto.
Observao
Visual Studio no d suporte de depurao de modo misto no Windows 95, Windows 98 ou
Windows Millennium Edition.
Avaliao da Propriedade em Aplicativos de Modo Misto
Em um aplicativo de modo misto, a avaliao das propriedades pelo depurador uma operao
cara. Como um resultado, operaes de depurao, como uma etapa poder parecer lenta. Para
obter mais informaes, consulte Stepping. Se voc tiver um desempenho ruim em depurao de
modo misto, convm desativar a avaliao da propriedade nas janelas do depurador.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo da sua configurao ativa ou edio. Para alterar as configuraes, escolha Import
and Export Settings no menu Tools. Para obter mais informaes, consulte Configuraes
Visual Studio.
Para desativar a avaliao da propriedade
1. A partir do menu Tools, escolha Options.
2. Na caixa Options de dilogo, abra a pasta Debugging e selecione a categoria General.
3. Desmarque a caixa de seleo Enable property evaluation and other implicit function
calls.
Como pilha de chamadas nativas e pilha de chamadas gerenciadas diferem, o depurador no
pode sempre fornecer pilha de chamadas completa para cdigo misto. Quando cdigo nativo
chama cdigo gerenciado, voc pode observar algumas discrepncias. Para obter detalhes,
consulte Cdigo Misto e Informaes Perdidas na Janela de Pilha de Chamada.
ERRO: depurao Isn't possveis como um depurador do ncleo estiver ativada no sistema
Quando estiver depurando cdigo gerenciado, voc pode receber a seguinte mensagem de erro:
Debugging isn't possible because a kernel debugger is enabled on the system
Essa mensagem ocorre quando voc tenta depurar cdigo gerenciado em um sistema executando
Windows NT, Windows 2000 ou Windows XP que tiver sido iniciado no modo de depurao.
Soluo
Para corrigir esse problema
Locais variveis, que podem ser removido pelo otimizador ou movido para o depurador
no compreende locais.
Posies dentro uma funo, que so alteradas quando o otimizador mescla blocos de
cdigo.
Funo nomes de quadros no pilha de chamadas, que podem ser incorreto se o otimizador
mescla duas funes.
Quase sempre os quadros que voc v na pilha de chamadas so direito, no entanto, supondo
que voc tenha smbolos para todos os quadros. Os quadros no pilha de chamadas podero ser
incorreto se voc tiver corrupo de pilha, se voc tiver escrito em linguagem conjunto, funes ou
se no houver quadros sistema operacional sem correspondncia smbolos no pilha de
chamadas.
Variveis globais e esttico sempre so exibidas corretamente. Portanto, layout estrutura. Se
voc tiver um ponteiro para uma estrutura e o valor do ponteiro esteja correto, cada varivel de
membro da estrutura mostrar o valor correto.
Devido a essas limitaes, voc deve fazer a depurao usando uma verso do seu programa
unoptimized se possvel. Por padro, a otimizao desativado na configurao de depurao de
um programa Visual C++ e ativado na configurao Release.
s vezes, entretanto, um erro pode aparecem somente em uma verso de um programa
otimizado. Nesse caso, voc deve depurar o cdigo otimizado.
Para ativar otimizao de um Debug criar configurao
1. Quando voc cria um novo projeto, selecionar o Win32 Debug destino. Use o Win32
Debug destino at que seu programa estiver totalmente depurado e voc estiver pronto para
criar um Win32 Release destino. O compilador no No otimizar o Win32 Debug destino.
2. Selecione o projeto no Solution Explorer.
3. No menu View, clique em Property Pages.
4. Na caixa Property Pages de dilogo, certifique-se Debug estar marcada na caixa
Configuration de listagem drop-down.
5. No modo de exibio Pasta no lado esquerdo, selecione a C/C pasta.
6. Sob a pasta C++, selecione Optimization.
Visual C# Consolidado 553
7. Na lista Propriedades direita, localize Optimization. A configurao lado para ele
provavelmente diz Disabled (/Od). Escolha uma das outras opes (Minimum Size (/O1),
Maximum Speed (/O2) ou Custom)., Full Optimization (/Ox)
8. Se voc escolheu a Custom opo para Optimization, agora voc pode definir opes
para qualquer uma das outras propriedades mostradas na lista Propriedades
Ao depurar o cdigo otimizado, aspecto na Disassembly janela para ver quais instrues
realmente criado e executado. Ao definir pontos de interrupo, voc precisar estar ciente que o
ponto de interrupo poder mover junto com uma instruo. Por exemplo, considere o cdigo a
seguir:
for (x=0; x<10; x++)
Suponha que voc definir um ponto de interrupo nesta linha. Voc pode esperar o ponto de
interrupo para ser atingido 10 vezes, mas se o cdigo otimizado, ponto de interrupo
somente acertado uma vez. Que porque a primeira instruo define o valor da x como 0. O
compilador reconhece que isso s tem que ser feito uma vez e move-fora do loop. Move o ponto
de interrupo a ele.
As instrues que comparar e incrementar x permanecer dentro do loop. Quando voc exibe a
Disassembly janela automaticamente definida como instruo para maior controle, que til
quando depurao atravs de cdigo otimizado. o Unidade etapa
DebugBreak e __debugbreak
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Express No No Nativo No
Padro No No Nativo No
Pro / Team No No Nativo No
Voc pode chamar a DebugBreak funo Win32 ou __debugbreak. intrnsecas em qualquer ponto
no seu cdigo e DebugBreak
__debugbreak ter o mesmo efeito que configurar um ponto de
interrupo nesse local.
Porque DebugBreak uma chamada para uma funo do sistema, depurao do sistema
smbolos devem ser instalados para garantir a informao correta pilha de chamadas exibida
aps quebra. Caso contrrio, as informaes exibidas pelo depurador pilha de chamadas podem
estar fora por um quadro. No se voc usar __debugbreak, smbolos so necessrios.
Declaraes
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Visual C# Consolidado 554
Express Edition No No Nativo No
Standard Edition No No Nativo No
Pro / Team Edition No No Nativo No
Uma instruo de declarao Especifica uma condio que voc espera para manter verdadeira
em algum momento especfico em seu programa. Se essa condio no tem verdadeira, a
declarao falhar, execuo de seu programa for interrompida, aparece. e Caixa de dilogo Falha
de declarao
Visual C++ oferece suporte instrues de declarao com base nas seguintes construes:
Capturar erros de lgica. Para obter mais informaes, consulte Erro Catching de lgica.
Verificar resultados de uma operao. Para obter mais informaes, consulte Resultado de
verificao.
Teste as condies de erro que devem ter sido tratadas. Para obter mais informaes,
consulte Teste condio de erro.
MFC e Assertions C Run-Time Library
Quando o depurador pra devido a uma declarao Biblioteca de tempo de execuo MFC ou C,
ele navega at o ponto no arquivo de origem onde a declarao ocorreu (se a fonte estiver
disponvel). A mensagem de declarao aparece na caixa de dilogo, bem como Janela de sada
o Assertion Failed. Voc pode copiar a mensagem de declarao da janela Output para uma
janela de texto se voc desejar salv-lo para referncia futura. A Output janela pode conter outras
mensagens de erro, bem. Examinar essas mensagens com cuidado, pois fornecem pistas para a
causa da falha de declarao.
Atravs do uso liberal de declaraes em seu cdigo, voc pode capturar muitos erros durante o
desenvolvimento. Uma boa regra para escrever uma declarao para cada suposio voc
fazer. Se voc assumir que um argumento no NULL, por exemplo, usar uma instruo de
declarao para verificar essa suposio.
_DEBUG
Instrues de declarao compilar somente quando _DEBUG for definida. Quando _DEBUG no
for definido, o compilador trata declaraes como instrues nulas. Assim, instrues de
declarao ter zero sobrecarga no seu programa verso final; voc pode us-los liberally em seu
cdigo, sem afetar o desempenho da sua verso release e sem que seja necessrio usar #ifdef
as diretivas.
Efeitos lado do uso Assertions
Visual C# Consolidado 555
Quando voc adicionar declaraes a seu cdigo, certifique-se que as declaraes no tem
efeitos colaterais. Por exemplo, considere a declarao a seguir:
ASSERT(nM++ > 0); // Don't do this!
Porque a ASSERT expresso no avaliada com a verso release do seu programa, nM ter que
valores diferentes nas verses Debug e Release. Em MFC, voc pode usar a VERIFY macro em
vez de ASSERT. Avaliar VERIFY a expresso mas no verifica o resultado na verso Release.
Tenha cuidado usando chamadas de funo em instrues de declarao, especialmente como
avaliar uma funo pode ter efeitos colaterais inesperados.
ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects VERIFY ( myFnctn(0)==1 ) // safe
Chama VERIFY
myFnctn em verses Debug e Release, portanto aceitvel para usar. Voc ainda
ter a sobrecarga de um chamada de funo desnecessria na verso Release, entretanto.
Deteco vazamento de memria e isolamento
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Express No No Nativo No
Padro No No Nativo No
Pro / Team No No Nativo No
A capacidade de dinamicamente alocar e Desalocar memria um dos recursos de programao
C/C, mais seguro mas o maior nvel tambm pode ser a deficincia maior. Isso certamente
verdadeiro de aplicativos C/C, onde problemas tratamento memria esto entre os erros mais
comuns.
Uma dos erros mais sutil e difceis de detectar o vazamento de memria a falha para
Desalocar memria que foi anteriormente alocada corretamente. Um vazamento de memria
pequeno que ocorre somente uma vez no pode ser percebido, mas programas que leak grandes
quantidades de memria, ou leak progressivamente, podem exibir sintomas, variando entre
desempenho deficiente (e gradualmente decrescente) e em execuo fora de memria totalmente.
Worse, um programa leaking pode usar Backup para que ele faz com outro programa a falhar,
quantidade de memria deixar o usurio com nenhum pista para onde o problema est realmente.
Alm disso, vazamentos de memria mesmo inofensivo podem ser symptomatic de outros
problemas.
Felizmente, as depurador Visual Studio e C bibliotecas (CRT) de tempo de execuo fornecem
voc com eficaz meio para detectando e identificando vazamentos de memria. Para entender
como detectar memria leaks usando as instalaes de depurao CRT, leia os seguintes tpicos:
Como pode eu Debug Violations Access quando executando meu autnomo do programa?
Como pode usar Windows Debugger durante depurao um programa primeiro plano?
Se Halted na MFC, como posso obter voltar para a funo que chamado MFC?
COM e depurando ActiveX
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Express Edition No No Nativo No
Standard Edition No No Nativo No
Pro / Team Edition No No Nativo No
Esta seo fornece dicas sobre depurao aplicativos COM e controles ActiveX.
Como: Depurar DLLs
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J#
Express No No Nativo No
Padro No No Nativo No
Pro / Team No No Nativo No
Visual C# Consolidado 561
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings (Importar e Exportar Configuraes) no menu Tools
(Ferramentas). Para obter mais informaes, consulte Configuraes do Visual Studio.
Quando voc depurar uma DLL, voc pode iniciar a depurao de:
Usando /FX, voc pode criar um arquivo de origem mesclado que contm cdigo original e
injected.
A Disassembly janela mostra instrues idioma conjunto-que correspondem ao cdigo-fonte e o
cdigo injetado pelos atributos. Alm disso, a Disassembly janela pode mostrar a anotao
cdigo fonte-.
Para ativar anotao fonte
Clique com o boto direito do mouse na Disassembly janela, e escolha Show Source
Code No menu de atalho.
Se souber o local de um atributo em uma janela de origem, voc pode usar o menu de atalho
para localizar o cdigo injected na janela Disassembly
Para exibir cdigo injected
1. O depurador deve estar no modo de interrupo.
2. Em um janela de cdigo de origem, coloque o cursor na frente do atributo cujo cdigo
injected voc deseja exibir.
3. Clique com o boto direito do mouse, e selecione Go To Disassembly a partir do menu de
atalho
Caso o local de atributo esteja prximo o ponto de execuo atual, voc pode selecionar a
Disassembly janela a partir do Debug menu
Para exibir a cdigo de desmontagem no ponto de execuo atual
1. O depurador deve estar no modo de interrupo.
2. No menu Debug, escolha Windows, e clique em Disassembly.
Depurar aplicativos da Web
Esta seo descreve tcnicas comuns de depurao para aplicativos da Web. Para obter mais
informaes, consulte Explicao detalhada sobre o depurador.
Nesta seo
Depurar aplicativos da Web ASP.NET
Visual C# Consolidado 563
Fornece instrues e requisitos sobre depurao de um aplicativo ASP.NET no momento
de desenvolvimento ou quando o aplicativo j estiver implantado e em execuo.
Depurao aplicativos Web ATL Server
Fornece links de informaes sobre a depurao de aplicativos da Web ou de servios
XML da Web criados com o ATL Server.
Depurando aplicativos da Web: Erros e soluo de problemas
Lista erros que voc pode encontrar durante a depurao de aplicativos da Web e sugere
correes.
Sees relacionadas
Preparao da Depurao: Web Services XML (C++)
Descreve as configuraes e comportamentos padro dos projetos de Servios da Web do
ASP.NET e das chamadas de depurao para servios XML da Web a partir de aplicativos
do cliente.
Preparao para depurao : Aplicativos ASP.NET da Web
Descreve as configuraes e comportamentos padro dos projetos de Servios da Web do
ASP.NET etapas para a depurao, e de como alterar a configurao de depurao
padro.
Projetos Servio da Web XML depurao preparao:
Descreve as configuraes e comportamentos padro dos projetos de Servios da Web do
ASP.NET , ativando a depurao do ASP.NET, e de como alterar a configurao de
depurao padro.
Depurao no Visual Studio
Fornece links para as sees maiores da documentao de depurao. Informaes
incluem : novidades do depurador, definies e preparaes , pontos de interrupo ,
tratamento de excees, editar e continuar, cdigo gerenciado de depurao, depurao
de projetos Visual C++ , depurando COM e ActiveX, depurando DLLs, depurando SQL, e
as referncias a interfaces de usurios.
Como depurar aplicativos da Web em um servidor remoto:
Descreve requisitos de instalao para depurao remota de aplicativos da Web do
ASP.NET.
Depurao SQL
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Visual C# Consolidado 564
Padro No No No No No
Pro / Team Sim Sim Sim Sim Sim
Com o depurador Visual Studio 2005, voc pode depurar conjuntos de mdulos do commom
language runtime (CLR) gerenciados executando executando dentro do processo SQL Server
2005 em grande parte da mesma maneira que voc tem depurado stored procedures, funes,
disparadores e outros tipos de objetos de banco de dados.
Para obter mais informaes, consulte O que h de novo no depurador Visual Studio 2005.
Nesta seo
Limitaes depurao SQL
Descreve restries e limitaes sobre o uso dos recursos de depurao SQL.
Configurando O SQL Debugging
Lista requisitos de software para depurao SQL, para o servidor e estao de trabalho,
instrues para ativar depurao SQL, instalar, configurar e solucionar problemas de
instalao.
Depurao objetos de banco de dados SQL
Fornece instrues detalhadas e exemplos para cada tipo de objeto de banco de dados
SQL Server que pode ser depurado.
Depurao de aplicao multi-camada de banco de dados
Descreve como depurar aplicativos cujos componentes esto localizados em vrias
mquinas.
Sees relacionadas
Viso geral sobre Ferramentas Visual Database
Descreve e fornece links para tpicos em Microsoft Visual Database Tools e conexes de
banco de dados e referncias.
Criando objetos SQL Server 2005 em Cdigo Gerenciado
Descreve como criar objetos de banco de dados SQL CLR em Visual Studio usando o tipo
do projeto SQL Server.
Depurao referncia Interface de usurio
Voc pode encontrar as seguintes caixas de dilogo medida que voc depura seu aplicativo.
Voc pode automatizar vrios recursos do depurador, usando o modelo de extensibilidade do
Visual Studio. Para obter mais informaes, consulte o Visual Studio Debugging SDK.
Debug Source Files, Common Properties, caixa de dilogo Solution Property Pages
A primeira etapa para instrumenting um aplicativo com o rastreamento para criar uma
fonte de rastreamento. Em grandes projetos com vrios componentes, voc pode criar uma
fonte de rastreamento separada para cada componente. A prtica recomendada consiste em
usar o nome do aplicativo para o nome da fonte de rastreamento. Isso facilitar para manter os
rastreamentos diferentes separadas. O cdigo a seguir cria uma nova fonte de rastreamento
(mySource). (Activity1 e chama um mtodo que rastreia eventos) As mensagens de rastreamento
so gravadas pelo ouvinte de rastreamento padro.
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class
Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void
Main(string[] args) { Activity1(); mySource.Close(); return; } static void Activity1() {
mySource.TraceEvent(TraceEventType.Error, 1, "Error message.");
mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } } }
Para criar e inicializar escutas de rastreamento e filtros
As pginas de propriedades
A linha de comando
indica Never que o membro no exibido na janela de dados. Por exemplo, usar esse
valor para um campo remove o campo de hierarquia; o campo no exibido quando voc
expande o tipo delimitador, clicando no sinal de mais (+) para a instncia Tipo. na
DebuggerBrowsableAttribute
indica Collapsed que o membro exibido mas no expandidos por padro. Esse o
comportamento padro.
indica RootHidden que o membro prprio no exibido, mas seus objetos constituintes
sero exibidos se ele uma matriz ou coleo.
Observao
O DebuggerBrowsableAttribute no oferece suporte ao Visual Basic no .NET Framework verso
2.0.
Do DebuggerBrowsableAttribute o exemplo de cdigo a seguir mostra o uso de para impedir
que a propriedade aps ele seja exibido na janela de depurao para a classe.
[DebuggerBrowsable(DebuggerBrowsableState.Never)] public static string y = "Test String";
Usando o DebuggerTypeProxy
Use o DebuggerTypeProxyAttribute atributo quando voc precisa para significativamente e
fundamentalmente altera o modo de exibio de depurao de um tipo, mas no alterar o tipo
prprio. O DebuggerTypeProxyAttribute atributo usado para especificar um proxy de exibio
para um tipo, permitindo que um desenvolvedor para adaptar o modo de exibio para o tipo.
Esse atributo, como o DebuggerDisplayAttribute, pode ser usado no nvel do conjunto, no qual a
Target propriedade caso especifica o tipo para que o proxy ser usado. O uso recomendado que
este atributo especifica um tipo aninhado particular que ocorre dentro do tipo ao qual o atributo
aplicado. Um avaliador expresso que oferece suporte digite visualizadores verifica para este
atributo quando um tipo exibido. Se o atributo for encontrado, o avaliador expresso substituir o
tipo de proxy para o tipo do atributo aplicado a exibio.
Quando a janela varivel depurador exibe somente os membros do tipo proxy pblicos. estiver
presente, o DebuggerTypeProxyAttribute Membros particulares no so exibidos. O
comportamento da janela de dados no alterado por modos de exibio avanada atributo-.
Para evitar criminais de desempenho desnecessrios, atributos do proxy de exibio no sero
processados at que o objeto estiver expandido, atravs o usurio clica em sinal de mais (+) ao
lado do tipo em uma janela de dados, ou atravs do aplicativo do atributo
DebuggerBrowsableAttribute. Portanto, recomendvel que nenhum atributo seja aplicada ao
tipo de exibio. Atributos podem e devem ser aplicadas dentro do corpo do tipo de exibio.
Do DebuggerTypeProxyAttribute o exemplo de cdigo a seguir mostra o uso de para especificar
um tipo a ser usado como um proxy de exibio depurador.
[DebuggerTypeProxy(typeof(HashtableDebugView))] class MyHashtable : Hashtable { private const string
TestString = "This should not appear in the debug window."; internal class HashtableDebugView { private
Hashtable hashtable; public const string TestStringProxy = "This should appear in the debug window."; //
The constructor for the type proxy class must have a // constructor that takes the target type as a parameter.
public HashtableDebugView(Hashtable hashtable) { this.hashtable = hashtable; } } }
Visual C# Consolidado 575
Exemplo
Descrio
O exemplo de cdigo a seguir pode ser exibido em Visual Studio 2005 Para ver os resultados da
aplicao o DebuggerDisplayAttribute, DebuggerBrowsableAttribute., e
DebuggerTypeProxyAttribute atributos
Cdigo
C#
using System; using System.Collections; using System.Diagnostics; using System.Reflection; //[assembly:
DebuggerTypeProxy("MyHashtable.HashtableDebugView",TargetTypeName="MyHashtable")] class
DebugViewTest { // The following constant will appear in the debug window for DebugViewTest. const string
TabString = " "; // The following DebuggerBrowsableAttribute prevents the property following it // from
appearing in the debug window for the class. [DebuggerBrowsable(DebuggerBrowsableState.Never)] public
static string y = "Test String"; static void Main(string[] args) { MyHashtable myHashTable = new
MyHashtable(); myHashTable.Add("one", 1); myHashTable.Add("two", 2);
Console.WriteLine(myHashTable.ToString()); Console.WriteLine("In Main."); } }
[DebuggerDisplay("{value}", Name = "{key}")] internal class KeyValuePairs { private IDictionary dictionary;
private object key; private object value; public KeyValuePairs(IDictionary dictionary, object key, object value)
{ this.value = value; this.key = key; this.dictionary = dictionary; } } [DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(HashtableDebugView))] class MyHashtable : Hashtable { private const string
TestString = "This should not appear in the debug window."; internal class HashtableDebugView { private
Hashtable hashtable; public const string TestString = "This should appear in the debug window."; public
HashtableDebugView(Hashtable hashtable) { this.hashtable = hashtable; }
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public KeyValuePairs[] Keys { get {
KeyValuePairs[] keys = new KeyValuePairs[hashtable.Count]; int i = 0; foreach(object key in hashtable.Keys)
{ keys[i] = new KeyValuePairs(hashtable, key, hashtable[key]); i++; } return keys; } } } }
Como: Rastrear cdigo em um aplicativo
A Trace classe permite-lhe instrumento seu aplicativo. Voc pode receber mensagens
informativas do aplicativo em execuo que pode ajudar a diagnosticar problemas ou analisar o
desempenho. Esta uma viso geral das etapas principais normalmente envolvidas na Usar
rastreamento para analisar e corrigir possveis problemas em aplicativos implantados. Para obter
mais informaes sobre como executar essas etapas, consulte o link apropriado.
Para usar o rastreamento em um aplicativo
1. Considere qual rastreamento sada ser voc deseja que receba onsite aps voc ter
implantou o aplicativo.
2. Criar um conjunto de opes. Para obter mais informaes, consulte Criando e ao
inicializar opes de rastreamento.
3. Adicionar as instrues de rastreamento ao cdigo do aplicativo.
4. Determinar onde voc deseja a sada de rastreamento para aparecem e adicionar os
ouvintes apropriados. Para obter mais informaes, consulte Criando e ao inicializar
Listeners do rastreamento.
5. Testar e depurar seu aplicativo e o cdigo de rastreamento que ele contm.
6. Compilar o aplicativo em cdigo executvel usando um dos seguintes procedimentos:
Visual C# Consolidado 576
o
Use o Build menu juntamente com a Debug pgina da caixa Property Pages de
dilogo no Solution Explorer. Use isso quando compilar no Visual Studio.
- ou -
o
Do Trace uso e Debug diretivas de compilador para o mtodo de linha de comando
de compilao. Para obter mais informaes, consulte Compilando condicionalmente com
Rastreamento e depurao. Use isso quando compilar a partir da linha de comando.
7. Se ocorrer um problema durante o tempo de execuo, ative a opo de rastreamento
apropriada. Para obter mais informaes, consulte Configurando opes de rastreamento.
O cdigo de rastreamento grava Rastrear mensagens para um destino especificado, por
exemplo, uma tela, um arquivo de texto, ou um log de eventos. O tipo de escuta includo
na coleo Trace.Listeners determina o destino.
8. Analisar as mensagens de rastreamento para identificar e entender o problema no
aplicativo.
COMO: Configurar opes de rastreamento
Pode aps tem o aplicativo foi distribudo, voc ainda ativar ou desativar a sada de rastreamento
ao configurar as opes de rastreamento em seu aplicativo. Configurar uma opo significa
alterao seu valor de uma fonte externa depois ele foi inicializado. Voc pode alterar os valores
dos objetos opo usando o arquivo de configurao. Voc configurar uma opo de
rastreamento para ativ-lo logon e logoff, ou para definir seu nvel, determinar a quantidade e
digite de mensagens-passa junto para escuta.
Comutaes so configuradas usando o arquivo.config. Para um aplicativo da Web, este o
arquivo web.config associado ao projeto. Em um aplicativo do Windows, este arquivo nomeado
(nome do aplicativo). exe.config. Em um aplicativo implantado, esse arquivo deve residir na
mesma pasta como executvel.
Quando o aplicativo executa o cdigo que cria uma instncia de uma opo para a primeira vez,
ele verifica o arquivo de configurao para nvel rastreamento-informaes sobre a opo
nomeada. O sistema de rastreamento examina o arquivo de configurao apenas uma vez para
qualquer opo especfica na primeira vez seu aplicativo cria a opo.
Em um aplicativo implantado, voc Ativar cdigo de rastreamento por reconfigurando objetos
opo quando seu aplicativo est sendo executado. Isso normalmente envolve os objetos opo
Ativar e desativar ou, alterando os nveis de rastreamento, e reiniciando o aplicativo.
Quando voc cria uma instncia de uma opo, voc tambm inicializ-lo, especificando dois
argumentos: um displayName argumento e um description argumento. O displayName argumento
do construtor define a Switch.DisplayName propriedade da instncia Opo de classe. O
displayName o nome que usado para configurar a opo no arquivo.config, e o description
argumento deve retornar uma breve descrio da opo e que mensagens ele controles..
Em alm para Especifica o nome de uma opo para configurar, voc tambm deve especificar
um valor para a opo. Esse valor um Integer. Para BooleanSwitch um valor de 0 corresponde
a Off, e corresponde a On qualquer valor diferente de zero. Para TraceSwitch, 0,1,2,3, e 4
corresponde Off, Error e Verbose, respectivamente., Warning, Info Qualquer nmero maior que
4 tratada como Verbose, e qualquer nmero menor que zero tratado como Off.
Para que os usurios para que seja possvel para configurar opes de rastreamento de um
aplicativo, voc deve fornecer documentao detalhada sobre as opes em seu aplicativo. Voc
deve detalhes quais opes controlam o que e como eles ativar e desativar. Voc tambm deve
fornecer o usurio final com um arquivo.config que tenha ajuda apropriada nos comentrios.
Visual C# Consolidado 577
Alterna para criar e configurar rastreamento
1. Criar comutaes no cdigo. Para obter mais informaes, consulte Criando e ao inicializar
opes de rastreamento.
2. Se o projeto no contm um arquivo de configurao (App.config ou Web.config), seguida,
no menu Project, selecione Add New Item.
o
Na Visual Basic: caixa Add New Item de dilogo, escolha Application
Configuration File.
O arquivo de configurao do aplicativo criada e aberta. Isso um documento XML cujo
elemento raiz <configuration>.
o
Na Visual C#: caixa Add New Item de dilogo, escolha XML File. Nome este
arquivo app.config. No editor XML, aps a declarao XML, adicionar XML a seguir:
<configuration> </configuration>
Quando seu projeto compilado, o arquivo App.config copiado para a pasta de sada do
projeto e renomeado applicationname. exe.config... exe.config
3. Aps a <configuration> marca, mas antes da </configuration> marca, adicione o XML
apropriado para configurar comutaes. Os exemplos a seguir demonstram com uma
DisplayName propriedade de TraceLevelSwitch. com uma DisplayName propriedade de
DataMessageSwitch e a TraceSwitch uma BooleanSwitch
<system.diagnostics> <switches> <add name="DataMessagesSwitch" value="0" /> <add
name="TraceLevelSwitch" value="0" /> </switches> </system.diagnostics>
Nessa configurao, as duas opes so logoff.
4. Caso voc precise ativar como qualquer inteiro diferente de 0. a BooleanSwitch, como
DataMessagesSwitch mostrado no exemplo anterior, alterar o Value
5. Caso voc precise ativar com a configurao Nvel apropriada (1 a 4). a TraceSwitch,
como TraceLevelSwitch mostrado no exemplo anterior, alterar o Value
6. Adicionar comentrios ao arquivo.config para que o usurio final tenha uma compreenso
clara de quais valores para alterar para configurar as opes adequadamente.
O exemplo a seguir mostra o cdigo final, inclusive comentrios, a aparncia:
<system.diagnostics> <switches> <!-- This switch controls data messages. In order to receive data
trace messages, change value="0" to value="1" --> <add name="DataMessagesSwitch" value="0" />
<!-- This switch controls general messages. In order to receive general trace messages change the value
to the appropriate level. "1" gives error messages, "2" gives errors and warnings, "3" gives more
detailed error information, and "4" gives verbose trace information --> <add
name="TraceLevelSwitch" value="0" /> </switches> </system.diagnostics>
Passo-a-passo: Depurao de um servio XML da Web
As etapas nessa explicao passo a passo mostraro como depurar um XML Web service. Elas
lhe mostraro como iniciar e parar a execuo e definir pontos de interrupo.
Observao
Por padro, o processo do ASP.NET, usando o Aspnet_wp.exe ou o W3wp.exe, executa sob a
conta doASP.NET. Por esse motivo, voc deve ter privilgios de administrador no computador
onde o ASP.NET ser executado para depur-lo. Para obter mais informaes consulte Requisitos
Visual C# Consolidado 578
do sistema ASP.NET depurao:.
Observao
As caixas de dilogo e comandos de menu voc v podem diferir daquelas descritas na ajuda
dependendo de sua configurao ou edio ativa . Para alterar as configuraes, escolha Import
and Export Settings no menu Tools. Para obter mais informaes, consulte Configuraes
Visual Studio.
Para se preparar para essa explicao passo a passo
Se voc j tiver uma soluo aberta, feche-a. (No menu File, selecione Close Solution.)
Criar um novo formulrio do Windows
Em seguida, voc criar um novo formulrio do Windows.
Para criar o formulrio do Windows para essa explicao passo a passo
1. No menu File, escolha New e clique Project.
Visual C# Consolidado 580
A caixa de dilogo New Project ser exibida.
2. No painel tipos de projeto, abra o n Visual C#Visual Basic, Visual J# ou Visual C++, em
seguida,
1. Para Visual Basic, Visual C# ou Visual J#, selecione a Windows., em seguida,
marque Windows Application no painel Templates.
2. Para Visual C++, selecione o CLR.
3. No painel Templates, selecione Windows Application.
4. Na caixa Name, d ao projeto um nome exclusivo (por exemplo,
Walkthrough_SimpleDebug).
5. Clique em OK.
Visual Studio cria um novo projeto e exibe um novo formulrio no Windows Forms .
PaDesignerra obter mais informaes, consulte Windows Forms Designer.
6. No menu View, selecione Toolbox.
Abre a caixa de ferramentas. Para obter mais informaes, consulte Caixa de ferramentas.
7. Na caixa de ferramentas, clique sobre o controle Button e arraste o controle para a
superfcie de projeto de formulrio. Solte o boto no formulrio.
8. Na caixa de ferramentas, clique sobre o controle TextBox e arraste o controle para a
superfcie de projeto de formulrio. Solte a TextBox no formulrio.
9. Na superfcie de projeto de formulrio, clique duas vezes no boto.
Isso leva voc para a pgina de cdigo. O cursor deve estar no button1_Click.
10. Na funo button1_Click., adicione o seguinte cdigo:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!"; // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
11. No menu Build, selecione Build Solution.
O projeto deve criar-se com erros.
Depurar seu formulrio
Agora, voc est pronto para iniciar a depurao.
Para depurar o formulrio do Windows criado para essa explicao passo a passo
1. Na janela de origem, clique na margem esquerda na mesma linha quo o texto foi
adicionado:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!"; // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
Um ponto vermelho aparece e o texto na linha realado em vermelho. O ponto vermelho
representa um ponto de interrupo. Para obter mais informaes, consulte Pontos de
interrupo. Quando voc executa o aplicativo sob o depurador, o depurador interromper a
execuo nesse local quando o cdigo controntado. Voc pode exibir o estado do seu
aplicativo e depur-lo.
2. A partir do menu Debug, escolha Start.
O formulrio do Windows comea a ser executado.
3. No formulrio do Windows, clique no boto que voc adicionou.
No Visual Studio, isso leva voc para a linha onde voc define o ponto de interrupo na
pgina de cdigo. Esta linha deve ser realada em amarelo. Agora voc pode exibir as
Visual C# Consolidado 581
variveis no seu aplicativo e controlar sua execuo. Agora o aplicativo foi interrompido
quando executava, aguardando uma ao de voc.
Observao
Se voc tiver definido a Active Solution Configuration como Release, a execuo no ser
paralisada no ponto de interrupo. Isso simula o comportamento de um programa na verso real.
O crculo que marca o ponto de interrupo ir conter um ponto de interrogao branco. Se
necessrio, use a caixa de dilogo Configuration Manager para alterar essa configurao
novamente para Debug.
4. No menu Debug, escolha Windows, em seguida Watch, e clique em Watch1.
5. Na janela Watch1, clique em um linha em branco. Na coluna Name, digite textBox1.Text (se
voc estiver usando Visual Basic, Visual C#, ou J#) ou textBox1->Text (se voc estiver
usando C++), pressione ENTER.
A janela Watch1 mostra o valor dessa varivel entre aspas como:
""
6. A partir do Menu Debug, escolha Step Into.
O valor de textBox1.Text muda na janela Watch1 para:
Button was clicked!
7. A partir do Menu Debug, escolha Continue para continuar a depurao do programa.
8. No formulrio do Windows, clique no boto novamente.
Visual Studio quebra a execuo novamente.
9. Clique no ponto vermelho que representa o ponto de interrupo.
Isso remove o ponto de interrupo do seu cdigo.
10. A partir do Menu Debug, escolha Stop Debugging.
Anexar ao seu formulrio para depurao
No Visual Studio 2005, voc pode anexar o depurador a um processo em execuo. Se voc
estiver usando um Edition Express, no h suporte para este recurso.
Para anexar ao formulrio do Windows para depurao
1. No projeto criado acima, clique Na margem esquerda para definir mais uma vez um ponto
de interrupo na linha que voc adicionou:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!" // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
2. No menu Debug, selecione Start Without Debugging.
O formulrio do Windows inicia executando sob Windows, como se voc tivesse clicado
duas vezes seu executvel. O depurador no est anexado.
3. No menu Debug, selecione Attach to Process. (Este comando tambm est disponvel a
partir do menuTools.)
A caixa de dilogo Attach to Process ser exibida.
4. No painel Available Processes, localize o nome do processo
(Walkthrough_SimpleDebug.exe) na coluna Process e clique nele.
5. Clique no boto Attach.
Visual C# Consolidado 582
6. No seu formulrio do Windows, clique em um e somente um boto.
O depurador quebra a execuo do formulrio do Windows no ponto de interrupo.
Passo-a-passo: Depurao da funo SQL CLR definida pelo usurio com valores em tabela
Este tpico se aplica a:
Edio do Visual Studio Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Standard No No No No No
Pro / Team Sim Sim Sim Sim Sim
Este exemplo mostra como depurar uma funo table-valued definida pelo usurio SQL CLR
(UDF).
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo de suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar uma funo table-valued definida pelo usurio SQL CLR
1. Em um novo projeto SQL Server estabelea uma conexo a um banco de dados. Para
obter mais informaes, consulte Como conectar-se a um banco de dados:.
2. Crie uma nova funo usando o cdigo da primeira seo de exemplo abaixo e a nomeie
TableOfPtimes.cs. Para obter mais informaes, consulte Como Develop com o tipo do
Project Server SQL:.
3. Adicione um script que testa a funo, incluindo-a em uma instruo SELECT. No Solution
Explorer, clique com o boto direito do mouse no diretrio TestScripts, clique em Add Test
Script, e inserir o cdigo da segunda das sees de exemplo a seguir. Salve o arquivo com
o nome ReadEventLog.sql. Clique com o boto direito do mouse no nome de arquivo, e
clique em Set as Default Debug Script.
4. Como voc est acessando o Event Log, voc deve alterar o Permission Level no banco
de dados clicando o n do nome do projeto no Project Explorer, e clicando em Properties.
Na caixa de propriedade que aparece no editor de textos, clique na guia Database, e em
seguida, defina o Permission Level para Unsafe.
O depurador no oferece suporte completo a depurao de assemblies inseguros. Em
assemblies inseguros, voc pode criar novos segmentos e chamar cdigo no gerenciado,
mas esses itens no so suportados pela depurao SQL CLR.
5. Defina pontos de interrupo no ReadEventLog.cs, e em seguida no menu Debug, clique
em Start para compilar, implantar, e fazer o teste de unidade do projeto. Quando o ponteiro
de instruo, designado por uma seta amarela, aparece em um ponto de interrupo, voc
est depurando o cdigo SQL CLR.
6. Experimente recursos de depurao diferentes.
Visual C# Consolidado 583
1. No menu Debug, clique em Step Into repetidamente para observar a execuo
linha por linha da funo.
2. Conforme voc depura a funo, voc pode usar as janelas Locals e Watch para
observar os valores dos diferentes membros.
3. Clique em Continue novamente para concluir a depurao da funo.
4. Na janela Output, selecione Database Output na lista suspensa Show output
from, e voc pode observar os resultados da execuo das duas consultas no script
TestPrims.sql.
Exemplo
Este o cdigo que l o log de eventos.
using System; using System.Data; using System.Data.Sql; using System.Data.SqlTypes; using
Microsoft.SqlServer.Server; using System.Collections; public partial class UserDefinedFunctions { struct
primeIndex { public int n; public int p; public primeIndex(int n, int p) { this.n = n; this.p = p; } } static bool
isPrime(int p) { if (p < 2) return false; if (p == 2) return true; if (p % 2 == 0) return false; for (int d = 3; d * d
< p; d+=2) { if (p % d == 0) return false; } return true; } static int nextPrime(int p) { int result = p + 1; while
(!isPrime(result)) result++; return result; } [SqlFunction(FillRowMethodName = "Fill", TableDefinition = "n
int,p int,est float")] public static IEnumerable TableOfPrimes(int n) { int p = 1; for (int i = 1; i <= n; i++) { p =
nextPrime(p); yield return new primeIndex(i, p); } } private static void Fill(object source, out int n, out int p,
out SqlDouble est) { primeIndex pi = (primeIndex)source; n = pi.n; p = pi.p; if (n <5) est = SqlDouble.Null;
else { double log = Math.Log(n); double loglog = Math.Log(log); est = n * (log + loglog - 1 + loglog / log - 2 /
log); } } }
Este o script de teste que chama a funo.
SELECT n,p,est FROM dbo.TableOfPrimes(50) SELECT TOP 10 n, p, est, est/p AS factor FROM
dbo.TableOfPrimes(500) ORDER BY factor DESC SELECT TOP 10 n, p, est, est/p AS factor FROM
dbo.TableOfPrimes(1000) WHERE n>500 ORDER BY factor DESC
Passo-a-passo: Depurao de um disparador SQL CLR
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Padro No No No No No
Pro / Team Sim Sim Sim Sim Sim
Este exemplo mostra como depurar um disparador CLR SQL. Ele usa a tabela Contact no banco
de dados de exemplo AdventureWorks, que um dos bancos de dados instalado com SQL
Server 2005. O exemplo cria um novo disparador CLR inserir na tabela Contact.
Visual C# Consolidado 584
Observao
As caixas de dilogo e comandos de menu voc v pode diferir daquelas descritas na ajuda
dependendo de suas configuraes ativas ou verso. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar um disparador CLR SQL:
1. Em um novo projeto do SQL Server, estabelecer uma conexo para o banco de dados
AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um banco de
dados:.
2. Criar um novo disparador usando o cdigo da primeira seo do exemplo abaixo, e
nome-lo iContact.cs. Para obter mais informaes, consulte Como Develop com o tipo do
Project Server SQL:.
3. Adicionar um script que testa o disparador gerando uma ativao. No Solution Explorer
clique com o boto direito do mouse no diretrio TestScripts, clique Add Test Script, e
insira o cdigo da segunda seo do exemplo abaixo. Salve o arquivo com o nome
truContact.sql. Clique com o boto direito do mouse no nome de arquivo e clique em Set
as Default Debug Script.
4. Defina pontos de interrupo no iContact.cs, e clique em Start do menu Debug para
compilar, implantar e testar a unidade do projeto. Quando o ponteiro de instruo, designado
por uma seta amarela, aparecer em um ponto de interrupo, voc est depurando o
disparador.
5. Experimente recursos de depurao diferentes.
1. Passe a instruo instanciando o SqlTriggerContext.
2. Abra a janela Locals. Observe que voc pode abrir a varivel triggContext, que a
SqlTriggerContext, e voc pode examinar seus membros. Para obter mais informaes,
consulte Como: usar janelas variveis do depurador.
Observao
O servidor pode no refletir as alteraes em valores de variveis nas janelas do depurador. Par
obter mais informaes, consulte Limitaes depurao SQL.
3. Escolha Step Into no menu Debug para passar uma linha na stored procedure.
Observe que a execuo tem instanciado o valor da varivel sqlP do tipo SqlPipe.
4. Abra a janela Watch. Arraste a varivel sqlP para qualquer local na janela Watch. A
varivel agora adicionada lista de variveis observadas. Para obter mais
informaes, consulte Como: usar janelas variveis do depurador.
Observao
Voc pode editar os valores das variveis na janela Watch.
5. No editor de texto, clique com o boto direito do mouse na linha ltima e clique em
Insert Breakpoint.
6. No menu Debug, clique Continue e o depurador executar o cdigo at o novo
ponto de interrupo.
Visual C# Consolidado 585
6. Clique Continue novamente para concluir a depurao do disparador. Uma mensagem
aparece na janela Output informando que o disparador foi depurado com xito e exibe o
resultado da execuo dos comandos no arquivo truContact.sql.
Exemplo
Isso o cdigo necessrio para criar o disparador usado neste exemplo.
using System; using System.Data; using System.Data.Sql; using Microsoft.SqlServer.Server; public partial
class Triggers { // Enter existing table or view for the target and uncomment the attribute line.
[Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")] public
static void Trigger1() { SqlTriggerContext triggContext = SqlContext.TriggerContext; SqlPipe sqlP =
SqlContext.Pipe; sqlP.Send("primes inserted!"); } }
Este o script de teste que far com que o disparador seja acionado.
UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8
Passo-a-passo: Depurao de um tipo SQL CLR definido pelo usurio
Este tpico se aplica a:
Edio do Visual Studio Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Standard No No No No No
Pro/Team Sim Sim Sim Sim Sim
Este exemplo mostra como depurar um tipo SQL CLR definido pelo usurio. Ele cria um novo tipo
SQL CLR no banco de dados de exemplo AdventureWorks. O tipo depois usado em uma
definio de tabela, uma instruo INSERT, e em seguida em uma instruo SELECT.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo de suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar um tipo CLR SQL definido pelo usurio
1. Em um novo projeto do SQL Server, estabelea uma conexo com a banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2. Crie um novo tipo usando o cdigo da primeira seo exemplo abaixo, e nomeie-a
Point.cs. Para obter mais informaes, consulte Como Develop com o tipo do Project Server
SQL:.
Visual C# Consolidado 586
3. Adicione um script que testa o tipo. No Solution Explorer, clique com o boto direito do
mouse no diretrio TestScripts , clique Add Test Script, e insera o cdigo da segunda
seo de exemplo abaixo. Salve o arquivo com o nome Point.sql. Clique com o boto direito
do mouse no nome de arquivo, e clique em Set as Default Debug Script.
4. Adicione pontos de interrupo.
1. Na pasta Types no Server Explorer, abra Point.
2. Insira um ponto de interrupo dentro de cada mtodo de modo que voc possa
observar o fluxo de controle no interior do tipo.
5. A partir do menu Debug, escolha Start para compilar, implantar, e testar o projeto. Quando
o ponteiro de instruo, designado por uma seta amarela, aparecer no ponto de interrupo,
voc est depurando sua funo.
6. Experimente recursos de depurao diferentes.
1. O mtodo Parse executado uma vez para cada instruo INSERT no script no
Point.sql. Repetidamente clicando Step Into no Debug menu, voc pode observar
como o mtodo converte um par de nmeros delimitado por dois-pontos em um objeto
Point.
2. Na janela Locals, abra a varivel pt, que contm o Point que est sendo criado
atualmente.
3. No editor de texto, clique duas vezes a varivel pt para selecion-la. Arraste pt para
qualquer local na janela Watch. Agora pt adicionado lista de variveis observadas,
e voc pode observ-la comforme o Point executado.
4. Depurar a classe vrias vezes e observar as diferenas entre os caminhos de um
INSERT e um SELECT.
5. Pressione Continue novamente para concluir a depurao da funo.
Exemplo
Isso o cdigo que define o tipo usado neste exemplo. Este cdigo cria uma tabela denominada
pontos, insere linhas nela, e imprime o contedo da tabela. Observe que voc no deve incluir o
comando em lote GO entre a criao da tabela e seu acesso. Na verdade Visual Studio 2005
interpretar o GO como um comando SQL invlido.
using System; using System.Data.Sql; using System.Data.SqlTypes; using System.Runtime.Serialization;
[Serializable, SqlUserDefinedTypeAttribute(Format.Native)] public struct Point: INullable { private bool
m_isNull; private double m_x; private double m_y; public bool IsNull { get { return (m_isNull); } } public
override string ToString() { if (this.IsNull) { return "NULL"; } else { return this.m_x + ":" + this.m_y; } }
public static Point Parse(SqlString s) { if (s.IsNull) { return Null; } else { // Parse input string here to
separate out points: Point pt = new Point(); string str = Convert.ToString(s); string[] xy = str.Split(':'); pt.X =
Convert.ToDouble(xy[0]); pt.Y = Convert.ToDouble(xy[1]); return (pt); } } public static Point Null { get {
Point pt = new Point(); pt. m_isNull = true; return (pt); } } public double X { get { return (this.m_x); } set {
m_x = value; } } public double Y { get { return (this.m_y); } set { m_y = value; } } }
Este o script de teste que chama a funo.
CREATE TABLE dbo.Points ( ID int IDENTITY(1,1) PRIMARY KEY, Pnt Point) INSERT INTO dbo.Points
(Pnt) VALUES (CONVERT(Point, '3:4')) INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '-1:5'))
INSERT INTO dbo.Points (Pnt) VALUES (CAST ('1:99' AS Point)) SELECT ID, Pnt.ToString() as StringPoint,
Pnt.X as X, Pnt.Y as Y FROM dbo.Points
Visual C# Consolidado 587
Passo-a-passo: Depurao de uma funo SQL CLR escalar definida pelo usurio
Este tpico se aplica a:
Visual Studio Edition Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Padro No No No No No
Pro / Team Sim Sim Sim Sim Sim
Este exemplo mostra como depurar uma funo SQL CLR definida pelo usurio (UDF). Ele cria
uma nova funo SQL CLR definida pelo usurio no banco de dados de exemplo
AdventureWorks.
Observao
As caixas de dilogo e comandos de menu voc v podem diferir daquelas descritas na ajuda
dependendo das suas configuraes ativas ou verso. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar uma funo escalar CLR SQL definida pelo usurio
1. Em um novo projeto do SQL Server, estabelea uma conexo com a banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2. Criar uma nova funo usando o cdigo da primeira seo do exemplo abaixo, e nome-la
OrderCount.cs. Para obter mais informaes, consulte Como Develop com o tipo do Project
Server SQL:.
3. Adicionar um script que testa a funo incluindo-o em uma instruo SELECT. No Solution
Explorer, clique com o boto direito do mouse no diretrio TestScripts, clique Add Test
Script e insira o cdigo da segunda seo do exemplo abaixo. Salve o arquivo com o nome
CallOrderCount.sql. Clique com boto direito mouse no nome do arquivo e escolha Set as
Default Debug Script.
4. Coloque um ponto de interrupo no OrderCount.cs na linha que instancia um
SqlCommand, e no menu Debug, clique Start para compilar, implantar e testar a unidade do
projeto. Quando o ponteiro de instruo, designado por uma seta amarela, aparecer no
ponto de interrupo, voc est depurando sua funo.
5. Experimentar recursos de depurao diferentes.
1. Passe a instruo instanciando o SqlCommand usando Step Into a partir do menu
Debug.
2. Na janela Locals, abra a varivel sqlComm, que o SqlCommand e examine seus
membros.
3. Clique Step Into no menu Debug para passar uma linha na funo. Observe que o
membro sqlComm.CommandText foi instanciado tem.
Visual C# Consolidado 588
4. No editor de texto, arraste sqlComm para qualquer local na janela Watch. A varivel
agora adicionada lista de variveis observadas.
5. Escolha Step Into novamente e observe que uma nova janela rotulada Dynamic T-
SQL abre, exibindo a instruo SQL que est prestes a ser executada.
6. Escolha Step Into por executar a instruo e retornar para a funo.
7. Pressione Continue novamente, e observe a segunda janela Dynamic T-SQL que
abre, mostrando o cdigo que retorna o valor da funo.
8. Pressione Continue novamente para concluir a depurao da funo.
Exemplo
Isso o cdigo necessrio para criar a funo.
using System; using System.Data.SqlClient; using Microsoft.SqlServer.Server; public partial class
UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static int OrderCount() { using (SqlConnection conn = new SqlConnection("context
connection=true")) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn;
cmd.CommandText = "SELECT 42"; //cmd = new SqlCommand("SELECT 42",conn); int result =
(int)cmd.ExecuteScalar(); return result; } } };
Este o script de teste que chama a funo.
SELECT dbo.OrderCount()
Passo-a-passo: Depurao de uma agregao SQL CLR definida pelo usurio
Este tpico se aplica a:
Edio Visual Studio Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Standard No No No No No
Pro / Team Sim Sim Sim Sim Sim
Este exemplo mostra como depurar uma CLR SQL agregada definida pelo usurio. Ele cria uma
nova funo CLR SQL agregada chamada Concatenate no banco de dados de exemplo
AdventureWorks. Quando esta funo chamada em uma instruo SQL, ela ir concatenar
todos os valores para coluna especificada como seu parmetro de entrada.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo da suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Visual C# Consolidado 589
Para depurar uma funo CLR SQL agregada
1. Em um novo projeto do SQL Server, estabelea uma conexo com o banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2. Crie uma nova funo usando o cdigo do primeiro dos exemplo de sees a seguir e
denomine-o Concatenate.cs. Para obter mais informaes, consulte Como Develop com o
tipo do Project Server SQL:.
3. Adicione um script que testa a funo, incluindo-o em uma instruo SELECT. No
Solution Explorer clique com o boto direito do mouse no diretrio TestScripts, selecione
Add Test Script, e insira o cdigo da segunda seo de exemplo abaixo. Salve o arquivo
com o nome Concatenate.sql. Clique com o boto direito do mouse no nome de arquivo, e
clique em Set as Default Debug Script.
4. Coloque um ponto de interrupo na Concatenate.cs dentro do mtodo Accumulate na
instruo if. Para fazer isso, clique na margem esquerda cinza da janela do editor de texto, e
no menu Debug, clique em Start, para compilar, implantar, e testar a unidade do projeto.
Quando o ponteiro de instruo, designado por uma seta amarela, aparecer no ponto de
interrupo, significa que voc est depurando sua funo.
5. Experimente recursos de depurao diferentes.
1. O mtodo Accumulate executado uma vez para cada linha que constitui a clusula
GROUP BY em script na Concatenate.sql. Repetidamente clicando Step Into no menu
Debug, voc pode observar como o resultado do mtodo criado.
2. Na janela Locals, abra a varivel value, que contm o nome de armazenamento
atual sendo processado.
3. Clique na varivel this. O n filho intermediateResult ser retornado dessa funo, e
contm todos os nomes de armazenamento at o armazenamento presente,
concatenados juntos e separados por vrgulas.
4. No editor de texto, clique duas vezes a varivel intermediateResult para selecion-lo.
Arraste intermediateResult para a janela Watch e solte-a em qualquer lugar na janela. A
varivel agora adicionada lista de variveis observadas.
5. Avane pelo mtodo vrias vezes. O valor de intermediateResult ser alterado toda
vez atravs do mtodo, com um nome de armazenamento adicional concatenado at o
final.
6. Clique no ponto de quebra para remov-la, e adicione um ponto de quebra para a
primeira instruo dentro do mtodo Terminate. Esse mtodo retorna o resultado para o
chamador. Para avanar por ele, no menu Debug, clique em Start. Voc pode agora
depurar por ele clicando Step Into no menu Debug. Pare quando voc chegar na
instruo return.
7. Clique em Continue novamente para concluir a depurao da funo.
Exemplo
Este o cdigo para a funo agregada usada no exemplo.
using System; using System.Data.Sql; using System.Data.SqlTypes; using System.Data.SqlServer; using
System.IO; using System.Text; [Serializable] [SqlUserDefinedAggregate( //use CLR serialization to serialize
the intermediate result. Format.UserDefined, //Optimizer property: IsInvariantToNulls=true, //Optimizer
property: IsInvariantToDuplicates=false, //Optimizer property: IsInvariantToOrder=false, //Maximum size
in bytes of persisted value: MaxByteSize=8000) ] public class Concatenate: IBinarySerialize { ///
<summary> /// Variable holds intermediate result of the concatenation /// </summary> private
StringBuilder intermediateResult; /// <summary> /// Initialize the internal data structures ///
Visual C# Consolidado 590
</summary> public void Init( ) { intermediateResult = new StringBuilder(); } /// <summary> ///
Accumulate the next value, nop if the value is null /// </summary> /// <param name="value"></param>
public void Accumulate(SqlString value) { if(value.IsNull) { return; }
intermediateResult.Append(value.Value).Append(','); } /// <summary> /// Merge the partially computed
aggregate with this aggregate. /// </summary> /// <param name="other"></param> public void Merge(
Concatenate other) { intermediateResult.Append(other.intermediateResult); } /// <summary> /// Called at
end of aggregation, to return results. /// </summary> /// <returns></returns> public SqlString
Terminate() { string output = string.Empty; //Delete the trailing comma, if any . if (intermediateResult !=
null && intermediateResult.Length > 0) output = intermediateResult.ToString(0,
intermediateResult.Length-1); return new SqlString(output); } public void Read(BinaryReader r) {
intermediateResult = new StringBuilder(r.ReadString()); } public void Write(BinaryWriter w) {
w.Write(intermediateResult.ToString()); } }
Este o script de teste que chama a funo.
SELECT scu.SalesPersonID, dbo.Concatenate(sst.Name) FROM Sales.Customer as scu INNER JOIN
Sales.Store as sst ON scu.CustomerID = sst.CustomerID INNER JOIN Sales.SalesPerson as spr ON
scu.SalesPersonID = spr.SalesPersonID WHERE scu.SalesPersonID = 283 GROUP BY scu.SalesPersonID
Banco de dados de depurao T-SQL
Este tpico se aplica a:
Edio do Visual Studio Visual Basic C# C++ J# Visual Web Developer
Express No No No No No
Standard No No No No No
Pro / Team Sim Sim Sim Sim Sim
Esta seo contm exemplos demonstrando a depurao para todos os tipos de objeto de banco
de dados T-SQL.
No passado, os desenvolvedores T-SQL freqentemente escrevam e depuraram seus aplicativos
T-SQL usando a ferramenta SQL Server Query Analyzer. Hoje, Query Analyzer foi substitudo pelo
SQL Server Management Studio, que no tem o depurador. Os desenvolvedores T-SQL agora
usam o depurador Visual Studio 2005 em vez disso.
Os desenvolvedores tambm podem gravar seus aplicativos T-SQL no Visual Studio 2005,
usando um projeto de banco de dados. Independentemente de voc escrever seu aplicativo T-
SQL no Visual Studio 2005 ou no, procedimentos de depurao so quase idnticos.
H trs cenrios de depurao a serem considerados:
Execuo de um script de teste a partir do SQL Server Management Studio. Para obter
mais informaes, consulte Como: Depurar T-SQL usando o SQL Server Management Studio:.
Escrevendo cdigo seguro Tipo-: Para ativar cdigo para se beneficiar de Segurana do
Acesso ao Cdigo voc deve usar um compilador que gera cdigo verifiably Safe tipo-. Para
obter mais informaes, consulte Gravar Verifiably cdigo Safe Type-.
Usando bibliotecas classe seguro: suas bibliotecas classe usar segurana de acesso ao
cdigo para especificar as permisses que eles precisam para ser acessado. Voc deve estar
ciente das permisses necessrias para acessar qualquer biblioteca que usa seu cdigo e
fazem solicitaes apropriadas em seu cdigo. Para obter mais informaes, consulte Usando
bibliotecas classe segura.
Prticas recomendadas de poltica de segurana
O.NET Framework fornece um modelo de segurana Acesso cdigo que permite aos
administradores para modificar a diretiva de segurana para atender s suas necessidades
individuais. Enquanto segurana de acesso ao cdigo geralmente aumenta a confiabilidade e
segurana de aplicativos, incorretamente administrar a diretiva de segurana do acesso ao cdigo
potencialmente criar pontos fracos segurana. Esta seo explica conceitos de administrao
bsicas e descreve algumas das prticas recomendadas para usar ao administrar a diretiva de
segurana do acesso ao cdigo.
Viso geral da administrao de poltica de segurana
O sistema de segurana do .NET Framework regido por um conjunto de regras chamadas
Diretiva de segurana configurveis. Esta diretiva permite que o usurio final ou Administrador
para ajustar as configuraes que determinam qual cdigo recursos tem permisso para acessar
e basicamente decidir qual cdigo tem permisso para executar o tempo todo.
Por exemplo, suponha que voc for um administrador em uma configurao da empresa e voc
no confia o software que se origina de uma empresa especfica. Talvez essa empresa produz
software que funcionrios localizar divertido, mas causas aumenta o trfego de rede ou causar
estaes de trabalho se torne instvel. Voc pode definir uma diretiva de segurana de nvel
empresarial que restringe o acesso que software com uma nome forte criptografia especfico (um
identificador exclusivo) de um programa tem aos recursos do computador. Voc tambm pode
definir uma diretiva que impede que software deste editor na seja executado em todos os.
Este tpico fornece uma viso geral sobre administrao de diretiva de segurana. Para obter
mais informaes, consulte Gerenciamento de diretivas de segurana.
Prova, grupos de cdigo e conjuntos de permisses
Visual C# Consolidado 598
Cdigo que aponta o Common Language Runtime implantado em unidades chamadas
conjuntos de mdulos (assemblies). Ao tempo de carregamento, tempo de execuo examina
cada conjunto para provas, que identificar informaes sobre conjunto (tais como a assinatura
digital do autor o cdigo e o local que originou o cdigo). Com base nas provas, Gerenciador de
segurana Runtime idioma comum mapeia montagem para um grupo de cdigos com base na
diretiva de segurana. Grupos de cdigos so definidos para testar a formulrios especficos de
evidncias e fazer conjuntos permisso associado a eles. Conjuntos de mdulos (assemblies) que
pertencem a um grupo cdigo recebero as permisses definidas pelos conjuntos de permisses
associado. Para obter mais informaes sobre provas, grupos de cdigos, e conjuntos de
permisses, consulte Modelo de diretiva de segurana.
Permisses
As permisses so simplesmente objetos que representam o direito de acessar um recurso
protegido. Permisses so configurveis e um objeto de permisso nico pode assumir vrios
formulrios. Por exemplo, a FileIOPermission representa o direito de acesso, criar, ler, gravar ou
modificar arquivos no disco rgido local. Para ser significativo, uma permisso deve conter
informaes especficas sobre o tipo de acesso ele representa. Voc pode configurar para
representar o direito para ler um arquivo especfico, ler e gravar em um arquivo especfico, ou ler
os arquivos em uma pasta inteira. um FileIOPermission Os direitos que representam uma
permisso e conjuntos de mdulos (assemblies) que recebe so totalmente configurveis pelo
administrador do computador. Enquanto os aplicativos podem criar e configurar objetos permisso
como qualquer outro objeto, somente a diretiva de segurana pode conceder permisso para um
aplicativo. Basicamente, os administradores controlar a conceder permisso. Para obter uma lista
de permisses comuns, consulte Permisses de acesso cdigo.
Nveis de Diretiva de segurana
H quatro nveis de diretiva de segurana definidas pelo modelo de segurana, que correspondem
administrao diferentes e cenrios de hospedagem. A tabela a seguir descreve cada nvel. O
nvel de diretiva corporativa o nvel mais alto e o nvel de domnio do aplicativo o menor.
Nvel de diretiva Descrio
Diretiva
corporativa
Definida pelos administradores da empresa que definir a diretiva para
domnios da empresa.
Diretiva da
mquina
Definida pelos administradores mquina que definir a diretiva para um
computador.
Diretiva de usurio Definido por usurios que definir a diretiva para uma conta de logon nico.
Diretiva de
domnio de
aplicativo
Definido pelo host do tempo de execuo (qualquer aplicativo que hospeda o
Common Language Runtime) para definir diretiva tempo carregar-. Este nvel
no pode ser administrado.
Cada nvel de diretiva consiste de uma hierarquia de grupos de cdigo. Os administradores de
cada nvel de diretiva pode criar seus prprios grupos de cdigos e conjuntos de permisses
associado. Ao tempo de carregamento, o sistema de segurana Acesso cdigo examina todos os
nveis de diretiva e a conceder permisso resultante a interseo de todas as permisses
permitido em cada nvel. Os administradores de um nvel de diretiva inferior no pode loosen uma
deciso diretiva feitas em um nvel superior, mas eles pode reforar Diretiva, Much como desejam.
A diretiva de segurana padro reside em nvel de diretiva Mquina.
As configuraes de segurana padro so:
Cdigo que se origina da Internet ou intranet local no tem permisso para ler ou gravar
em uma unidade local.
Cdigo que se origina da Internet ou intranet local no tem permisso para ler ou gravar no
Registro do sistema.
Cdigo que se origina da Internet ou Intranet Local pode se comunicar com o site da Web
do origem.
Cdigo que se origina de intranet local possui acesso irrestrito a elementos UI, mas
somente cdigo originadas na Internet tem acesso sub janelas e a rea de transferncia.
A diretiva de segurana padro adequado para situaes maioria dos, mas no todos,. Voc
deve considerar modificar Diretiva de segurana quando:
Voc deseja confiar um aplicativo que requer mais permisso que a zona da qual ele
provm recebe por padro.
Voc usar aplicativos de uma editora especfica que voc completamente confiar e deseja
esses aplicativos para ter acesso a recursos especficos, no importa onde eles so
executados.
Voc deseja aplicativos no computador local para ter menos de confiana total. Por
exemplo, voc for um administrador de empresa e voc desejar impedir que os usurios de
instalar e executar aplicativos no confiveis.
Se voc decidir editar diretiva, voc deve garantir voc que no faa diminuir permisso para
aplicativos para o ponto que eles no funcionaro corretamente.
Ferramentas de administrao
A maneira recomendada de configurar a diretiva de segurana para usar o Ferramenta .NET
Framework Configuration (Mscorcfg.msc). Essa ferramenta fornece assistentes para ajud-lo
ajustar o usurio, computador, e as configuraes de segurana corporativa. A tabela a seguir
descreve esses assistentes.
Assistente Descrio
Confiar um
aplicativo
Use este assistente para identificar um aplicativo pelas informaes Editor
ou nome forte e Aumentar nvel do aplicativo de confiana.
Ajustar
configuraes de
segurana
Use este assistente para aumentar ou diminuir permisses a conjuntos de
mdulos (assemblies) proveniente de uma das seguintes zonas: Meu
computador, intranet local, Internet, sites confiveis e sites no confiveis.
Criar um pacote de
implantao
Use este assistente para criar um pacote Windows Installer para implantar a
diretiva de segurana em uma empresa.
Para obter mais informaes sobre usando os assistentes, consulte o Ferramenta .NET
Framework Configuration (Mscorcfg.msc).
Se os assistentes no fornecem a funcionalidade necessrios para administrar a diretiva de
segurana, voc poder editar os conjuntos de permisses e cdigo grupos diretamente usando a
qualquer toolor .NET Framework Configuration o Ferramenta Diretiva de segurana para acesso
de cdigo (Caspol.exe). Caspol.exe uma ferramenta de linha de comando fornecida
principalmente para scripts administrao de segurana. Para obter informaes sobre como
Visual C# Consolidado 601
realizar tarefas especficas usando estas ferramentas consulte Configurao de diretiva de
segurana.
Aumentar permisses
Um aplicativo gerenciado que requer mais permisso para executar que permite que a diretiva
atual dependendo da como ele criada, ser Acione uma exceo, deixar de executar, ou funo
no corretamente. Voc pode usar para exibir o permisses mnimas solicitada, permisses
opcional solicitada, e permisses recusada pelo conjunto para comparar as permisses que
montagem solicitaes para as permisses que ele realmente receber. o Ferramenta exibir
permisses (Permview.exe) Observe que esta ferramenta s mostra permisses que tiver sido
solicitada pelo aplicativo usando a sintaxe declarativa explicitamente. Com essas informaes,
poder aumentar as permisses que conjunto recebe por criando um novo grupo de cdigos
personalizados e associ-lo a um novo conjunto de permisso personalizada que contm todas as
permisses que o aplicativo precisa ser executado corretamente. No entanto, voc deve aumentar
as permisses somente se voc confiar fonte do aplicativo e somente voc deve confiar de acordo
com prova que suitably confivel. Administradores (na maioria dos casos, ser ter vrios grupos
de cdigos personalizados que podem ser usados para categorizar vrios aplicativos que
requerem permisses semelhantes.)
Suponha que voc tenha um aplicativo que freqentemente acessado por vrios usurios em
um compartilhamento de rede. Em um contexto no gerenciado, essa situao no representar
um problema de execuo geralmente no. No entanto, em um contexto gerenciado, este
aplicativo pode ser concedido um limitado conjunto de permisses porque ele proveniente de
zona Intranet local. Por exemplo, o aplicativo no pode ser permitido completo permisses de
impresso, que limita utilidade deste aplicativo. Em vez de loosening as configuraes de zona
inteiro da intranet local, voc deve fazer o seguinte:
1. Uso para o modo cujas permisses voc deseja aumentar as permisses mnimas
solicitada pelo conjunto. o Ferramenta Exibir Permisso (Permview.exe) Essas so as
permisses em log de forma mnima precisa para executar o aplicativo.
2. Identificar uma caracterstica exclusivo da montagem. Essa caracterstica pde incluir
nome forte na montagem, sua chave pblica, o hash, ou um atributo personalizado
exclusivo. Se o aplicativo proveniente de um servidor confivel, o local tambm pode ser
usado para identificar o aplicativo. Lembre-se, voc confia todo cdigo que tenha essa
caracterstica.
3. Criar um novo grupo de cdigos que requer o identificador exclusivo do membro. Use a
ferramenta (Mscorcfg.msc).NET Framework Configuration ou Ferramenta Diretiva de
segurana para acesso de cdigo (Caspol.exe). Para criar o grupo de cdigos
4. Criar um novo conjunto de permisses que inclui todas as permisses montagem em log
de forma mnima precisa para executar usando a ferramenta .NET Framework
Configuration ou a ferramenta Diretiva de Segurana para Acesso ao cdigo.
5. Associar a nova permisso definir com o novo grupo cdigo, utilizando a ferramenta .NET
Framework Configuration ou a ferramenta Diretiva de Segurana para Acesso ao cdigo.
O aplicativo aps a concluso dessas etapas, ser executado e receber permisses suficientes
para funcionar. Outros, menos aplicativos confiveis no recebero as permisses adicionais; isso
ajuda a proteger seu sistema contra cdigo mal-intencionado. Para obter informaes sobre como
realizar tarefas especficas usando as ferramentas de segurana, consulte Configurao de
diretiva de segurana.
Visual C# Consolidado 602
Administrao com atributos Grupo de cdigos
Suponha que voc for um administrador empresarial Quem responsvel para administrar a
diretiva de segurana para um nmero de estaes de trabalho. Para o domnio corporativa tpica,
o administrador da rede tenha privilgios administrativos em cada servidor e cada cliente. No
entanto, no difcil para os usurios possam ter privilgios administrativos em uma estao de
trabalho nico individuais. Como um resultado, o administrador da rede tenha privilgios
administrativos no nvel de diretiva da empresa e o administrador da estao de trabalho tem
privilgios administrativos no nvel de diretiva da mquina. Nesta situao, o administrador da
rede parece ter mais controle sobre diretiva como diretiva corporativa avaliada primeiro e diretiva
de mquina no tem permisso para loosen decises de segurana feitas pelo administrador de
nvel empresarial. No entanto, o administrador de nvel mquina ainda pode reforar segurana,
potencialmente quebrar aplicativos confiveis que faria caso contrrio ter sido podem ser
executadas. Por esse motivo, maior nveis de diretiva pode optar por excluir decises de diretiva
de nvel inferior de ser avaliado.
Para fazer isso, aplicando ou Exclusive atributo a um grupo de cdigo, usando um das
ferramentas de diretiva de segurana. o LevelFinal
Atributo de Nvel final
Quando aplicado a um grupo de cdigos, o LevelFinal atributo exclui qualquer nvel de diretiva de
ser avaliado abaixo do nvel atual. Por exemplo, se voc aplicar o LevelFinal atributo ao grupo de
cdigos de intranet local no nvel da empresa, qualquer grupo de cdigos no nvel do computador
no sero avaliados mesmo se um administrador nvel mquina tiver feito alteraes. Aplicar o
LevelFinal atributo garante que um conjunto associado a um grupo de cdigos marcados com
este atributo nunca recebero as permisses menos devido a decises tomadas por um
administrador de nvel inferior diretiva. Para obter informaes sobre configurao do LevelFinal
atributo em um padro ou grupo de cdigos personalizado, consulte o Ferramenta .NET
Framework Configuration (Mscorcfg.msc) ou o Ferramenta Diretiva de segurana para acesso de
cdigo (Caspol.exe).
Atributo exclusivo
Quando aplicado a um grupo de cdigos, o Exclusive atributo impede outros grupos de cdigo no
mesmo nvel de diretiva de sendo considerados quando o Runtime calcula permisses para
conjuntos de mdulos (assemblies) que esto no grupo cdigo exclusivo. Nveis de diretiva acima
e abaixo do nvel atual ainda so avaliados, embora. Este atributo permite que um grupo cdigo
especfico para tomar a deciso nico para o nvel de diretiva atual sobre quais permisses so
concedidas aos conjuntos que correspondam desse grupo. Isso til quando voc deseja
conceder um conjunto especfico de permisses aos conjuntos especficos, sem permitir que
permisses de outras correspondncias grupo cdigo no mesmo nvel de diretiva.
Observe que um conjunto no tem permisso para executar se ele pertencer a mais de um grupo
cdigo marcado como exclusivo. Portanto, use o Exclusive atributo com cautela ao administrar
Diretiva de segurana personalizado. Para obter informaes sobre como definir o Exclusive
atributo em um interna em ou personalizados, consulte o Ferramenta .NET Framework
Configuration (Mscorcfg.msc) ou o Ferramenta Diretiva de segurana para acesso de cdigo
(Caspol.exe) grupo de cdigos.
COMO: Adicionar Permisses Personalizadas Poltica de Segurana
Uma permisso personalizada um que fornecido com um aplicativo ou biblioteca, em vez de
sendo fornecido pelo .NET Framework. Para ser significativo, uma permisso personalizada deve
ser adicionado com a diretiva de segurana no computador (ou computadores, no caso de uma
rede) onde o aplicativo usando a permisso executa.
Visual C# Consolidado 603
Voc deve descrever as especificaes da permisso voc deseja adicionar ao sistema de
segurana do .NET Framework quando voc adiciona ele sua diretiva personalizada. Uma
permisso nico pode assumir vrios formulrios que representam o direito de acessar recursos
especficos. Por exemplo, a permisso personalizada pode ter a capacidade de fornecer acesso
restrito ou irrestrito a um recurso. Como um administrador, voc tem a capacidade de decidir qual
tipo a permisso de acesso (restrito ou Irrestrito) representar. Portanto, voc deve descrever a
configurao que voc deseja a permisso para tem que o sistema de segurana do .NET
Framework. Isso, criando uma representao XML da configurao voc deseja a permisso
personalizada para ter e importar o XML para a diretiva de segurana. (O sistema de segurana
do .NET Framework usa XML para serializar permisses.) O editor da permisso ou deve fornecer
uma ferramenta para criar a representao XML ou fornecer instrues para criar o arquivo XML.
Geralmente, as representaes XML das permisses que compem a diretiva de segurana so
armazenadas em arquivos de configurao de diretiva.
Para adicionar uma permisso personalizada diretiva de segurana
1. Adicionar Conjunto implementar a permisso personalizada para o cache de conjunto de
mdulos global e para a lista de conjuntos de mdulos (assemblies) totalmente confivel.
2. Criar um arquivo XML que representa o tipo de permisso voc deseja criar e atribuir aos
conjuntos.
3. Adicionar a representao XML da permisso para a diretiva de segurana, usando o
Ferramenta .NET Framework Configuration (Mscorcfg.msc) ou o Ferramenta Diretiva de
segurana para acesso de cdigo (Caspol.exe).
Dicas de administrao
As prticas descritas na seo so aplicveis para cada cenrio Administrao. Voc deve
conserv-lo em mente ao configurar e administrar a diretiva de segurana.
Estratgias de longo prazo para administrao de diretiva
Definir categorias de confiana que voc pode usar para administrar diretiva aplicvel. Definir
vrios grupos de cdigos para discriminate cdigo que provvel que ser executada em seu
ambiente e definir as permisses que devem receber cada grupo. Craft diretiva acordo e
implantar. Voc deve fazer estabelecer sua diretiva geral quando voc configura seu ambiente,
em vez de fone fone-por-inicialmente como necessrios para executar vrios aplicativos.
Nvel de administrao
O nvel de diretiva que voc escolher para administrar determinado pelo escopo que voc
deseja que afetam. Sempre administrar a diretiva de segurana no nvel de diretiva menor que
afeta os usurios mnimo e ainda atender seu cenrio Administrao. Por exemplo:
Se voc estiver administrando um diretiva que afeta cada estao de trabalho e usurio na
sua empresa, verifique as adies Diretiva no nvel da empresa. Nunca fazer uma adio ao
nvel empresa de um computador que no foi feito para afetar todos os computadores na sua
empresa.
Voc no estejam em uma rede ou estiver em uma rede sem um controlador de domnio.
O computador que voc est administrando serve uma funo exclusivo. Por exemplo, se
voc estiver administrando um computador pblico que usada para gerais acesso Internet
por vrias pessoas em uma configurao semi-Public, convm para que uma diretiva Mquina
exclusivo, porque o computador funciona uma funo exclusivo. Alm disso, convm para
produzir uma diretiva Computador especfico que considera s necessidades de segurana de
computadores especializados, como os servidores da sua empresa.
Administrao de diretiva de usurio
Diretiva de usurio o nvel mais baixo diretiva administrable. Cada usurio tem um arquivo de
configurao de diretiva de usurio individuais. Quaisquer alteraes feitas neste nvel de diretiva
sero Aplicvel somente ao usurio conectado-no atual. O nvel de diretiva de usurio restrito no
qual ele pode especificar.
Porque este nvel configurvel pelo usurio com logon feito atual, administradores de diretivas
do nvel empresa deve estar ciente que o usurio potencialmente pode alterar qualquer alterao
feita no nvel de diretiva do usurio Diretiva. O nvel de diretiva de usurio no capaz de
conceder mais permisses a uma montagem que especificado nos nveis de diretiva superior.
No entanto, o nvel de diretiva de usurio tem permisso para diminuir permisses, que
potencialmente pode causar aplicativos para parar de funcionar corretamente. Se o LevelFinal
Visual C# Consolidado 605
atributo aplicado a um grupo de cdigos no nvel da mquina ou empresa, o nvel do usurio
no permitido para reforar decises de diretiva que foram feitas nesses nveis.
Administrao de nvel de usurio adequado em algumas situaes para tightening segurana.
Por exemplo, um usurio pode decidir para Reforar diretiva de segurana para os conjuntos de
mdulos (assemblies) originados a partir da zona Intranet local se no for encontrado um cdigo
no confivel. Voc pode considere Administrar diretiva nesse nvel quando voc tiver um usurio
em uma rede corporativa e achar que as configuraes de segurana so no apertada suficiente.
COMO: Usar Proteo de Dados
O.NET Framework fornece acesso proteo de dados (DPAPI), que permite que voc para
criptografar dados usando informaes da conta de usurio atual ou computador API. Quando
voc usa a DPAPI, voc aliviar o problema de explicitamente gerar e armazenar uma chave
criptogrfica difcil.
Use a ProtectedMemory classe para criptografar uma matriz de bytes de memria. Essa
funcionalidade est disponvel no Microsoft Windows XP e sistemas operacionais posteriores.
Voc pode especificar que a memria criptografados por atual processo pode ser
descriptografados pelo processo atual apenas, por todos os processos, ou do mesmo contexto de
usurio. Consulte a MemoryProtectionScope enumerao para obter uma descrio detalhada
das ProtectedMemory Opes.
Use a ProtectedData classe para criptografar uma cpia de uma matriz de bytes. Essa
funcionalidade est disponvel no Microsoft Windows 2000 e sistemas operacionais posteriores.
Voc pode especificar que dados criptografados pela conta de usurio atual pode ser
descriptografada somente pela mesma conta de usurio, ou voc pode especificar que dados
criptografados pela conta de usurio atual pode ser descriptografados por qualquer conta no
computador. Consulte a DataProtectionScope enumerao para obter uma descrio detalhada
das ProtectedData Opes.
Para criptografar dados na memria usando proteo de dados
Chame o mtodo esttico Protect Ao passar uma matriz de bytes para criptografar, a
entropia, e o escopo proteo memria.
Para descriptografar dados na memria usando proteo de dados
Chame o mtodo esttico Unprotect Ao passar uma matriz de bytes para descriptografar e
o escopo Proteo de memria.
Para criptografar dados em um arquivo ou transmitir usando proteo de dados
1. Criar entropia aleatrio.
2. Chame o mtodo esttico Protect Ao passar uma matriz de bytes para criptografar, a
entropia, e o escopo proteo dados.
3. Gravar os dados criptografados para um arquivo ou fluxo.
Para descriptografar dados de um arquivo ou transmitir usando proteo de dados
1. Ler os dados criptografados de um arquivo ou fluxo.
2. Chame o mtodo esttico Unprotect Ao passar uma matriz de bytes para descriptografar e
o escopo proteo de dados.
Exemplo
O exemplo de cdigo a seguir demonstra duas formas de criptografia e descriptografia. Primeiro, o
exemplo de cdigo criptografa e descriptografa depois os uma matriz de bytes de memria. Em
seguida, o exemplo de cdigo criptografa uma cpia de uma matriz de bytes, salva ele em um
Visual C# Consolidado 606
arquivo, carrega os dados de volta do arquivo, e ento descriptografa os dados. O exemplo exibe
os dados originais, os dados criptografados, e os dados descriptografados.
C#
using System; using System.IO; using System.Text; using System.Security.Cryptography; public class
MemoryProtectionSample { public static void Main() { Run(); } public static void Run() { try {
/////////////////////////////// // // Memory Encryption - ProtectedMemory //
/////////////////////////////// // Create the original data to be encrypted (The data length should be a
multiple of 16). byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting..."); // Encrypt the data in memory. EncryptInMemoryData(toEncrypt,
MemoryProtectionScope.SameLogon); Console.WriteLine("Encrypted data: " +
UnicodeEncoding.ASCII.GetString(toEncrypt)); Console.WriteLine("Decrypting..."); // Decrypt the data in
memory. DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
/////////////////////////////// // // Data Encryption - ProtectedData // ///////////////////////////////
// Create the original data to be encrypted toEncrypt = UnicodeEncoding.ASCII.GetBytes("This is some data
of any length."); // Create a file. FileStream fStream = new FileStream("Data.dat", FileMode.OpenOrCreate);
// Create some random entropy. byte[] entropy = CreateRandomEntropy(); Console.WriteLine();
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting and writing to disk..."); // Encrypt a copy of the data to the stream. int
bytesWritten = EncryptDataToStream(toEncrypt, entropy, DataProtectionScope.CurrentUser, fStream);
fStream.Close(); Console.WriteLine("Reading data from disk and decrypting..."); // Open the file. fStream =
new FileStream("Data.dat", FileMode.Open); // Read from the stream and decrypt the data. byte[]
decryptData = DecryptDataFromStream(entropy, DataProtectionScope.CurrentUser, fStream,
bytesWritten); fStream.Close(); Console.WriteLine("Decrypted data: " +
UnicodeEncoding.ASCII.GetString(decryptData)); } catch (Exception e) { Console.WriteLine("ERROR: " +
e.Message); } } public static void EncryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope ) { if
(Buffer.Length <= 0) throw new ArgumentException("Buffer"); if (Buffer == null) throw new
ArgumentNullException("Buffer"); // Encrypt the data in memory. The result is stored in the same same
array as the original data. ProtectedMemory.Protect(Buffer, Scope); } public static void
DecryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope) { if (Buffer.Length <= 0) throw new
ArgumentException("Buffer"); if (Buffer == null) throw new ArgumentNullException("Buffer"); // Decrypt
the data in memory. The result is stored in the same same array as the original data.
ProtectedMemory.Unprotect(Buffer, Scope); } public static byte[] CreateRandomEntropy() { // Create a byte
array to hold the random value. byte[] entropy = new byte[16]; // Create a new instance of the
RNGCryptoServiceProvider. // Fill the array with a random value. new
RNGCryptoServiceProvider().GetBytes(entropy); // Return the array. return entropy; } public static int
EncryptDataToStream(byte[] Buffer, byte[] Entropy, DataProtectionScope Scope, Stream S) { if
(Buffer.Length <= 0) throw new ArgumentException("Buffer"); if (Buffer == null) throw new
ArgumentNullException("Buffer"); if (Entropy.Length <= 0) throw new ArgumentException("Entropy"); if
(Entropy == null) throw new ArgumentNullException("Entropy"); if (S == null) throw new
ArgumentNullException("S"); int length = 0; // Encrypt the data in memory. The result is stored in the same
same array as the original data. byte[] encrptedData = ProtectedData.Protect(Buffer, Entropy, Scope); //
Write the encrypted data to a stream. if (S.CanWrite && encrptedData != null) { S.Write(encrptedData, 0,
encrptedData.Length); length = encrptedData.Length; } // Return the length that was written to the stream.
Visual C# Consolidado 607
return length; } public static byte[] DecryptDataFromStream(byte[] Entropy, DataProtectionScope Scope,
Stream S, int Length) { if (S == null) throw new ArgumentNullException("S"); if (Length <= 0 ) throw new
ArgumentException("Length"); if (Entropy == null) throw new ArgumentNullException("Entropy"); if
(Entropy.Length <= 0) throw new ArgumentException("Entropy"); byte[] inBuffer = new byte[Length];
byte[] outBuffer; // Read the encrypted data from a stream. if (S.CanRead) { S.Read(inBuffer, 0, Length);
outBuffer = ProtectedData.Unprotect(inBuffer, Entropy, Scope); } else { throw new IOException("Could not
read the stream."); } // Return the length that was written to the stream. return outBuffer; } }
Compilando o cdigo
Use the -customuser path option instead of the user policy-level option.
The customuser option points Caspol.exe to a specified user security configuration file. Note
that customuser must be followed by the path to the user security configuration file.
O comando a seguir lista os grupos de cdigos no usurio arquivo de configurao de diretiva
de segurana localizado em C:\config_test\.
caspol customuser "C:\config_test\security.config" listgroups
Visual C# Consolidado 620
Quando voc especifica a all opo antes da opo Nvel de diretiva para listar ou resolver
Diretiva, Caspol.exe considera todos os nveis de diretiva (usurio, mquina, e empresa).A -all
opo sempre usa a diretiva para o usurio atual. No entanto, voc pode usar a diretiva para outro
usurio em uma lista de todos os nveis de diretiva ou uma resoluo da diretiva em nveis de
diretiva.
Para listar ou resolver toda a diretiva nveis para um usurio que no seja o usurio atual
Se um conjunto executado mas no, Deve ou se acessar recursos que ele no deve
acessar (tais como recursos necessrios para criar caixas de dilogo), um conjunto o conjunto
provavelmente tem sido receber permisses muitos. Use the resolveperm option to
determine which permissions the assembly has been granted. Then use the resolvegroups
option to determine which code groups it belongs to. Alterar as condies de participao ou os
conjuntos dos grupos de cdigos associados para limitar as permisses concedidas ao
conjunto de permisses associado.
COMO: Exibir Conjuntos de Permisso Usando Caspol.exe
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) voc pode usar para
listar a permisso define pertencentes para todos os nveis de diretiva ou para um nvel nica
diretiva.
Para exibir a permisso conjuntos usados em um nvel de diretiva
Use the -zone option, and specify Intranet as the membership value.
The following command associates the Everything permission set with code from the intranet.
The code group is also given the name Intranet_CG. You can use this name to refer to the
newly created code group, rather than using its numeric labels.
caspol addgroup 1.1. zone Intranet Everything name "Intranet_CG"
To add a code group that targets code from the Internet Explorer Trusted sites
Use the zone option, and specify Trusted as the membership value.
The following command associates the LocalIntranet permission set with code from the trusted
zone and inserts the new code group as a child of the root of the code group hierarchy.
caspol -addgroup All_Code -zone Trusted LocalIntranet
To add a code group that targets a specific software publisher
Use the pub option, and specify a certificate file, a signed file, or the hexadecimal
representation of an X.509 certificate.
Visual C# Consolidado 625
Files from a software publisher must be signed appropriately for this membership condition to
work. The membership condition can be constructed on the basis of either an actual certificate
file or a signed .exe file.
Suppose the certificate file for FourthCoffee (FourthCoffee.cer) is available. The following
command adds a code group in the machine policy for code published by FourthCoffee and
associates the Nothing permission set with the new group. The code group is added as a child
code group of the root.
caspol machine addgroup 1 pub cert FourthCoffee.cer Nothing
To add a code group that targets code from a particular Web site
Use the site option, and specify the URL of the Web site.
Observao
Due to the possibility of DNS name spoofing, using a Web site as a membership condition is not an
effective way to ascertain the identity of code. Where possible, use a strong name membership
condition, publisher membership condition, or the hash membership condition.
The following command associates the Intranet permission set with code from
www.microsoft.com.
Use the url option, and specify the URL of the site.
The URL must include a protocol, such as http://, http://, or ftp://. Additionally, a wildcard
character (*) can be used to specify multiple assemblies from a particular URL.
Observao
Because a URL can be identified using multiple names, using a URL as a membership condition is
not a safe way to ascertain the identity of code. Where possible, use a strong name membership
condition, a publisher membership condition, or the hash membership condition.
caspol user addgroup 1 url http://www.contoso.com/bin/* FullTrust caspol user addgroup 1 url
http://www.contoso.com/bin/MyAssembly.dll FullTrust
To add a code group that overrides other permissions at a policy level
Use the custom option, and specify an XML file that contains the XML serialization of the
custom membership condition.
Visual C# Consolidado 626
Caspol.exe supports the use of custom membership conditions in policy, which makes the
policy system highly extensible.
The following command adds a new code group to the root of the user policy. This new code
group contains a custom membership condition found in the NewMembershipCondition.xml file
and grants full trust to assemblies matching this membership condition.
caspol user addgroup All_Code custom NewMembershipCondition.xml FullTrust
To add a code group with a name and description
1. Use the name option, and specify a name for the code group. Double quotes (" ") are
required around names that contain spaces.
2. Use the description option, and specify a description for the code group.
You can use the name later to refer to a code group. The name provides better support than
numeric labels for scripting policy changes.
Default policy is shipped with default names. If not explicitly changed by an administrator, the
default names make it easy for administrators using Caspol.exe to access specific code groups
across policies and computers.
The following command adds a code group under the All_Code group in the machine policy. The
new code group checks for a FourthCoffee strong name (as found on Signed.exe) and grants
FullTrust to all code that is so signed. The code group is named FouthCoffeeStrongName and is
given an appropriate description.
caspol machine addgroup All_Code strong file signed.exe FullTrust name FouthCoffeeStrongName
description "Code group granting trust to code signed by FourthCoffee"
Observao
If the same name is present in more than one code group, Caspol.exe resolves to the first code
group it can find with the given name. It searches all the child code groups of a code group before
searching sibling groups.
COMO: Substituir o Mecanismo de Auto-Proteo do Caspol.exe
O Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) contm um mecanismo
Self-Protection que impede alteraes de diretiva de segurana que causaria-lo para cessar
funcionando. Voc pode substituir esse mecanismo Self-Protection, se necessrio. Por exemplo,
um administrador talvez precise substituir o mecanismo Self-Protection para atualizar a
segurana, mesmo que Caspol.exe pode no funcionar corretamente posteriormente.
Para substituir o mecanismo Self-Protection Caspol.exe
Use a force opo para a diretiva Alterar opo que caso contrrio, ser rejeitada pelo
Caspol.exe.
O comando a seguir altera grupo de cdigo raiz a diretiva Usurio para associ-lo ao
Nothing conjunto de permisses.
caspol force user chggroup 1 Nothing
Cuidado
Visual C# Consolidado 627
Use esta opo somente com extrema cautela. Ele poder causar Caspol.exe para falhar ou
cessar funcionando, nesse caso, a recover opo no pode ser aplicada porque Caspol.exe no
pode ser executado.
Observao
Se isso ocorrer, voc pode executar o equivalente de uma recover operao manual.A mquina
submetidos a backup e diretiva de usurio so gravadas em arquivos Security.CFG.old.
Simplesmente excluir o arquivo Security.cfg em onde voc fez a alterao, o nvel de diretiva e
renomear o arquivo Security.CFG.old para Security.CFG. Para obter mais informaes sobre onde
esses arquivos esto localizados, consulte Arquivos de configurao de segurana.
COMO: Criar Grupos de Cdigo
Quando voc cria um grupo de cdigos usando a ferramenta .NET Framework Configuration
(Mscorcfg.msc), voc tambm deve associar o grupo com uma condio de membro e um
conjunto de permisses.
Para criar cdigo grupos usando Mscorcfg.msc
1. Execute a ferramenta .NET Framework Configuration (Mscorcfg.msc).
1. No Painel de Controle, abra Ferramentas administrativas.
2. Clique duas vezes Microsoft .NET Framework <version> Configuration.
Como alternativa, voc pode executar a ferramenta em um prompt de comando:
o
Nas verses do .NET Framework 1.0 e 1.1, digite o seguinte no prompt de
comando: %Systemroot%\Microsoft.NET\Framework\versionNumber\Mscorcfg.msc.
o
Do Prompt de comando SDK no incio .NET Framework 2.0, e tipo mscorcfg.msc.
2. Expanda o Runtime Security Policy n.
3. Expanda o n para o nvel de diretiva voc deseja adicionar o grupo de cdigos para.
4. Expanda o Code Groups n e expanda rvore sob o All_code n.
5. Clique com o boto direito do mouse no grupo de cdigo que ser o pai imediato do novo
grupo de cdigos, e escolha New.
6. D ao grupo de cdigo um nome e, opcionalmente, uma descrio. Clique em Next.
7. Selecione uma condio de membro na caixa drop-down. Siga as instrues para inserir
as informaes solicitadas para a condio de membro. Clique em Next.
8. Escolha um conjunto de permisses existente a partir da caixa drop-down ou selecione
Create a new permission set. Clique em Next e, clique em Finish.
COMO: Desativar a Coleta de Lixo Concorrente
O Common Language Runtime (CLR) ou pode executar coleta de lixo simultaneamente em um
segmento separado ou no mesmo segmento como o aplicativo. Use o < gcConcurrent > elemento
para especificar como o Runtime deve ser executado coleta de lixo. A seguir mostra para
desativar coleta de lixo simultneas.
Exemplo
<configuration> <runtime> <gcConcurrent enabled="false"/> </runtime> </configuration>
Visual C# Consolidado 628
Por padro, o tempo de execuo executa coleta de lixo simultaneamente, que reduz o
desempenho. Se seu aplicativo segmento nico e envolve interao usurio intensivo, deixe
coleta de lixo simultneas ativada para o aplicativo no faz pausa para executar coleta de lixo. Se
seu aplicativo tem um aplicativo do servidor ASP.NET, no preciso alterar o valor padro de
elemento <gcConcurrent>.
COMO: Importar um Grupo de Cdigo Usando um Arquivo XML
Um aplicativo pode exigir que voc adicionar um grupo cdigo especfico do aplicativo diretiva
de segurana. O aplicativo pode fornecidos com um conjunto que implementa o novo grupo de
cdigos e um arquivo XML que contm um serializao do novo grupo de cdigos. O arquivo XML
pode ser importado para diretiva de segurana usando o Ferramenta .NET Framework
Configuration (Mscorcfg.msc). O arquivo XML tambm pode conter informaes sobre
participao o conjunto condio e permisses associada ao grupo de cdigos. Normalmente, o
aplicativo atender condio de participao especificado e precisa definir a permisso
associada.
O exemplo a seguir mostra como informaes para um grupo de cdigos e seu conjunto condio
e permisso de membros associados podem exibidas em um arquivo XML.
Exemplo
<CodeGroup class="System.Security.Policy.UnionCodeGroup, mscorlib, Version=1.0.2411.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Name="myCodeGroup"
Description="test code group"> <IMembershipCondition class="MyCustomMembershipCondition,
myAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1"
Url="http://www.microsoft.com/"/> <PermissionSet class="NamedPermissionSet" version="1"
Name="MyPermissionSet" Description="Permission set containing my custom permission"> <IPermission
class="myCustomNamespace.CustomPermission, customPerm, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=64a85a7d791b1a32" version="1" Unrestricted="True"/> </PermissionSet> </CodeGroup>
O <CodeGroup> elemento contm informaes para um novo grupo de cdigos. O class e
version atributos so necessrios para o <CodeGroup> elemento. O class atributo aponta para a
classe e conjunto que implementa o novo grupo de cdigos. Valor do class atributo pode ser em
qualquer formato discutido no Especificando tipo nomes totalmente qualificados, mas geralmente
ser estar no formato mostrado no exemplo. Para esta verso do .NET Framework, o version
atributo " 1 ". O Name e Description atributos pode ser qualquer seqncia vlida e pode ser
editado. O Name atributo o nome da permisso definido como ele aparece na ferramenta .NET
Framework Configuration.
O <IMembershipCondition> elemento contm atributos ou elementos filho que especificam a
condio que conjuntos devem atender para se tornar um membro do grupo do cdigo e receber
suas permisses associadas. O class atributo para <IMembershipCondition> est no mesmo
formato que o class atributo para <CodeGroup>.
Se um <CodeGroup> elemento contm um <IMembershipCondition> elemento e uma
<PermissionSet> elemento , participao o conjunto condio e Permisso so associadas ao
grupo de cdigos automaticamente quando ele importado. Do Ferramenta .NET Framework
Configuration (Mscorcfg.msc) se uma desses elementos estiverem faltando, voc dever usar
para associar o item ausente com o novo grupo de cdigos. Para obter detalhes, consulte
Configurar grupos de cdigos usando a ferramenta Configurao .NET Framework.
COMO: Criar uma Poltica do Publisher
Visual C# Consolidado 629
Fornecedores de conjuntos podem estado que aplicativos devem usar uma verso mais recente
de um conjunto, incluindo um arquivo de diretiva do editor com o conjunto atualizado. O arquivo de
diretivas do editor especifica redirecionamento do conjunto e configuraes base de cdigo, e usa
o mesmo formato como um arquivo de configurao do aplicativo. O arquivo de diretivas do editor
compilado em um conjunto e inserido no cache de conjunto global.
H trs etapas envolvidas ao criar uma diretiva do editor:
1. Criar um arquivo de diretivas do editor.
2. Cria um conjunto da diretiva do editor.
3. Incluir o conjunto da diretiva do editor para o cache de conjunto de mdulos global.
O esquema da diretiva do editor est descrita em Redirecionando verses assembly. O exemplo a
seguir mostra um editor que redireciona uma verso do myAssembly para outro arquivo de diretiva.
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" /> <!-- Redirecting to version 2.0.0.0 of the assembly. --> <bindingRedirect
oldVersion="1.0.0.0" newVersion="2.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>
</configuration>
Para saber como especificar uma base de cdigo, consulte Especificar local um conjunto na.
Criando o conjunto da diretiva Publisher
Do Vinculador do conjunto (AL.exe) uso para criar o conjunto da diretiva do editor.
Para criar um conjunto da diretiva do editor
Type ildasm <assembly name> at the command prompt. Por exemplo, o comando a seguir
desmonta o Hello.exe conjunto.
ildasm Hello.exe
Para exibir informaes manifesto do conjunto
Quando voc fazer uma referncia em tempo de execuo a um conjunto de nome seguro,
por exemplo, usando voc deve usar o nome de exibio do conjunto de nome seguro
referenciado. ou Assembly.GetType mtodos, o Assembly.Load A sintaxe de um nome de
exibio a seguinte:
< assembly name>, <version number>, <culture>, <public key token>
Por exemplo:
myDll, Version=1.1.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33
Do PublicKeyToken, neste exemplo, a forma hexadecimal do smbolo de chave pblica. Se
houver nenhum valor de cultura, use Culture=neutral.
O exemplo de cdigo a seguir mostra como usar essas informaes com o Assembly.Load
mtodo.
C#
Assembly.Load("myDll,Version=1.0.0.1,Culture=neutral,PublicKeyToken=9b35aa32c18d4fb1");
Voc pode imprimir o formato hexadecimal da chave pblica e smbolo de chave pblica para um
conjunto especfico usando o seguinte Ferramenta nome forte (SN.exe) Comando:
Visual C# Consolidado 660
sn -Tp <assembly>
Se voc tiver um arquivo chave pblico, use o seguinte comando em vez disso (observe a
diferena no caso com a opo de linha de comando):: (observe a diferena no caso com a opo
de linha de comando)
sn -tp <assembly>
Como: Descarregar um domnio de aplicativo
Quando voc tiver terminado usando um domnio de aplicativo, descarreg-lo usando o
System.AppDomain.Unload mtodo. O Unload mtodo normalmente desliga o domnio do
aplicativo especificado. Durante o processo descarregando, nenhum novo segmento pode
acessar o domnio de aplicativo, e so liberadas estruturas dados especficos de domnio do
aplicativo todos os.
Conjuntos carregados no domnio de aplicativo so removidas e no esto mais disponveis. Se
um conjunto no domnio do aplicativo domnio neutro-, dados para o conjunto permanece na
memria at que o processo inteiro desligado. No h nenhum mecanismo para descarregar um
conjunto-domnio neutro diferente desligar o processo inteiro. H situaes em que a solicitao
para descarregar um domnio de aplicativo no funciona e resulta em um
CannotUnloadAppDomainException.. um CannotUnloadAppDomainException
O exemplo a seguir cria um novo domnio denominado MyDomain do aplicativo, imprime algumas
informaes ao console, e depois descarrega o domnio do aplicativo. Observe que o cdigo tenta
imprimir o nome amigvel do domnio do aplicativo descarregado para o console. Essa ao gera
uma exceo que tratada pelas instrues try / catch no final do programa.
Exemplo
C#
using System; using System.Reflection; class AppDomain2 { public static void Main() {
Console.WriteLine("Creating new AppDomain."); AppDomain domain =
AppDomain.CreateDomain("MyDomain", null); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
AppDomain.Unload(domain); try { Console.WriteLine(); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); // The following statement creates an exception because the
domain no longer exists. Console.WriteLine("child domain: " + domain.FriendlyName); } catch
(AppDomainUnloadedException e) { Console.WriteLine("The appdomain MyDomain does not exist."); } } }
Como Remover um Assembly de Cache Global de Assemblies
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para remover um conjunto de cache de
conjunto global.
Para remover um conjunto de cache de conjunto global
Usando uma extenso do shell do Windows fornecido pelo SDK do .NET Framework
chamado o Visualizador cache do conjunto (Shfusion.dll).
A extenso do shell permite que voc a arrastar conjuntos para cache de conjunto global.
Assim que voc criar o par de chaves, voc deve colocar o arquivo em que ele pode
localizar o nome de alta segurana assinatura ferramentas.
Ao assinar um conjunto com um nome de alta segurana, a Vinculador do conjunto (AL.exe)
Aparncia da chave arquivos relativo para a pasta atual e para o diretrio de sada. Ao usar linha
comando compiladores, basta copiar a chave para a pasta atual que contm seus mdulos de
cdigo.
Se voc estiver usando um IDE, tais como Visual Studio 2005, para assinar um conjunto com um
nome de alta segurana, necessrio compreender onde o IDE procura o arquivo de chave. Por
exemplo, Visual Basic 2005 procura pelo arquivo de chave no diretrio que contm a Soluo
Visual Studio, enquanto o compilador C# procura o arquivo de chave no diretrio que contm o
binrio. Coloque o arquivo de chave no diretrio do projeto adequado e defina o atributo de
arquivo da seguinte maneira:
Visual Basic
<Assembly: AssemblyKeyFileAttribute("key.snk")>
C#
Visual C# Consolidado 667
[assembly: AssemblyKeyFileAttribute(@"..\..\key.snk")]
Como Incorporar Bibliotecas de Tipo como Recursos Win32 em Aplicativos Baseados no .NET
Voc pode compactar uma biblioteca de tipos como um arquivo separado ou incorpor-lo como
arquivo recurso Win32 dentro de um aplicativo baseado em .NET. O Microsoft Visual Basic 6.0
executado essa tarefa para voc automaticamente; no entanto, ao usar Microsoft Visual Basic
2005, voc deve incorporar sua biblioteca tipo manualmente.
Para incorporar uma biblioteca de tipos como um recurso do Win32 em um aplicativo baseado em
.NET
1. Compilar o aplicativo gerenciado como um arquivo de biblioteca. Por exemplo, para criar
um conjunto para um aplicativo chamado MyApp, digite o seguinte comando no prompt de
comando:
Visual Basic
vbc /t:library MyApp.vb
C#
csc /t:library MyApp.cs
2. Exportar um arquivo biblioteca tipo do seu conjunto usando o Tipo Exporter da biblioteca
(TlbExp.exe). No prompt de comando, digite o seguinte comando:
tlbexp MyApp.dll /out:mytypelib.tlb
3. Criar um script de recursos que contenha a instruo a seguir:
IDR_TYPELIB1 typelib "mytypelib.tlb"
Para este exemplo, o nome de arquivo script myresource.rc.
4. Compilar o script usando o Microsoft Windows Resource compiler (Rc.exe). No prompt de
comando, digite o seguinte comando:
rc myresource.rc
Rc.exe produz ao myresource.res arquivo de recurso.
5. Compile o arquivo de origem novamente e especifique o arquivo de recurso. No prompt de
comando, digite o seguinte comando:
Visual Basic
vbc /t:library MyApp.vb /win32res:myresource.res
C#
csc /t:library MyApp.cs /win32res:myresource.res
Como Gerar Assemblies de Interoperabilidade Primrios Usando Tlbimp.exe
A maneira mais simples para produzir conjuntos de interoperabilidade primrias consiste em usar
o Importador de Biblioteca de Tipos (TLBIMP.exe).
Para gerar um conjunto de interoperabilidade primrio usando TLBIMP.exe
Use o seguinte cdigo para criar uma nova classe de exceo chamado NoAccessException
e mape-lo para o HRESULT E_ACCESSDENIED.
C++
Class NoAccessException : public ApplicationException { NoAccessException () { HResult =
E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
Voc pode encontrar um programa (em qualquer linguagem de programao) que usa um cdigo
tanto gerenciados e no gerenciados ao mesmo tempo. Por exemplo, o empacotador
personalizado no exemplo de cdigo a seguir usa o Marshal.ThrowExceptionForHR(int
HResult) mtodo para acionar uma exceo com um valor HRESULT especfico. O mtodo
procura o HRESULT e gera o tipo de exceo apropriado. Por exemplo, o HRESULT no
fragmento de cdigo a seguir gera ArgumentException.
C++
CMyClass::MethodThatThrows { Marshal.ThrowExceptionForHR(COR_E_ARGUMENT); }
A tabela a seguir fornece o mapeamento completo de cada HRESULT sua classe de exceo
comparvel no .NET Framework.
Visual C# Consolidado 676
HRESULT Exceo .NET
MSEE_E_APPDOMAINUNLOADED AppDomainUnloadedException
COR_E_APPLICATION ApplicationException
COR_E_ARGUMENT ou E_INVALIDARG ArgumentException
COR_E_ARGUMENTOUTOFRANGE ArgumentOutOfRangeException
COR_E_ARITHMETIC ou
ERROR_ARITHMETIC_OVERFLOW
ArithmeticException
COR_E_ARRAYTYPEMISMATCH ArrayTypeMismatchException
COR_E_BADIMAGEFORMAT ou
ERROR_BAD_FORMAT
BadImageFormatException
COR_E_COMEMULATE_ERROR COMEmulateException
COR_E_CONTEXTMARSHAL ContextMarshalException
COR_E_CORE CoreException
NTE_FAIL CryptographicException
COR_E_DIRECTORYNOTFOUND ou
ERROR_PATH_NOT_FOUND
DirectoryNotFoundException
COR_E_DIVIDEBYZERO DivideByZeroException
COR_E_DUPLICATEWAITOBJECT DuplicateWaitObjectException
COR_E_ENDOFSTREAM EndOfStreamException
COR_E_TYPELOAD EntryPointNotFoundException
COR_E_EXCEPTION Exceo
COR_E_EXECUTIONENGINE ExecutionEngineException
COR_E_FIELDACCESS FieldAccessException
COR_E_FILENOTFOUND ou
ERROR_FILE_NOT_FOUND
FileNotFoundException
COR_E_FORMAT FormatException
COR_E_INDEXOUTOFRANGE IndexOutOfRangeException
COR_E_INVALIDCAST ou E_NOINTERFACE InvalidCastException
COR_E_INVALIDCOMOBJECT InvalidComObjectException
COR_E_INVALIDFILTERCRITERIA InvalidFilterCriteriaException
COR_E_INVALIDOLEVARIANTTYPE InvalidOleVariantTypeException
COR_E_INVALIDOPERATION InvalidOperationException
COR_E_IO IOException
COR_E_MEMBERACCESS AccessException
COR_E_METHODACCESS MethodAccessException
Visual C# Consolidado 677
COR_E_MISSINGFIELD MissingFieldException
COR_E_MISSINGMANIFESTRESOURCE MissingManifestResourceException
COR_E_MISSINGMEMBER MissingMemberException
COR_E_MISSINGMETHOD MissingMethodException
COR_E_MULTICASTNOTSUPPORTED MulticastNotSupportedException
COR_E_NOTFINITENUMBER NotFiniteNumberException
E_NOTIMPL NotImplementedException
COR_E_NOTSUPPORTED NotSupportedException
OrE_POINTER COR_E_NULLREFERENCE NullReferenceException
COR_E_OUTOFMEMORY ou
E_OUTOFMEMORY
OutOfMemoryException
COR_E_OVERFLOW OverflowException
COR_E_PATHTOOLONG ou
ERROR_FILENAME_EXCED_RANGE
PathTooLongException
COR_E_RANK RankException
COR_E_REFLECTIONTYPELOAD ReflectionTypeLoadException
COR_E_REMOTING RemotingException
COR_E_SAFEARRAYTYPEMISMATCH SafeArrayTypeMismatchException
COR_E_SECURITY SecurityException
COR_E_SERIALIZATION SerializationException
OrERROR_STACK_OVERFLOW
COR_E_STACKOVERFLOW
StackOverflowException
COR_E_SYNCHRONIZATIONLOCK SynchronizationLockException
COR_E_SYSTEM SystemException
COR_E_TARGET TargetException
COR_E_TARGETINVOCATION TargetInvocationException
COR_E_TARGETPARAMCOUNT TargetParameterCountException
COR_E_THREADABORTED ThreadAbortException
COR_E_THREADINTERRUPTED ThreadInterruptedException
COR_E_THREADSTATE ThreadStateException
COR_E_THREADSTOP ThreadStopException
COR_E_TYPELOAD TypeLoadException
COR_E_TYPEINITIALIZATION TypeInitializationException
COR_E_VERIFICATION VerificationException
COR_E_WEAKREFERENCE WeakReferenceException
Visual C# Consolidado 678
COR_E_VTABLECALLSNOTSUPPORTED VTableCallsNotSupportedException
Todos os outros HRESULTs COMException
Para recuperar informaes de erro estendidas, o cliente gerenciado deve examinar os campos do
objeto de exceo que foi gerado. Para o objeto de exceo para fornecer informaes teis
sobre um erro, o objeto COM deve implementa a IErrorInfo interface. Tempo de Execuo utiliza
as informaes fornecidas por IErrorInfo para inicializar o objeto de exceo.
Se o objeto COM no oferece suporte IErrorInfo, o Runtime Inicializa um objeto de exceo com
valores padro. A tabela a seguir lista cada campo associado a um objeto de exceo e identifica
a fonte de informaes padro quando o objeto com oferece suporte IErrorInfo.
Observe que o Runtime s vezes ignorar uma HRESULT casos em onde h um IErrorInfo
presente no segmento. Este comportamento pode ocorrer em casos onde. e HRESULT o
IErrorInfo no representam o mesmo erro
Campo Exceo Fonte de informaes de com
ErrorCode HRESULT retornado da chamada.
HelpLink Se IErrorInfo->HelpContext diferente de zero, a seqncia formada pelas
concatenao IErrorInfo->GetHelpFile e " # ". e IErrorInfo-
>GetHelpContext Caso contrrio a seqncia retornada de IErrorInfo-
>GetHelpFile.
InnerException Sempre uma referncia nula (Nothing no Visual Basic.)
Message
(Mensagem)
Seqncia de caracteres retornada de IErrorInfo->GetDescription.
Origem Seqncia de caracteres retornada de IErrorInfo->GetSource.
StackTrace O rastreamento da pilha.
TargetSite O nome do mtodo que retornados a falha HRESULT.
Campos exceo, como Message, Source a StackOverflowException., e StackTrace no esto
disponveis para
Como Editar Assemblies de Interoperabilidade
O Importador da biblioteca Tipo (TLBIMP.exe) converte assinaturas mtodo com a maioria em
assinaturas gerenciadas. No entanto, vrios tipos requer informaes adicionais que voc pode
especificar, editando o conjunto de interoperabilidade. Este tpico descreve como editar um
conjunto de interoperabilidade. O Empacotamento alteraes tpico identifica vrios casos que
exigem que voc para editar o conjunto de interoperabilidade e descreve as alteraes
necessrias.
Para especificar empacotamento alteraes no Microsoft intermedirios idioma (MSIL)
1. Gerar conjunto interoperacional inicial usando TLBIMP.exe. Por exemplo, para produzir um
conjunto chamado New.dll de New. TLB, digite o seguinte comando no prompt de comando:
tlbimp New.tlb /out:New.dll
2. No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
Visual C# Consolidado 679
3. Editar o MSIL conforme necessrio.
4. No prompt de comando, digite o seguinte comando para produzir a sintaxe apropriada
definindo um novo New.dll:
ilasm New.il /dll
Como Adicionar Referncias a Bibliotecas de Tipo
Gera Visual Studio 2005 um conjunto interoperacional que contm metadados quando voc
adiciona uma referncia a uma biblioteca de tipos determinado. Se um conjunto interoperacional
primrio estiver disponvel, Visual Studio usar o conjunto existente antes de gerar um novo
conjunto de interoperabilidade.
Para adicionar uma referncia a uma biblioteca de tipos
1. Instale o arquivo exe ou dll com em seu computador, a menos que um instalar.exe do
Windows executa a instalao para voc.
2. No menu Project, selecione References.
3. Selecione a COM guia.
4. Selecionar a biblioteca de tipos na lista Available References, ou procure o arquivo TLB.
5. Clique em OK.
Como Manipular Eventos Gerados por uma Fonte COM
Se voc estiver familiarizado com o modelo baseado em delegate-evento fornecido pelo .NET
Framework, no Consulte Tratamento e Raising eventos. Para obter detalhes especficos que se
aplicam a nesta seo, consulte Consumir eventos na mesma seo.
Um cliente .NET (coletor de eventos) pode receber eventos criados por um servidor COM
existente (origem de evento). Interoperabilidade com gera os representantes necessrios nos
metadados que forem includos no seu cliente gerenciado. Uma assinatura de representante
importados compreende a interface de evento do coletor, um sublinhado, o nome de evento, e a
palavra EventHandler: SinkEventInterface _ EventName EventHandler.
Observe que objetos com eventos em um cliente .NET que elevar exigir duas colees Garbage
Collector (GC) antes que so lanadas. Isso ocorre quando o ciclo de referncia que ocorre entre
objetos COM e clientes gerenciados. Caso voc precise explicitamente liberar um objeto com voc
deve chamar o Collect mtodo duas vezes.
Para interoperar com uma fonte de eventos COM existente
1. Obter Conjunto de Mdulos (Assembly o) de interoperabilidade primria para o servidor
COM se os tipos com forem a ser compartilhada por outros aplicativos. Um conjunto de
interoperabilidade primrio contm metadados que representa a biblioteca de tipos
convertido e assinado no editor.
Observao
Se o conjunto de interoperabilidade primrio no disponvel ou se o conjunto for a ser usado de
forma privada, voc pode importar a biblioteca de tipos usando API equivalente ou a Importador
da biblioteca Tipo (TLBIMP.exe) um.
2. O processo de converso gera um representante para cada evento; no entanto, voc s
precisa para coletar os eventos de seu interesse.
Visual C# Consolidado 680
3. Voc pode usar um navegador de metadados, como para identificar eventos
representantes. o Disassembler MSIL (Ildasm.exe),
4. Consumir eventos da fonte de eventos COM da mesma maneira que consome eventos de
uma origem de evento gerenciado.
Exemplo
O exemplo a seguir demonstra como abrir uma janela do Internet Explorer e Wire eventos criados
pelo InternetExplorer Objeto para manipuladores de eventos implementado no cdigo gerenciado.
Definies de tipos Internet Explorer (incluindo representantes de evento) so importadas como
metadados do SHDocVw.dll. O exemplo recpetores o TitleChange evento.
C#
namespace InternetExplorer { using System; using System.Runtime.InteropServices; using SHDocVw; public
class Explorer { public static void Main() { Explorer explorer = new Explorer(); explorer.Run(); } public void
Run() { Object o = null; String s; try { // Starts the browser. m_IExplorer = new
SHDocVw.InternetExplorer(); } catch(Exception e) { Console.WriteLine("Exception when creating Internet
Explorer object {0}", e); return; } // Wires your event handlers to m_IExplorer. SetAllEvents(); try { // Goes
to the home page. m_WebBrowser = (IWebBrowserApp) m_IExplorer; m_WebBrowser.Visible = true;
m_WebBrowser.GoHome(); // Starts navigating to different URLs. Console.Write("Enter URL (or enter to
quit): "); s = Console.ReadLine(); while (s != "" && m_IExplorer != null && m_WebBrowser != null) {
m_WebBrowser.Navigate(s, ref o, ref o, ref o, ref o); Console.Write("Enter URL (or enter to quit): "); s =
Console.ReadLine(); } m_WebBrowser.Quit(); } catch(Exception sE) { if (m_IExplorer == null &&
m_WebBrowser == null) { Console.WriteLine("Internet Explorer has gone away"); } else {
Console.WriteLine("Exception happens {0}", sE); } } } // Uses the += syntax for adding delegates to events.
void SetAllEvents() { if (m_IExplorer != null) { // Title Change event // DWebBrowserEvents2 is the name of
the sink event //interface. // TitleChange is the name of the event. //
DWebBrowserEvents2_TitleChangeEventHandler is the // delegate name assigned by TlbImp.exe.
DWebBrowserEvents2_TitleChangeEventHandler DTitleChangeE = new
DWebBrowserEvents2_TitleChangeEventHandler(OnTitleChange); m_IExplorer.TitleChange +=
DTitleChangeE; } } /////////////////////////////////////////////////////////////////////// // Define
event handlers. // Document title changed static void OnTitleChange(String Text) { Console.WriteLine("Title
changes to {0}", Text); } ////////////////////////////////////////////////////////////////////////// //
The following are class fields. static private SHDocVw.InternetExplorer m_IExplorer = null; static private
IWebBrowserApp m_WebBrowser = null; } }
Como Criar Wrappers Manualmente
Se voc optar por declarar tipos com manualmente no cdigo fonte gerenciado, o melhor lugar
para comear com uma biblioteca Arquivo ou tipo interface Definition Language (IDL) existente.
Quando voc no tem o arquivo IDL ou no possvel gerar um arquivo de biblioteca Tipo, voc
pode simular os tipos com criando declaraes gerenciadas e exportar o conjunto resultante para
uma biblioteca de tipos.
Para simular com tipos de fonte gerenciado
1. Declarar os tipos em um idioma que seja compatvel o com comum especificao (cls)
idioma e compilar o arquivo.
2. Exportar o conjunto que contm os tipos com o Tipo Exporter da biblioteca (TlbExp.exe).
Visual C# Consolidado 681
3. Usar a biblioteca de tipos com exportado como uma base para declarar tipos gerenciados
orientado com.
Para criar um invlucro Callable Runtime (RCW)
1. Supondo que voc tiver um arquivo IDL ou arquivo biblioteca Tipo, decidir quais classes e
interfaces voc deseja incluir no RCW personalizado. Voc pode excluir qualquer tipos que
voc no pretende usar diretamente ou indiretamente em seu aplicativo.
2. Criar um arquivo de origem em um idioma compatvel com CLS e declarar os tipos.
Consulte Biblioteca tipo para resumo de converso assembly Para uma descrio completa
do processo de converso de importao. Efetivamente, quando voc cria um RCW
personalizado, voc est executando a atividade de converso fornecida pelo tipo
manualmente o Importador da biblioteca Tipo (TLBIMP.exe). O Exemplo que segue este
tipos mostra procedimento em um arquivo de biblioteca IDL ou tipo e seus tipos
correspondentes no cdigo C#.
3. Quando as declaraes estiverem concludas, compile o arquivo como voc compila
qualquer outro cdigo de fonte gerenciado.
4. Como com os tipos importados com TLBIMP.exe, algumas exigem informaes adicionais
que voc pode adicionar diretamente a seu cdigo. Para obter detalhes, consulte Como
editar conjuntos Interop:.
Exemplo
O cdigo a seguir mostra um exemplo da interface e ISATestSATest Classe em IDL e os tipos
correspondentes no cdigo fonte C#.
Arquivo de biblioteca IDL ou tipo
[ object, uuid(40A8C65D-2448-447A-B786-64682CBEF133), dual, helpstring("ISATest Interface"),
pointer_default(unique) ] interface ISATest : IDispatch { [id(1), helpstring("method InSArray")] HRESULT
InSArray([in] SAFEARRAY(int) *ppsa, [out,retval] int *pSum); }; [ uuid(116CCA1E-7E39-4515-9849-
90790DA6431E), helpstring("SATest Class") ] coclass SATest { [default] interface ISATest; };
Wrapper no cdigo fonte gerenciado
C#
using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices;
[assembly:Guid("E4A992B8-6F5C-442C-96E7-C4778924C753")]
[assembly:ImportedFromTypeLib("SAServerLib")] namespace SAServer { [ComImport] [Guid("40A8C65D-
2448-447A-B786-64682CBEF133")] [TypeLibType(TypeLibTypeFlags.FLicensed)] public interface ISATest {
[DispId(1)] //[MethodImpl(MethodImplOptions.InternalCall, //
MethodCodeType=MethodCodeType.Runtime)] int InSArray( [MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType=VarEnum.VT_I4)] ref int[] param ); } [ComImport] [Guid("116CCA1E-7E39-4515-9849-
90790DA6431E")] [ClassInterface(ClassInterfaceType.None)]
[TypeLibType(TypeLibTypeFlags.FCanCreate)] public class SATest : ISATest { [DispId(1)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] extern int
ISATest.InSArray( [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_I4)] ref int[]
param ); } }
Como Registrar Assemblies de Interoperabilidade Primrios
Visual C# Consolidado 682
Voc dever registrar todos os adquirida primrio conjuntos interoperabilidade no seu computador
de desenvolvimento antes voc pode referi-las com Microsoft Visual Studio 2005. O Visual Studio
procurar e usa um conjunto interoperacional primrio na primeira vez que voc referncia um tipo
de uma biblioteca de tipos COM. Se Visual Studio no possvel localizar conjunto de mdulos
(assembly o) de interoperabilidade primria associado biblioteca tipo, ele solicitar que voc a
adquiri-lo ou oferece para criar um conjunto de interoperabilidade. Do Importador da biblioteca
Tipo (TLBIMP.exe) da mesma forma, tambm usa o Registro para localizar conjuntos de
interoperabilidade primrias.
Embora ele no seja necessrio para registrar conjuntos de interoperabilidade primrias a menos
que voc pretende usar Visual Studio, registro oferece duas vantagens:
Voc pode evitar acidentalmente gerar e usando um novo conjunto interoperacional se, em
algum momento no futuro, voc usar o Visual Studio para fazer referncia a um tipo para as
quais voc tem Conjunto de Mdulos (Assembly no registrado um) de interoperabilidade
primria.
Do Ferramenta de registro do conjunto (RegAsm.exe) uso para registrar um conjunto
interoperacional primrio.
Para registrar um conjunto interoperacional primrio
Permisses suficientes para poder para criar e executar projetos do aplicativo Windows
Forms no computador onde o .NET Framework instalado.
Para implementar uma classe derivada de DesignerActionList
1. No mesmo espao para nome que o componente, adicione a declarao para a classe
derivada de DesignerActionList.
C#
Visual C# Consolidado 720
public class ColorLabelActionList : System.ComponentModel.Design.DesignerActionList
2. Adicionar um construtor a esta classe que leva uma instncia do controle associado.
Fornecer um campo particular para manter uma referncia a essa instncia. Tambm
fornecer um campo particular para cache uma referncia DesignerActionService. Isso
ser usado para atualizar a lista.
C#
private ColorLabel colLabel;
C#
private DesignerActionUIService designerActionUISvc = null;
C#
public ColorLabelActionList( IComponent component ) : base(component) { this.colLabel =
component as ColorLabel; // Cache a reference to DesignerActionUIService, so the //
DesigneractionList can be refreshed. this.designerActionUISvc =
GetService(typeof(DesignerActionUIService)) as DesignerActionUIService; }
3. Adicionar mtodos e propriedades que voc deseja associar aos itens de marcas
inteligentes. Mtodos sero executados quando sua entrada de marca inteligente
correspondente selecionada. Propriedades devem ter sees Getter para que seu valor
atual seja exibido; eles opcionalmente podem ter sees setter que use o GetProperties
mtodo se seus valores tiverem que ser editvel da entrada de marca inteligente
correspondente.
Observao
Como o caso em todo o ambiente Design-time, uma propriedade capaz de sendo editados
somente se um dos tipos base fornecida pelo .NET Framework, o tipo pode ser convertido em
um tipo base por um fornecido TypeConverter, ou quando um personalizado UITypeEditor
fornecido.
C#
public Color ForeColor { get { return colLabel.ForeColor; } set {
GetPropertyByName("ForeColor").SetValue(colLabel, value); } }
C#
// Boolean properties are automatically displayed with binary // UI (such as a checkbox). public bool
LockColors { get { return colLabel.ColorLocked; } set {
GetPropertyByName("ColorLocked").SetValue(colLabel, value); // Refresh the list.
this.designerActionUISvc.Refresh(this.Component); } }
C#
public void InvertColors() { Color currentBackColor = colLabel.BackColor; BackColor = Color.FromArgb(
255 - currentBackColor.R, 255 - currentBackColor.G, 255 - currentBackColor.B); Color currentForeColor
= colLabel.ForeColor; ForeColor = Color.FromArgb( 255 - currentForeColor.R, 255 - currentForeColor.G,
255 - currentForeColor.B); }
4. Opcionalmente, implementar uma verso do GetSortedActionItems mtodo para retornar
uma matriz de DesignerActionItem instncias, onde cada item est associado a uma
propriedade ou mtodo criado na etapa anterior a substitudo. Faa isso para alterar a
Visual C# Consolidado 721
ordem dos itens, categoriz-los, ou opcionalmente mostr-las. A lista tambm pode incluir
estticos itens, como ttulos grupo lgico.
C#
public override DesignerActionItemCollection GetSortedActionItems() {
DesignerActionItemCollection items = new DesignerActionItemCollection(); //Define static section
header entries. items.Add(new DesignerActionHeaderItem("Appearance")); items.Add(new
DesignerActionHeaderItem("Information")); //Boolean property for locking color selections.
items.Add(new DesignerActionPropertyItem("LockColors", "Lock Colors", "Appearance", "Locks the
color properties.")); if (!LockColors) { items.Add(new DesignerActionPropertyItem("BackColor",
"Back Color", "Appearance", "Selects the background color.")); items.Add(new
DesignerActionPropertyItem("ForeColor", "Fore Color", "Appearance", "Selects the foreground
color.")); //This next method item is also added to the context menu // (as a designer verb).
items.Add(new DesignerActionMethodItem(this, "InvertColors", "Invert Colors", "Appearance",
"Inverts the fore and background colors.", true)); } items.Add(new
DesignerActionPropertyItem("Text", "Text String", "Appearance", "Sets the display text.")); //Create
entries for static Information section. StringBuilder location = new StringBuilder("Location: ");
location.Append(colLabel.Location); StringBuilder size = new StringBuilder("Size: ");
size.Append(colLabel.Size); items.Add(new DesignerActionTextItem(location.ToString(),
"Information")); items.Add(new DesignerActionTextItem(size.ToString(), "Information")); return
items; }
Para atualizar a classe Designer associada para implementar a propriedade ActionLists
1. Localize a classe Designer para o controle. Se um no existir, crie uma classe designer e
associ-la para a classe de controle. Para obter mais informaes sobre designers,
consulte Base classes do criador.
2. Como uma tcnica de otimizao, adicionar um campo particular do tipo
DesignerActionListCollection.
C#
private DesignerActionListCollection actionLists;
3. Adicionar a propriedade substituda ActionLists para retornar uma nova instncia da
classe ColorLabelActionList que voc criou anteriormente.
C#
public override DesignerActionListCollection ActionLists { get { if (null == actionLists) { actionLists =
new DesignerActionListCollection(); actionLists.Add( new ColorLabelActionList(this.Component)); }
return actionLists; } }
Comentrios
Vrias reas do cdigo merece uma explicao mais detalhada:
Uma entrada que exibe informaes texto esttico pode ser implementada usando um
DesignerActionTextItem ou um DesignerActionPropertyItem cujos associada propriedade
contm apenas um setter. Este exemplo usa a primeira abordagem.
Prximas etapas
Depois que voc ter iniciado integrar o componente para o ambiente em tempo de design,
considere expandir o suporte de designer.
Adicionar atributos a seu membros para facilitar a comunicao com o ambiente em tempo
de design. Para obter mais informaes, consulte Atributos do Windows Forms controles.
Gravar sua prprias designer personalizado. Para obter mais informaes, consulte
COMO: Criar um controle de formulrios do Windows que tira vantagem de recursos em tempo
de criao.
Passo-a-passo: Alterando a Mensagem SOAP Usando Extenses SOAP
Extenses SOAP pode ser inserido para a mensagem SOAP .NET Framework processamento
canal para modificar ou verificar uma mensagem de solicitao ou resposta SOAP enquanto ele
est sendo serializado ou desserializado, na Web em servio ou cliente. Este tpico passo a
passo mostra como criar e executar uma extenso SOAP. Para uma figura de como extenses
SOAP funcionam,, bem como a ordem na qual SOAP mtodos extenso so chamados no canal
de processamento de mensagem, consulte Modificao de mensagens SOAP usando extenses
SOAP.
Durante essa explicao passo a passo, voc aprender como:
Salvar referncias para os Stream objetos que representam futuras mensagens SOAP
antes e depois a extenso SOAP tenha feito seu processamento.
Modelo de cabealho
Modelo rodap
Item template
Modelo AlternatingItem
Modelo separador
Para editar o modelo
Visual C# Consolidado 730
1. Para este exemplo, selecione Edit Template no menu de atalho e depois escolha Header
and Footer Templates. Do Header Template o List controle na sua formulrios da Web
mveis pgina exibe e Footer Template caixas.
2. Opcionalmente, digite texto literal para o cabealho na caixa Header Template, e para o
rodap na caixa Footer Template . Como alternativa, voc pode arrastar controles de ou
Footer Template caixas., como um Label controle, para o Toolbox, o Header Template
3. Selecione Item TemplatesEdit Template no menu de atalho. O List controle na sua
pgina de formulrios da Web mvel exibe o modelo item e o modelo AlternatingItem. Se
voc editar o modelo AlternatingItem, por exemplo, pode definir plano de fundo de itens
alternadas para ser uma cor diferente:
1. Voc pode arrastar um controle de e configure as propriedades de controle que. tal
um Label controle, para o modelo item, o Toolbox, Por exemplo, voc pode definir a
ForeColor propriedade com a cor que voc deseja para o item texto ou o primeiro. e
cada indefinido item depois disso, se voc tambm definir um modelo AlternatingItem
2. Voc pode arrastar um controle de e configure as propriedades de controle que. tal
um Label controle, para o modelo AlternatingItem, o Toolbox, Por exemplo, voc
pode definir a ForeColor propriedade com a cor que voc deseja para o texto do
segundo item e cada item mesmo depois disso.
4. A partir do menu de atalho, selecione Edit Template, e escolha Separator Template. O
List controle na sua pgina de formulrios da Web mvel exibe o modelo separador para
edio. Adicione contedo ou um controle para o modelo separador seguindo um destes
procedimentos:
o
Type in a string of characters that you want to use for an item separator; for
example, hyphens (----------).
o
Arraste um Image controle para o modelo e especifique um arquivo grfico da Web
a ser usado como o separador item. Vincular a um arquivo grfico do separador que voc
deseja usar, utilizando a ImageUrl propriedade do controle Image.
5. Quando voc tiver terminado, selecione End Template Editing no menu de atalho.
Para aplicar propriedade substitui para um filtro dispositivo especfico
1. Na caixa Property Overrides de dilogo, o Applied Device Filter posicionamento em-
Para Baixo lista, clique no filtro do dispositivo que voc deseja aplicar; por exemplo,
isHTML32.
2. Agora a Property Overrides caixa de dilogo mostra as propriedades que voc pode
substituir. Configurar quaisquer propriedades que voc deseja alterar para que o Applied
Device Filter esteja exibido na parte superior da caixa de dilogo.
Passo-a-passo: Personalizando a Gerao de Descries de Servios e Classes Proxy
A gerao de descrio do servio e classes proxy de um servio da Web criados com ASP.NET
pode ser estendido por meio da criao e instalao de um extenso do formato da descrio do
servio (SDFE). Especificamente, um SDFE pode adicionar elementos XML para o descrio
do servio o documento Descrio Servios Web WSDL (linguagem para um servio da Web e
adicionar atributos personalizados para um mtodo comunicao com um servio da Web.
SDFEs so especialmente teis quando uma extenso SOAP deve executar com um servio da
Web e seus clientes; por padro, sem informaes sobre extenses SOAP so colocadas no
descrio do servio ou proxy classes gerado para ele. Um exemplo de uma extenso SOAP que
devem executados no cliente e servidor uma criptografia extenso SOAP. Se uma criptografia
extenso SOAP executada no servidor para criptografar a resposta SOAP, o cliente deve ter a
extenso SOAP executando para descriptografar a mensagem. Um SDFE pode adicionar
Visual C# Consolidado 731
elementos ao descrio do servio para informar aos clientes que uma extenso SOAP deve
executar, e o SDFE pode estender o proxy classe processo gerao para adicionar um atributo
personalizado para a classe proxy, que faz com a classe para executar a extenso SOAP.
Durante essa explicao passo a passo, voc aprender como:
1. Definir o XML para adicionar ao descrio do servio.
2. Criar uma classe SDFE por derivar a partir da ServiceDescriptionFormatExtension classe.
3. Escrever cdigo para estender o processo de gerao descrio do servio.
4. Gravar cdigo para estender o proxy classe processo gerao.
5. Configurar o SDFE para executar em tanto o cliente e servidor.
Definir o XML e criar a classe SDFE
Os exemplos de cdigo nessa explicao passo a passo envolver uma classe
ServiceDescriptionFormateExtension YMLOperationBinding para uma classe SoapExtension
YMLExtension. O cdigo completo aparece no tpico How to personalizar as descries do
servio gerao e classes proxy (cdigo de exemplo).:
Para definir o XML para adicionar ao descrio do servio
1. Decidir sobre o XML para adicionar ao descrio do servio.
O exemplo de cdigo a seguir a parte de um descrio do servio para que o exemplo
SDFE adiciona elementos XML. Especificamente, o exemplo SDFE declara um prefixo yml
namespace para XML do elemento raiz definitions de um documento WSDL, e aplica que
apaream na ligao operation elementos espao para nome para o yml:action elemento (e
elementos filho).
<definitions ... xmlns:yml="http://www.contoso.com/yml" > ... <binding name="HelloWorldSoap"
type="s0:HelloWorldSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" /> <operation name="SayHello"> <soap:operation
soapAction="http://tempuri.org/SayHello" style="document" /> <yml:action>
<yml:Reverse>true</yml:Reverse> </yml:action> </operation> ... </binding> ... </definitions>
2. Criar uma classe que deriva de ServiceDescriptionFormatExtension.
Ao usar Visual Studio. NET, adicione uma referncia ao conjunto System.Web.Services .
Tambm adicionar ou Imports instruo para espao para nome
System.Web.Services.Description para o arquivo. um using
O exemplo de cdigo a seguir cria a YMLOperationBinding classe, que deriva de
ServiceDescriptionFormatExtension.
C#
public class YMLOperationBinding : ServiceDescriptionFormatExtension
3. Aplicar classe. um XmlFormatExtensionAttribute
Este atributo especifica a etapa do processo de gerao descrio do servio, conhecido
como um ponto de extenso, no qual o SDFE executa. A tabela a seguir lista os pontos de
extenso definido e os elementos XML WSDL gerado durante cada ponto. Para o ponto de
extenso especificado, o elemento WSDL correspondente ficar o pai do elemento sendo
adicionado.
Ponto de extenso Descrio
Visual C# Consolidado 732
ServiceDescription Corresponde ao elemento raiz definitions de um documento WSDL.
Types Corresponde ao elemento types delimitados pelo elemento raiz definitions.
Binding Corresponde ao elemento binding delimitados pelo elemento raiz
definitions.
OperationBinding Corresponde ao elemento operation delimitados pelo binding elemento.
InputBinding Corresponde ao elemento input delimitados pelo operation elemento.
OutputBinding Corresponde ao elemento output delimitados pelo operation elemento.
FaultBinding Corresponde ao elemento fault delimitados pelo operation elemento.
Port Corresponde ao elemento port delimitados pelo service elemento.
Operation Corresponde ao elemento operation delimitados pelo portType elemento.
Ao aplicar para a classe, voc tambm especificar o nome do elemento XML e o
namespace para XML para conter os elementos XML para adicionar ao descrio do
servio. um XmlFormatExtensionAttribute
O exemplo de cdigo a seguir especifica que o YMLOperationBinding SDFE adiciona um
elemento XML chamado <action xmlns="http://www.contoso.com/yml"> para o descrio do
servio durante o OperationBinding ponto de extenso. Para esse exemplo, o
http://www.contoso.com/yml namespace para XML especificado mais tarde quando o
YMLOperationBinding.YMLNamespace campo adicionado classe.
C#
[XmlFormatExtension("action", YMLOperationBinding.YMLNamespace, typeof(OperationBinding))]
public class YMLOperationBinding : ServiceDescriptionFormatExtension
4. Opcionalmente, aplicar classe para associar o prefixo namespace para XML ao
namespace para XML usado pelo SDFE. um XmlFormatExtensionPrefixAttribute
O exemplo de cdigo a seguir especifica que o yml prefixo namespace para XML
associado ao espao para nome http://www.contoso.com/yml no elemento definitions do
descrio do servio. Alm disso, o prefixo usada em elementos adicionados pelo SDFE
em vez do espao para nome. Portanto, o elemento XML adicionadas para o descrio do
servio na etapa 3 agora usa o prefixo do espao para nome e assim o elemento
adicionado <yml:action> em vez de <action xmlns="http://www.contoso.com/yml">.
C#
[XmlFormatExtension("action", YMLOperationBinding.YMLNamespace, typeof(OperationBinding))]
[XmlFormatExtensionPrefix("yml", YMLOperationBinding.YMLNamespace)] public class
YMLOperationBinding : ServiceDescriptionFormatExtension
5. Adicionar propriedades pblicas e / ou campos classe que representa o XML a ser
adicionado ao documento WSDL. Exemplo de cdigo a seguir adiciona uma Reverse
propriedade pblica que serializado em um <yml:Reverse>value</yml:Reverse> elemento no
WSDL.
Visual C# Consolidado 733
C#
private Boolean reverse; [XmlElement("Reverse")] public Boolean Reverse { get { return reverse; } set
{ reverse = value; } }
Estendendo a gerao da descrio servio e Proxy Client
Para estender o processo de gerao WSDL, derivar uma classe a partir da
SoapExtensionReflector classe. Para estender a gerao de proxy cliente processo, derivar uma
classe a partir da SoapExtensionImporter classe.
Para estender o processo de gerao descrio do servio
1. Criar uma classe que deriva de SoapExtensionReflector.
O exemplo de cdigo a seguir cria a TraceReflector classe, que deriva de
SoapExtensionReflector.
C#
public class YMLReflector : SoapExtensionReflector
2. Substituir o ReflectMethod mtodo, que denominado durante a gerao descrio do
servio para cada mtodo de servio da Web.
O seguinte cdigo exemplo substitui o ReflectMethod.
C#
public override void ReflectMethod()
3. Obter o valor da propriedade ReflectionContext da classe SoapExtensionReflector para
obter uma instncia do ProtocolReflector.
A instncia do ProtocolReflector fornece detalhes sobre o processo de gerao WSDL para
o mtodo de servio da Web atual. . O exemplo de cdigo a seguir obtm o valor da
propriedade ReflectionContext
C#
ProtocolReflector reflector = ReflectionContext;
4. Adicione cdigo para preencher o SDFE.
O exemplo de cdigo a seguir adiciona o XML definidos pelo SDFE para o descrio do
servio se for aplicado a um mtodo de servio da Web. o YMLAttribute
C#
YMLAttribute attr = (YMLAttribute) reflector.Method.GetCustomAttribute(typeof(YMLAttribute)); //
If the YMLAttribute has been applied to this Web service // method, adds the XML defined in the
YMLOperationBinding class. if (attr != null) { YMLOperationBinding yml = new
YMLOperationBinding(); yml.Reverse = !(attr.Disabled);
5. Adicionar o SDFE coleo Extensions da propriedade que representa o ponto de
extenso a SDFE estender.
O exemplo de cdigo a seguir adiciona o YmlOperationBinding SDFE at o
OperationBinding ponto de extenso.
C#
reflector.OperationBinding.Extensions.Add(yml);
Para estender o proxy gerao classe processar
Visual C# Consolidado 734
1. Criar uma classe que deriva de SoapExtensionImporter.
C#
public class YMLImporter : SoapExtensionImporter
2. Substituir o ImportMethod mtodo.
O ImportMethod chamado durante a gerao de classe para cada operao definido em
um descrio do servio proxy. Cada mtodo de servio da Web de servios da Web
criados com ASP.NET, mapeia para uma operao para cada protocolo com suporte no
descrio do servio.
C#
public override void ImportMethod(CodeAttributeDeclarationCollection metadata)
3. Obter o valor da propriedade ImportContext do SoapExtensionImporter para obter uma
instncia do SoapProtocolImporter.
A instncia do SoapProtocolImporter fornece detalhes sobre o processo de gerao de
cdigo para o mtodo atual se comunicar com um mtodo de servio da Web. O exemplo
de cdigo a seguir obtm o valor da propriedade ImportContext.
C#
SoapProtocolImporter importer = ImportContext;
4. Adicione cdigo para aplicar ou modificar atributos para um mtodo na classe proxy que
est se comunicando com um servio da Web.
O ImportMethod passagens no um argumento de tipo CodeAttributeDeclarationCollection,
que representa a coleo de atributos que so aplicados para o mtodo que se comunica
com a Web Servio mtodo. O exemplo de cdigo a seguir adiciona coleo, que faz com
a YML extenso SOAP a executar com o mtodo quando o descrio do servio contm o
XML apropriado. um YMLAttribute
C#
// Checks whether the XML specified in the YMLOperationBinding is // in the service description.
YMLOperationBinding yml = (YMLOperationBinding) importer.OperationBinding.Extensions.Find(
typeof(YMLOperationBinding)); if (yml != null) { // Only applies the YMLAttribute to the method
when the XML should // be reversed. if (yml.Reverse) { CodeAttributeDeclaration attr = new
CodeAttributeDeclaration(typeof(YMLAttribute).FullName); attr.Arguments.Add(new
CodeAttributeArgument(new CodePrimitiveExpression(true))); metadata.Add(attr); } }
Configurando o SDFE
Para configurar o SDFE requer editar arquivos de configurao no servio da Web e cliente.
Para configurar o SDFE para executar com um servio da Web
1. Instalar o conjunto que contm o SDFE em uma pasta acessvel.
A menos que o SDFE seja necessria para vrios aplicativos da Web, instale o SDFE na
pasta \Bin do aplicativo da Web que hospeda o servio da Web.
2. Adicione um < serviceDescriptionFormatExtensionTypes > elemento com um add
elemento e especifique o nome e conjunto que contm o SDFE para o arquivo web.config
para o aplicativo da Web.
O exemplo de cdigo a seguir configura o Sample.YMLOperationBinding SDFE seja
executado com os servios da Web afetados pela no arquivo web.config. O elemento
completa add deve estar em uma linha.
Visual C# Consolidado 735
<system.web> <webServices> <serviceDescriptionFormatExtensionTypes> <add
type="Sample.YMLOperationBinding,Yml, Version=1.0.0.0,Culture=neutral,
PublicKeyToken=6e55c64c6b897b30"/> </serviceDescriptionFormatExtensionTypes>
</webServices> </system.web>
3. Adicione um <soapExtensionReflectorTypes> Element elemento com um add elemento e
especifique o nome e montagem da classe que estende o processo de gerao descrio
do servio para o arquivo web.config para o aplicativo da Web.
O exemplo de cdigo a seguir configura para executar com os servios da Web afetados
pela no arquivo web.config. o Sample.YMLReflector O elemento completa add deve estar em
uma linha.
<system.web> <webServices> <serviceDescriptionFormatExtensionTypes> <add
type="Sample.YMLOperationBinding,Yml, Version=1.0.0.0,Culture=neutral,
PublicKeyToken=6e55c64c6b897b30"/> </serviceDescriptionFormatExtensionTypes>
<soapExtensionReflectorTypes> <add type="Sample.YMLReflector,Yml,
Version=1.0.0.0,Culture=neutral, PublicKeyToken=6e55c64c6b897b30"/>
</soapExtensionReflectorTypes> </webServices> </system.web>
Para configurar o SDFE para executar com um cliente de servios da Web
1. Instalar o conjunto que contm o SDFE no cache de conjunto de mdulos global.
Para ser instalado, conjunto de mdulos (assembly) deve ser de nome seguro. Para obter
detalhes sobre como criar um conjunto de nome seguro, consulte Criando e usando
conjuntos Named STRONG-. Para obter detalhes sobre como instalar conjuntos, consulte
Instalar um assembly no no cache do conjunto de mdulos (assembly) global.
2. Adicione um <serviceDescriptionFormatExtensionTypes> Element elemento com um add
elemento e especifique o nome e conjunto que contm o SDFE para o arquivo
Machine.config.
O exemplo de cdigo a seguir configura o Sample.YMLOperationBinding SDFE para executar
sempre que classes proxy so geradas para servios da Web no computador.
<system.web> <webServices> <serviceDescriptionFormatExtensionTypes> <add
type="Sample.YMLOperationBinding,Yml, Version=1.0.0.0,Culture=neutral,
PublicKeyToken=6e55c64c6b897b30"/> </serviceDescriptionFormatExtensionTypes>
</webServices> </system.web>
3. Adicionar um <soapExtensionImporterTypes> Element elemento com um add elemento e
especifique o nome e montagem da classe que estende o proxy classe processo gerao
para o arquivo Machine.config.
O exemplo de cdigo a seguir configura para executar sempre que classes proxy so
geradas para servios da Web no computador. o Sample.YMLImporter
<system.web> <webServices> <serviceDescriptionFormatExtensionTypes> <add
type="Sample.YMLOperationBinding,Yml, Version=1.0.0.0,Culture=neutral,
PublicKeyToken=6e55c64c6b897b30"/> </serviceDescriptionFormatExtensionTypes>
<soapExtensionImporterTypes> <add type="Sample.YMLImporter,Yml,
Version=1.0.0.0,Culture=neutral, PublicKeyToken=6e55c64c6b897b30"/>
</soapExtensionImporterTypes> </webServices> </system.web>
Observao
Visual C# Consolidado 736
O mtodo gerado na classe proxy usado por um aplicativo cliente se comunicar com o servio
da Web, caso se um SDFE adiciona um atributo que reside em um conjunto do qual o aplicativo
cliente no notificado, um erro do compilador gerado. Para resolver o erro do compilador,
adicionar uma referncia ao conjunto que contm o atributo se usando Visual Studio. NET, ou
adicione montagem para a linha de comando do compilador se usando compilao de linha de
comando.
Passo-a-passo: Implantando um aplicativo ClickOnce manualmente
Essa explicao passo a passo descreve as etapas necessrias para criar uma implantao
completa ClickOnce usando a verso de linha de comando ou grfica da ferramenta manifesto
gerao e edio (Mage).
Se voc no usar o Visual Studio regularmente, precisar para automatizar o processo de
implantao, ou precisa para usar recursos de implantao avanadas, como confiveis
Implantao de aplicativo, voc deve usar a ferramenta de linha de comando Mage.exe para criar
seu ClickOnce manifestos. Explicao passo a passo o seguir leva voc por todos os as etapas
necessrias para gerar uma implantao completa ClickOnce usando a verso de linha de
comando (Mage.exe) ou a verso do Windows Forms (MageUI.exe) do manifesto gerao e
ferramenta de edio.
Pr-requisitos
Essa explicao passo a passo foram gravado sob a suposio que voc tiver um aplicativo
Windows Forms que voc est preparado para implantar; este aplicativo ser chamado para de
WindowsFormsApp1. Voc tambm deve instalar o .NET Framework Software Development Kit
(SDK).
H uma srie de questes voc precisar decidir antes de criar uma implantao. Primeiro e
foremost como voc vai distribuir a implantao:. Web a fim de um compartilhamento de arquivo,
ou instalado logoff de um CD Para obter mais informaes, consulte Viso geral sobre a
implantao do ClickOnce.
Em seguida, voc precisar determinar se o aplicativo ser executado em um nvel elevado de
confiana. Aplicativos conforme discutido no Viso geral da implantao de aplicativos confiveis,
por padro ClickOnce ser executado em uma zona parcialmente confivel, com suas permisses
exatos determinados pela se eles so hospedados em uma intranet ou da Internet. Se um
aplicativo precisa acessar dados no computador cliente, converse com dispositivos locais, chamar
funes da API do Windows, ou executar outras operaes potencialmente perigosas, ele
precisar declarar um maior nvel de confiana. Se o aplicativo requer confiana Total por
exemplo, acesso total ao sistema do usurio use Mage.exe para defini-la facilmente. Se voc
quiser definir uma permisso personalizada definida para seu aplicativo, voc pode copiar a seo
de permisso Internet ou intranet de outra manifesto, modific-lo para atender s suas
necessidades, e adicion-lo ao manifesto de aplicativo usando um editor de texto ou MageUI.exe
Os dois mtodos para declarar confiana em um ClickOnce manifesto superior so elevao
permisso e confiveis Implantao de aplicativo. Em ambos os casos, sua implantao deve ser
assinada com um certificado Autenticode gerados usando a ferramenta MakeCert.exe ou obtido
uma certificao autoridade (CA) de. Se voc optar por usar confiveis Implantao de aplicativo,
voc tambm deve executar uma instalao nica do certificado para todos os computadores
cliente. Para obter mais informaes, consulte Viso geral da implantao de aplicativos
confiveis.
Para implantar um aplicativo com a ferramenta de linha de comando Mage.exe
Visual C# Consolidado 737
1. Abra um .NET Framework Prompt de comando SDK, e altere para o diretrio em que voc
ir armazenar os ClickOnce arquivos.
2. Crie uma subpasta chamada bin e coloque todos os seus arquivos do aplicativo Incluindo
arquivos executveis, conjuntos, recursos, e arquivos de dados aqui,
3. Crie uma subpasta chamada aps a verso atual do sua implantao. Se esta for a
primeira vez voc estiver implantando o aplicativo, voc provavelmente escolher 1.0.0.0.
Observao
A verso da sua implantao pode estar distintas da verso dos arquivos do aplicativo.
4. Mover o diretrio \bin para a pasta que voc criou etapa 2.
5. Gerar manifesto de aplicativo com uma chamada para Mage.exe:
mage -New Application -ToFile 1.0.0.0\WindowsFormsApp1.exe.manifest -Name "Windows Forms
App 1" -Version 1.0.0.0 -FromDirectory 1.0.0.0\bin
6. Assinar manifesto de aplicativo com o certificado digital:
mage -Sign WindowsFormsApp1.exe.manifest -CertFile mycert.pfx
7. Gerar o manifesto de implantao com uma chamada para Mage.exe. Por padro,
Mage.exe ir, marcar a implantao ClickOnce como um aplicativo instalado, para que ele
pode ser executado tanto online e offline. Para tornar o aplicativo disponvel somente
quando o usurio est online, usar o -i Sinalizador com um valor de f. Se voc usar o
padro, e usurios ir instalar um aplicativo de um site da Web ou compartilhamento de
arquivo, certifique-se o valor dos pontos de sinalizador providerUrl para o local do manifesto
de aplicativo no servidor Web ou compartilhamento -.
mage -New Deployment -ToFile WindowsFormsApp1.application -Name "Windows Forms App 1" -
Version 1.0.0.0 -AppManifest 1.0.0.0\WindowsFormsApp1.manifest -providerUrl
http://www.adatum.com/WindowsFormsApp1/WindowsFormsApp1.application
8. Assinar o manifesto de implantao com o certificado:
mage -Sign WindowsFormsApp1.application -CertFile mycert.pfx
9. Copie todo dos arquivos na pasta atual incluindo a pasta de verso e a pasta \bin
para o destino de implantao. Isso pode ser qualquer uma pasta em um site da Web ou
FTP site, um compartilhamento de arquivo, ou um CD.
10. Fornecer os usurios com a URL, UNC ou mdia fsica necessria para instalar um
aplicativo. Se voc est fornecendo um URL ou UNC, voc deve atribuir os usurios o
caminho completo o manifesto de implantao. Por exemplo, caso WindowsFormsApp1
seja implantado para http://webserver01/ no diretrio WindowsFormsApp1, o caminho
completo URL seria http://webserver01/WindowsFormsApp1/WindowsFormsApp1.Deploy.
Implantando o aplicativo com a ferramenta Grfico MageUI.exe
1. Abra um .NET Framework Prompt de comando SDK, e navegue para a pasta em que voc
ir armazenar os ClickOnce arquivos.
2. Crie uma subpasta chamada bin e coloque todos os seus arquivos do aplicativo Incluindo
arquivos executveis, conjuntos, recursos, e arquivos de dados aqui.
3. Crie uma subpasta chamada aps a verso atual do sua implantao. Se esta for a
primeira vez voc estiver implantando o aplicativo, voc provavelmente escolher 1.0.0.0.
Visual C# Consolidado 738
Observao
A verso da sua implantao pode estar distintas da verso dos arquivos do aplicativo.
4. Mover o: \ bin diretrio para a pasta que voc criou na etapa 2, e inicie a ferramenta
grfica
MageUI.exe
5. Criar um novo manifesto de aplicativo, New selecionando File, Application Manifest. a
partir do menu
6. Na guia Padro Name, digite o nmero dessa Implantao nome e verso.
7. Selecione a Files guia e clique no Browse... boto prximo caixa de texto Diretrio
aplicativo.
8. Selecione a pasta que contm os arquivos do aplicativo que voc criou na etapa 2, e clique
OK na pasta Caixa de dilogo de seleo.
9. Clique no Populate boto para adicionar todos os arquivos do aplicativo lista da arquivo.
Se seu aplicativo contm mais de um arquivo executvel, marcar o arquivo executvel
principal para essa implantao como o aplicativo de inicializao, selecionar Entry Point
na lista File Type drop-down. MageUI.exe (se seu aplicativo s contm um arquivo
executvel, ser marc-la para voc.)
10. Selecione a Permissions Required guia e selecione o nvel de confiana voc precisa seu
aplicativo para declarar. O padro Full Trust, que ser adequado para a maioria dos
aplicativos.
11. Selecione File, Save no menu, e salve o manifesto de aplicativo. Voc ser solicitado para
assinar o manifesto de aplicativo quando voc salv-lo.
12. Se voc tiver um certificado armazenado como um arquivo no seu sistema de arquivos,
use a Sign as certificate file opo, e selecione o certificado do sistema de arquivos
usando o ... boto.
Ou-
Se o certificado mantido em um armazenamento de certificados acessvel de sua
mquina, selecione e selecione o certificado na lista fornecida. o Sign with stored
certificate option,
13. Selecionar File, New, Deployment Manifest no menu para criar sua implantao
manifesto, e em seguida, na guia Name, fornea um nome e verso nmero, neste exemplo
(1.0.0.0).
14. Selecione a Publisher guia e fornecer valores para Publisher e Product. ( Product is the
name given your application on the Windows Start menu when you install your application
locally.)
15. Alterne para a Update guia, e especifique a freqncia voc deseja este aplicativo para
atualizar. Se o aplicativo usa a ClickOnce API de implantao para verificar se h
atualizaes propriamente dito, desmarque a caixa de seleo rotulada This application
should check for updates.
16. Alternar para a Application Reference guia. Voc pode preencher todos os valores nesta
guia, clicando no Select Manifest boto e selecionando o aplicativo manifesto voc criou
nas etapas anteriores.
17. Escolha Save e salvar o manifesto de implantao em disco. Voc ser solicitado para
assinar o manifesto de aplicativo quando voc salv-lo.
Visual C# Consolidado 739
18. Se voc tiver um certificado armazenado como um arquivo no seu sistema de arquivos,
use a Sign as certificate file opo, e selecione o certificado do sistema de arquivos
usando o ... boto.
Ou-
Se o certificado mantido em um armazenamento de certificados acessvel de sua
mquina, selecione e selecione o certificado na lista fornecida. o Sign with stored
certificate option,
19. Copiar todos os arquivos na pasta atual, incluindo a pasta de verso e a pasta para o
destino de implantao. \ bin Isso pode ser qualquer uma pasta em um site da Web ou FTP
site, um compartilhamento de arquivo, ou um CD.
20. Fornecer os usurios com a URL, UNC ou mdia fsica necessria para instalar um
aplicativo. Se voc est fornecendo um URL ou UNC, voc deve atribuir os usurios o
caminho completo o manifesto de implantao. Por exemplo, caso WindowsFormsApp1
seja implantado para http://webserver01/ no diretrio WindowsFormsApp1, o caminho
completo URL seria http://webserver01/WindowsFormsApp1/WindowsFormsApp1.Deploy.
Prximas etapas
Quando voc precisa implantar uma nova verso do aplicativo, precisar criar uma nova pasta
chamada aps a nova verso por exemplo, 1.1.0.0and move the new application files into a
\bin pasta em que novo diretrio. Voc deve gerar um novo manifesto de aplicativo e armazene-
no novo diretrio, e ter o editor assinar o novo manifesto. Aps voc obter o manifesto assinado
de volta, voc pode usar Mage.exe para atualizar o manifesto de implantao e aponte-lo no novo
manifesto de aplicativo:
mage -Update WindowsFormsApp1.application -Version 1.1.0.0 -AppManifest
1.1.0.0\WindowsFormsApp1.exe.manifest
Usurios MageUI.exe podem efetuar a mesma operao, abrindo o seu manifesto de implantao,
selecione a Application Reference guia e selecionar o Select Manifest boto novamente.
Aps atualizar o aplicativo manifesto referncia, ser necessrio assinar novamente o manifesto
de implantao, como alterar um manifesto de alguma forma invalida a assinatura digital.
Passo-a-passo: Fazendo o Download de Assemblies por Demanda com a API de Implantao
do ClickOnce
Por padro, todos os as montagens includas um ClickOnce aplicativo so descarregados quando
o aplicativo executado primeiro. Voc pode, entretanto, ter partes do seu aplicativo que so
usados por um pequeno conjunto de seus usurios. Nesse caso, voc deseja baixar um conjunto
somente quando voc cria um dos seus tipos. Explicao passo a passo o seguir demonstra como
para marcar determinados conjuntos em seu aplicativo como " OPCIONAL ", e como baix-las
usando classes no espao para nome System.Deployment.Application quando o Common
Language Runtime (CLR) exige-los.
Criar Projetos
Para criar um projeto usando um conjunto por demanda
1. Abra o .NET Framework Prompt de comando SDK.
2. Ao usar o Bloco de Notas ou outro editor de texto, definir uma classe chamada
DynamicClass com uma nica propriedade chamada Message.
1. Salvar o texto como um arquivo denominado ClickOnceOnDemand.cs ou
ClickOnceOnDemand.vb, dependendo do idioma voc usar.
Visual C# Consolidado 740
2. Compile o arquivo em um conjunto. csc /target:library ClickOnceOnDemand.csvbc
/target:library ClickOnceOnDemand.vb
3. Crie um novo arquivo usando o editor de texto e insira o cdigo a seguir, que cria um
aplicativo Windows Forms que baixa o conjunto ClickOnceOnDemand quando ele
necessrio.
1. Salve o arquivo como um Form1.cs ou Form1.vb. csc /target:exe
/reference:ClickOnceOnDemand.dll Form1.csvbc /target:exe /reference:ClickOnceOnDemand.dll
Form1.vb e compil-lo em um executvel
Marcando conjuntos como opcional
Para marcar conjuntos como opcionais em seu aplicativo ClickOnce usando o manifesto
gerao e ferramenta de edio-cliente grfico (MageUI.exe)
1. Crie seu ClickOnce manifestos conforme descrito em Passo-a-passo: Implantando um
aplicativo ClickOnce manualmente. Nome seu aplicativo ClickOnceOnDemand.
2. Antes de fechar MageUI.exe, selecione a guia contendo a implantao na manifesto de
aplicativo, e selecione a Files guia dentro desse guia.
3. Na guia Files Localizar OnDemandAssembly.dll na lista dos arquivos aplicativo e defina
sua File Type Coluna a None. Para a Group coluna, digite ClickOnceOnDemand.dll.
Teste o novo conjunto
Para testar seu conjunto por demanda
1. Carregar sua ClickOnce implantao em um servidor Web.
2. Iniciar seu aplicativo implantado com ClickOnce de um navegador da Web inserindo a URL
para o manifesto de implantao. Se voc chamar seu ClickOnce aplicativo
ClickOnceOnDemand, e voc carreg-la para o diretrio de raiz do adatum.com, seu URL
teria esta aparncia:
http://www.adatum.com/ClickOnceOnDemand/ClickOnceOnDemand.application
3. Quando o formulrio principal for exibida, pressione o Button. Voc deve ver uma
seqncia em uma janela caixa de mensagem que l " Hello, World! "
Passo-a-passo: Implementando um Editor de Tipos de Interface do Usurio
Voc pode fornecer uma experincia em tempo de design personalizada para tipos complexos
Propriedade implementando um editor tipo Interface (UI) do usurio.
Essa explicao passo a passo explica como criar seu prprio Editor tipo UI para um tipo
personalizado e exibir a interface de edio, usando um PropertyGrid.
Tarefas explicadas nessa explicao passo a passo incluem:
Permisses suficientes para poder para criar e executar projetos do aplicativo Windows
Forms no computador est instalado. onde o .NET Framework
Definir um tipo personalizado
Seu editor tipo UI personalizada exibir um tipo personalizado. Esse tipo pode ser simples ou
complexos. Para essa explicao passo a passo, voc ir definir um tipo simples com
comportamento de edio em tempo de design personalizado. Esse tipo chamado
MarqueeLightShape, e e Circle. com dois valores, Square um enum
Para definir um tipo de enumerao personalizado
Gravar um editor tipo UI com base em uma caixa de dilogo restrita em vez de um controle
de exibio.
Gravar um designer de seu controle personalizado. Para obter mais informaes, consulte
COMO: Criar um controle de formulrios do Windows que tira vantagem de recursos em tempo
de criao.
Como Criar um Serviced Component
O procedimento a seguir descreve como criar um novo componente de servio.
Para criar um componente de servio
1. Definir uma classe que deriva direta ou indiretamente a partir da ServicedComponent
classe. Por exemplo, o cdigo a seguir garante que a Calculator classe hospedada por um
aplicativo do COM +.
C#
using System.EnterpriseServices; public class Calculator : ServicedComponent { public int Add (int x,
int y) { return(x+y); } }
2. Aplicar atributos para indicar como cada conjunto, classe, ou mtodo deve interagir com
funcionalidade com +.
Observao
No.NET Framework verso 1.1, a configurao de segurana do COM + habilitada por padro
se o ApplicationAccessControlAttribute atributo no est presente no conjunto. Isso uma
alterao no comportamento de .NET Framework verso 1.0.
C#
[assembly: ApplicationName("Calculator")] [assembly:
System.Reflection.AssemblyKeyFile("Calculator.snk")] [MustRunInClientContext] public class Calculator :
ServicedComponent { // Member definitions. }
3. Gerar uma chave forte e compilar o exemplo a seguir:
C#
sn k Calculator.snk csc /t:library /r:System.EnterpriseServices.dll Calculator.cs
4. Implantar o aplicativo de componentes atendidos por registrar seu conjunto dinamicamente
ou manualmente.
5. Aps um componente de servio estiver registrado, os clientes podem criar instncias do
componente como eles criar instncias de qualquer outro componente. Para obter um
exemplo completo, consulte Exemplo de servio do componente.
Observao
Em plataformas Windows 2000, com + sempre carrega a verso mais recente do Common
Language Runtime do para o componente voc est criando. Isso significa que em um
Visual C# Consolidado 746
computador com o .NET Framework verso 1.0 e .NET Framework verso 1.1 instalado,.NET
Framework verso 1.1 carregado sempre. Como uma soluo, voc pode criar um arquivo
Dllhost.exe.Configuration COM + que permite que voc para bloquear todos os aplicativos para
uma verso especfica do .NET Framework. No Windows xp e plataformas Windows Server
2003, a configurao diretrio raiz de aplicativo pode ser usada para apontar com + para uma
pasta apropriada para seu arquivo de configurao.
Exemplo
C#
using System.EnterpriseServices; [assembly: ApplicationName("Calculator")] [assembly:
System.Reflection.AssemblyKeyFile("Calculator.snk")] [MustRunInClientContext] public class Calculator :
ServicedComponent { public int Add (int x, int y) { return(x+y); } }
Como Aplicar o Atributo Description a um Assembly
O exemplo a seguir mostra como aplicar o DescriptionAttribute atributo para definir a descrio de
um conjunto.
Exemplo
C#
using System.EnterpriseServices; [ assembly: Description("BankComponent assembly")] public class
Account : ServicedComponent { static void Main() {} }
Compilando o cdigo
Este exemplo requer:
Type ildasm <assembly name> at the command prompt. Por exemplo, o comando a seguir
desmonta o Hello.exe conjunto.
ildasm Hello.exe
Para exibir informaes manifesto do conjunto
Quando voc fazer uma referncia em tempo de execuo a um conjunto de nome seguro,
por exemplo, usando voc deve usar o nome de exibio do conjunto de nome seguro
referenciado. ou Assembly.GetType mtodos, o Assembly.Load A sintaxe de um nome de
exibio a seguinte:
< assembly name>, <version number>, <culture>, <public key token>
Visual C# Consolidado 763
Por exemplo:
myDll, Version=1.1.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33
Do PublicKeyToken, neste exemplo, a forma hexadecimal do smbolo de chave pblica. Se
houver nenhum valor de cultura, use Culture=neutral.
O exemplo de cdigo a seguir mostra como usar essas informaes com o Assembly.Load
mtodo.
C#
Assembly.Load("myDll,Version=1.0.0.1,Culture=neutral,PublicKeyToken=9b35aa32c18d4fb1");
Voc pode imprimir o formato hexadecimal da chave pblica e smbolo de chave pblica para um
conjunto especfico usando o seguinte Ferramenta nome forte (SN.exe) Comando:
sn -Tp <assembly>
Se voc tiver um arquivo chave pblico, use o seguinte comando em vez disso (observe a
diferena no caso com a opo de linha de comando):: (observe a diferena no caso com a opo
de linha de comando)
sn -tp <assembly>
Como: Descarregar um domnio de aplicativo
Quando voc tiver terminado usando um domnio de aplicativo, descarreg-lo usando o
System.AppDomain.Unload mtodo. O Unload mtodo normalmente desliga o domnio do
aplicativo especificado. Durante o processo descarregando, nenhum novo segmento pode
acessar o domnio de aplicativo, e so liberadas estruturas dados especficos de domnio do
aplicativo todos os.
Conjuntos carregados no domnio de aplicativo so removidas e no esto mais disponveis. Se
um conjunto no domnio do aplicativo domnio neutro-, dados para o conjunto permanece na
memria at que o processo inteiro desligado. No h nenhum mecanismo para descarregar um
conjunto-domnio neutro diferente desligar o processo inteiro. H situaes em que a solicitao
para descarregar um domnio de aplicativo no funciona e resulta em um
CannotUnloadAppDomainException.. um CannotUnloadAppDomainException
O exemplo a seguir cria um novo domnio denominado MyDomain do aplicativo, imprime algumas
informaes ao console, e depois descarrega o domnio do aplicativo. Observe que o cdigo tenta
imprimir o nome amigvel do domnio do aplicativo descarregado para o console. Essa ao gera
uma exceo que tratada pelas instrues try / catch no final do programa.
Exemplo
C#
using System; using System.Reflection; class AppDomain2 { public static void Main() {
Console.WriteLine("Creating new AppDomain."); AppDomain domain =
AppDomain.CreateDomain("MyDomain", null); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
AppDomain.Unload(domain); try { Console.WriteLine(); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); // The following statement creates an exception because the
Visual C# Consolidado 764
domain no longer exists. Console.WriteLine("child domain: " + domain.FriendlyName); } catch
(AppDomainUnloadedException e) { Console.WriteLine("The appdomain MyDomain does not exist."); } } }
Como Remover um Assembly de Cache Global de Assemblies
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para remover um conjunto de cache de
conjunto global.
Para remover um conjunto de cache de conjunto global
Usando uma extenso do shell do Windows fornecido pelo SDK do .NET Framework
chamado o Visualizador cache do conjunto (Shfusion.dll).
A extenso do shell permite que voc a arrastar conjuntos para cache de conjunto global.
Assim que voc criar o par de chaves, voc deve colocar o arquivo em que ele pode
localizar o nome de alta segurana assinatura ferramentas.
Ao assinar um conjunto com um nome de alta segurana, a Vinculador do conjunto (AL.exe)
Aparncia da chave arquivos relativo para a pasta atual e para o diretrio de sada. Ao usar linha
comando compiladores, basta copiar a chave para a pasta atual que contm seus mdulos de
cdigo.
Se voc estiver usando um IDE, tais como Visual Studio 2005, para assinar um conjunto com um
nome de alta segurana, necessrio compreender onde o IDE procura o arquivo de chave. Por
exemplo, Visual Basic 2005 procura pelo arquivo de chave no diretrio que contm a Soluo
Visual Studio, enquanto o compilador C# procura o arquivo de chave no diretrio que contm o
binrio. Coloque o arquivo de chave no diretrio do projeto adequado e defina o atributo de
arquivo da seguinte maneira:
Visual C# Consolidado 770
C#
[assembly: AssemblyKeyFileAttribute(@"..\..\key.snk")]
Como Incorporar Bibliotecas de Tipo como Recursos Win32 em Aplicativos Baseados no .NET
Voc pode compactar uma biblioteca de tipos como um arquivo separado ou incorpor-lo como
arquivo recurso Win32 dentro de um aplicativo baseado em .NET. O Microsoft Visual Basic 6.0
executado essa tarefa para voc automaticamente; no entanto, ao usar Microsoft Visual Basic
2005, voc deve incorporar sua biblioteca tipo manualmente.
Para incorporar uma biblioteca de tipos como um recurso do Win32 em um aplicativo baseado em
.NET
1. Compilar o aplicativo gerenciado como um arquivo de biblioteca. Por exemplo, para criar
um conjunto para um aplicativo chamado MyApp, digite o seguinte comando no prompt de
comando:
C#
csc /t:library MyApp.cs
2. Exportar um arquivo biblioteca tipo do seu conjunto usando o Tipo Exporter da biblioteca
(TlbExp.exe). No prompt de comando, digite o seguinte comando:
tlbexp MyApp.dll /out:mytypelib.tlb
3. Criar um script de recursos que contenha a instruo a seguir:
IDR_TYPELIB1 typelib "mytypelib.tlb"
Para este exemplo, o nome de arquivo script myresource.rc.
4. Compilar o script usando o Microsoft Windows Resource compiler (Rc.exe). No prompt de
comando, digite o seguinte comando:
rc myresource.rc
Rc.exe produz ao myresource.res arquivo de recurso.
5. Compile o arquivo de origem novamente e especifique o arquivo de recurso. No prompt de
comando, digite o seguinte comando:
Visual Basic
vbc /t:library MyApp.vb /win32res:myresource.res
C#
csc /t:library MyApp.cs /win32res:myresource.res
Como Gerar Assemblies de Interoperabilidade Primrios Usando Tlbimp.exe
A maneira mais simples para produzir conjuntos de interoperabilidade primrias consiste em usar
o Importador de Biblioteca de Tipos (TLBIMP.exe).
Para gerar um conjunto de interoperabilidade primrio usando TLBIMP.exe
Use o seguinte cdigo para criar uma nova classe de exceo chamado NoAccessException
e mape-lo para o HRESULT E_ACCESSDENIED.
C++
Class NoAccessException : public ApplicationException { NoAccessException () { HResult =
E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
Voc pode encontrar um programa (em qualquer linguagem de programao) que usa um cdigo
tanto gerenciados e no gerenciados ao mesmo tempo. Por exemplo, o empacotador
personalizado no exemplo de cdigo a seguir usa o Marshal.ThrowExceptionForHR(int
HResult) mtodo para acionar uma exceo com um valor HRESULT especfico. O mtodo
procura o HRESULT e gera o tipo de exceo apropriado. Por exemplo, o HRESULT no
fragmento de cdigo a seguir gera ArgumentException.
C++
CMyClass::MethodThatThrows { Marshal.ThrowExceptionForHR(COR_E_ARGUMENT); }
A tabela a seguir fornece o mapeamento completo de cada HRESULT sua classe de exceo
comparvel no .NET Framework.
HRESULT Exceo .NET
Visual C# Consolidado 779
MSEE_E_APPDOMAINUNLOADED AppDomainUnloadedException
COR_E_APPLICATION ApplicationException
COR_E_ARGUMENT ou E_INVALIDARG ArgumentException
COR_E_ARGUMENTOUTOFRANGE ArgumentOutOfRangeException
COR_E_ARITHMETIC ou
ERROR_ARITHMETIC_OVERFLOW
ArithmeticException
COR_E_ARRAYTYPEMISMATCH ArrayTypeMismatchException
COR_E_BADIMAGEFORMAT ou
ERROR_BAD_FORMAT
BadImageFormatException
COR_E_COMEMULATE_ERROR COMEmulateException
COR_E_CONTEXTMARSHAL ContextMarshalException
COR_E_CORE CoreException
NTE_FAIL CryptographicException
COR_E_DIRECTORYNOTFOUND ou
ERROR_PATH_NOT_FOUND
DirectoryNotFoundException
COR_E_DIVIDEBYZERO DivideByZeroException
COR_E_DUPLICATEWAITOBJECT DuplicateWaitObjectException
COR_E_ENDOFSTREAM EndOfStreamException
COR_E_TYPELOAD EntryPointNotFoundException
COR_E_EXCEPTION Exceo
COR_E_EXECUTIONENGINE ExecutionEngineException
COR_E_FIELDACCESS FieldAccessException
COR_E_FILENOTFOUND ou
ERROR_FILE_NOT_FOUND
FileNotFoundException
COR_E_FORMAT FormatException
COR_E_INDEXOUTOFRANGE IndexOutOfRangeException
COR_E_INVALIDCAST ou E_NOINTERFACE InvalidCastException
COR_E_INVALIDCOMOBJECT InvalidComObjectException
COR_E_INVALIDFILTERCRITERIA InvalidFilterCriteriaException
COR_E_INVALIDOLEVARIANTTYPE InvalidOleVariantTypeException
COR_E_INVALIDOPERATION InvalidOperationException
COR_E_IO IOException
COR_E_MEMBERACCESS AccessException
COR_E_METHODACCESS MethodAccessException
COR_E_MISSINGFIELD MissingFieldException
COR_E_MISSINGMANIFESTRESOURCE MissingManifestResourceException
COR_E_MISSINGMEMBER MissingMemberException
Visual C# Consolidado 780
COR_E_MISSINGMETHOD MissingMethodException
COR_E_MULTICASTNOTSUPPORTED MulticastNotSupportedException
COR_E_NOTFINITENUMBER NotFiniteNumberException
E_NOTIMPL NotImplementedException
COR_E_NOTSUPPORTED NotSupportedException
OrE_POINTER COR_E_NULLREFERENCE NullReferenceException
COR_E_OUTOFMEMORY ou
E_OUTOFMEMORY
OutOfMemoryException
COR_E_OVERFLOW OverflowException
COR_E_PATHTOOLONG ou
ERROR_FILENAME_EXCED_RANGE
PathTooLongException
COR_E_RANK RankException
COR_E_REFLECTIONTYPELOAD ReflectionTypeLoadException
COR_E_REMOTING RemotingException
COR_E_SAFEARRAYTYPEMISMATCH SafeArrayTypeMismatchException
COR_E_SECURITY SecurityException
COR_E_SERIALIZATION SerializationException
OrERROR_STACK_OVERFLOW
COR_E_STACKOVERFLOW
StackOverflowException
COR_E_SYNCHRONIZATIONLOCK SynchronizationLockException
COR_E_SYSTEM SystemException
COR_E_TARGET TargetException
COR_E_TARGETINVOCATION TargetInvocationException
COR_E_TARGETPARAMCOUNT TargetParameterCountException
COR_E_THREADABORTED ThreadAbortException
COR_E_THREADINTERRUPTED ThreadInterruptedException
COR_E_THREADSTATE ThreadStateException
COR_E_THREADSTOP ThreadStopException
COR_E_TYPELOAD TypeLoadException
COR_E_TYPEINITIALIZATION TypeInitializationException
COR_E_VERIFICATION VerificationException
COR_E_WEAKREFERENCE WeakReferenceException
COR_E_VTABLECALLSNOTSUPPORTED VTableCallsNotSupportedException
Todos os outros HRESULTs COMException
Para recuperar informaes de erro estendidas, o cliente gerenciado deve examinar os campos do
objeto de exceo que foi gerado. Para o objeto de exceo para fornecer informaes teis
Visual C# Consolidado 781
sobre um erro, o objeto COM deve implementa a IErrorInfo interface. Tempo de Execuo utiliza
as informaes fornecidas por IErrorInfo para inicializar o objeto de exceo.
Se o objeto COM no oferece suporte IErrorInfo, o Runtime Inicializa um objeto de exceo com
valores padro. A tabela a seguir lista cada campo associado a um objeto de exceo e identifica
a fonte de informaes padro quando o objeto com oferece suporte IErrorInfo.
Observe que o Runtime s vezes ignorar uma HRESULT casos em onde h um IErrorInfo
presente no segmento. Este comportamento pode ocorrer em casos onde. e HRESULT o
IErrorInfo no representam o mesmo erro
Campo Exceo Fonte de informaes de com
ErrorCode HRESULT retornado da chamada.
HelpLink Se IErrorInfo->HelpContext diferente de zero, a seqncia formada pelas
concatenao IErrorInfo->GetHelpFile e " # ". e IErrorInfo-
>GetHelpContext Caso contrrio a seqncia retornada de IErrorInfo-
>GetHelpFile.
InnerException Sempre uma referncia nula (Nothing no Visual Basic.)
Message
(Mensagem)
Seqncia de caracteres retornada de IErrorInfo->GetDescription.
Origem Seqncia de caracteres retornada de IErrorInfo->GetSource.
StackTrace O rastreamento da pilha.
TargetSite O nome do mtodo que retornados a falha HRESULT.
Campos exceo, como Message, Source a StackOverflowException., e StackTrace no esto
disponveis para
Como Editar Assemblies de Interoperabilidade
O Importador da biblioteca Tipo (TLBIMP.exe) converte assinaturas mtodo com a maioria em
assinaturas gerenciadas. No entanto, vrios tipos requer informaes adicionais que voc pode
especificar, editando o conjunto de interoperabilidade. Este tpico descreve como editar um
conjunto de interoperabilidade. O Empacotamento alteraes tpico identifica vrios casos que
exigem que voc para editar o conjunto de interoperabilidade e descreve as alteraes
necessrias.
Para especificar empacotamento alteraes no Microsoft intermedirios idioma (MSIL)
1. Gerar conjunto interoperacional inicial usando TLBIMP.exe. Por exemplo, para produzir um
conjunto chamado New.dll de New. TLB, digite o seguinte comando no prompt de comando:
tlbimp New.tlb /out:New.dll
2. No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
3. Editar o MSIL conforme necessrio.
4. No prompt de comando, digite o seguinte comando para produzir a sintaxe apropriada
definindo um novo New.dll:
ilasm New.il /dll
Visual C# Consolidado 782
Como Adicionar Referncias a Bibliotecas de Tipo
Gera Visual Studio 2005 um conjunto interoperacional que contm metadados quando voc
adiciona uma referncia a uma biblioteca de tipos determinado. Se um conjunto interoperacional
primrio estiver disponvel, Visual Studio usar o conjunto existente antes de gerar um novo
conjunto de interoperabilidade.
Para adicionar uma referncia a uma biblioteca de tipos
1. Instale o arquivo exe ou dll com em seu computador, a menos que um instalar.exe do
Windows executa a instalao para voc.
2. No menu Project, selecione References.
3. Selecione a COM guia.
4. Selecionar a biblioteca de tipos na lista Available References, ou procure o arquivo TLB.
5. Clique em OK.
Como Manipular Eventos Gerados por uma Fonte COM
Se voc estiver familiarizado com o modelo baseado em delegate-evento fornecido pelo .NET
Framework, no Consulte Tratamento e Raising eventos. Para obter detalhes especficos que se
aplicam a nesta seo, consulte Consumir eventos na mesma seo.
Um cliente .NET (coletor de eventos) pode receber eventos criados por um servidor COM
existente (origem de evento). Interoperabilidade com gera os representantes necessrios nos
metadados que forem includos no seu cliente gerenciado. Uma assinatura de representante
importados compreende a interface de evento do coletor, um sublinhado, o nome de evento, e a
palavra EventHandler: SinkEventInterface _ EventName EventHandler.
Observe que objetos com eventos em um cliente .NET que elevar exigir duas colees Garbage
Collector (GC) antes que so lanadas. Isso ocorre quando o ciclo de referncia que ocorre entre
objetos COM e clientes gerenciados. Caso voc precise explicitamente liberar um objeto com voc
deve chamar o Collect mtodo duas vezes.
Para interoperar com uma fonte de eventos COM existente
1. Obter Conjunto de Mdulos (Assembly o) de interoperabilidade primria para o servidor
COM se os tipos com forem a ser compartilhada por outros aplicativos. Um conjunto de
interoperabilidade primrio contm metadados que representa a biblioteca de tipos
convertido e assinado no editor.
Observao
Se o conjunto de interoperabilidade primrio no disponvel ou se o conjunto for a ser usado de
forma privada, voc pode importar a biblioteca de tipos usando API equivalente ou a Importador
da biblioteca Tipo (TLBIMP.exe) um.
2. O processo de converso gera um representante para cada evento; no entanto, voc s
precisa para coletar os eventos de seu interesse.
3. Voc pode usar um navegador de metadados, como para identificar eventos
representantes. o Disassembler MSIL (Ildasm.exe),
4. Consumir eventos da fonte de eventos COM da mesma maneira que consome eventos de
uma origem de evento gerenciado.
Exemplo
Visual C# Consolidado 783
O exemplo a seguir demonstra como abrir uma janela do Internet Explorer e Wire eventos criados
pelo InternetExplorer Objeto para manipuladores de eventos implementado no cdigo gerenciado.
Definies de tipos Internet Explorer (incluindo representantes de evento) so importadas como
metadados do SHDocVw.dll. O exemplo recpetores o TitleChange evento.
C#
namespace InternetExplorer { using System; using System.Runtime.InteropServices; using SHDocVw; public
class Explorer { public static void Main() { Explorer explorer = new Explorer(); explorer.Run(); } public void
Run() { Object o = null; String s; try { // Starts the browser. m_IExplorer = new
SHDocVw.InternetExplorer(); } catch(Exception e) { Console.WriteLine("Exception when creating Internet
Explorer object {0}", e); return; } // Wires your event handlers to m_IExplorer. SetAllEvents(); try { // Goes
to the home page. m_WebBrowser = (IWebBrowserApp) m_IExplorer; m_WebBrowser.Visible = true;
m_WebBrowser.GoHome(); // Starts navigating to different URLs. Console.Write("Enter URL (or enter to
quit): "); s = Console.ReadLine(); while (s != "" && m_IExplorer != null && m_WebBrowser != null) {
m_WebBrowser.Navigate(s, ref o, ref o, ref o, ref o); Console.Write("Enter URL (or enter to quit): "); s =
Console.ReadLine(); } m_WebBrowser.Quit(); } catch(Exception sE) { if (m_IExplorer == null &&
m_WebBrowser == null) { Console.WriteLine("Internet Explorer has gone away"); } else {
Console.WriteLine("Exception happens {0}", sE); } } } // Uses the += syntax for adding delegates to events.
void SetAllEvents() { if (m_IExplorer != null) { // Title Change event // DWebBrowserEvents2 is the name of
the sink event //interface. // TitleChange is the name of the event. //
DWebBrowserEvents2_TitleChangeEventHandler is the // delegate name assigned by TlbImp.exe.
DWebBrowserEvents2_TitleChangeEventHandler DTitleChangeE = new
DWebBrowserEvents2_TitleChangeEventHandler(OnTitleChange); m_IExplorer.TitleChange +=
DTitleChangeE; } } /////////////////////////////////////////////////////////////////////// // Define
event handlers. // Document title changed static void OnTitleChange(String Text) { Console.WriteLine("Title
changes to {0}", Text); } ////////////////////////////////////////////////////////////////////////// //
The following are class fields. static private SHDocVw.InternetExplorer m_IExplorer = null; static private
IWebBrowserApp m_WebBrowser = null; } }
Como Criar Wrappers Manualmente
Se voc optar por declarar tipos com manualmente no cdigo fonte gerenciado, o melhor lugar
para comear com uma biblioteca Arquivo ou tipo interface Definition Language (IDL) existente.
Quando voc no tem o arquivo IDL ou no possvel gerar um arquivo de biblioteca Tipo, voc
pode simular os tipos com criando declaraes gerenciadas e exportar o conjunto resultante para
uma biblioteca de tipos.
Para simular com tipos de fonte gerenciado
1. Declarar os tipos em um idioma que seja compatvel o com comum especificao (cls)
idioma e compilar o arquivo.
2. Exportar o conjunto que contm os tipos com o Tipo Exporter da biblioteca (TlbExp.exe).
3. Usar a biblioteca de tipos com exportado como uma base para declarar tipos gerenciados
orientado com.
Para criar um invlucro Callable Runtime (RCW)
1. Supondo que voc tiver um arquivo IDL ou arquivo biblioteca Tipo, decidir quais classes e
interfaces voc deseja incluir no RCW personalizado. Voc pode excluir qualquer tipos que
voc no pretende usar diretamente ou indiretamente em seu aplicativo.
Visual C# Consolidado 784
2. Criar um arquivo de origem em um idioma compatvel com CLS e declarar os tipos.
Consulte Biblioteca tipo para resumo de converso assembly Para uma descrio completa
do processo de converso de importao. Efetivamente, quando voc cria um RCW
personalizado, voc est executando a atividade de converso fornecida pelo tipo
manualmente o Importador da biblioteca Tipo (TLBIMP.exe). O Exemplo que segue este
tipos mostra procedimento em um arquivo de biblioteca IDL ou tipo e seus tipos
correspondentes no cdigo C#.
3. Quando as declaraes estiverem concludas, compile o arquivo como voc compila
qualquer outro cdigo de fonte gerenciado.
4. Como com os tipos importados com TLBIMP.exe, algumas exigem informaes adicionais
que voc pode adicionar diretamente a seu cdigo. Para obter detalhes, consulte Como
editar conjuntos Interop:.
Exemplo
O cdigo a seguir mostra um exemplo da interface e ISATestSATest Classe em IDL e os tipos
correspondentes no cdigo fonte C#.
Arquivo de biblioteca IDL ou tipo
[ object, uuid(40A8C65D-2448-447A-B786-64682CBEF133), dual, helpstring("ISATest Interface"),
pointer_default(unique) ] interface ISATest : IDispatch { [id(1), helpstring("method InSArray")] HRESULT
InSArray([in] SAFEARRAY(int) *ppsa, [out,retval] int *pSum); }; [ uuid(116CCA1E-7E39-4515-9849-
90790DA6431E), helpstring("SATest Class") ] coclass SATest { [default] interface ISATest; };
Wrapper no cdigo fonte gerenciado
C#
using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices;
[assembly:Guid("E4A992B8-6F5C-442C-96E7-C4778924C753")]
[assembly:ImportedFromTypeLib("SAServerLib")] namespace SAServer { [ComImport] [Guid("40A8C65D-
2448-447A-B786-64682CBEF133")] [TypeLibType(TypeLibTypeFlags.FLicensed)] public interface ISATest {
[DispId(1)] //[MethodImpl(MethodImplOptions.InternalCall, //
MethodCodeType=MethodCodeType.Runtime)] int InSArray( [MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType=VarEnum.VT_I4)] ref int[] param ); } [ComImport] [Guid("116CCA1E-7E39-4515-9849-
90790DA6431E")] [ClassInterface(ClassInterfaceType.None)]
[TypeLibType(TypeLibTypeFlags.FCanCreate)] public class SATest : ISATest { [DispId(1)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] extern int
ISATest.InSArray( [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_I4)] ref int[]
param ); } }
Como Registrar Assemblies de Interoperabilidade Primrios
Voc dever registrar todos os adquirida primrio conjuntos interoperabilidade no seu computador
de desenvolvimento antes voc pode referi-las com Microsoft Visual Studio 2005. O Visual Studio
procurar e usa um conjunto interoperacional primrio na primeira vez que voc referncia um tipo
de uma biblioteca de tipos COM. Se Visual Studio no possvel localizar conjunto de mdulos
(assembly o) de interoperabilidade primria associado biblioteca tipo, ele solicitar que voc a
adquiri-lo ou oferece para criar um conjunto de interoperabilidade. Do Importador da biblioteca
Tipo (TLBIMP.exe) da mesma forma, tambm usa o Registro para localizar conjuntos de
interoperabilidade primrias.
Visual C# Consolidado 785
Embora ele no seja necessrio para registrar conjuntos de interoperabilidade primrias a menos
que voc pretende usar Visual Studio, registro oferece duas vantagens:
Voc pode evitar acidentalmente gerar e usando um novo conjunto interoperacional se, em
algum momento no futuro, voc usar o Visual Studio para fazer referncia a um tipo para as
quais voc tem Conjunto de Mdulos (Assembly no registrado um) de interoperabilidade
primria.
Do Ferramenta de registro do conjunto (RegAsm.exe) uso para registrar um conjunto
interoperacional primrio.
Para registrar um conjunto interoperacional primrio
Na janela Properties, clique com o boto direito do mouse o reticncias ( .), boto para a
BackgroundImage propriedade, em Reset seguida clique em
Visual C# Consolidado 789
Como: Definir ToolTips para controles em um Windows Form em tempo de design
Voc pode definir uma ToolTip seqncia no cdigo ou em Windows Forms Designer. Para obter
mais informaes sobre o ToolTip componente, consulte Dica de Ferramenta Component
Overview (formulrios do Windows).
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para definir uma dica de ferramenta programaticamente
1. Adicione o controle que ser exibida a dica de ferramenta.
2. Use o SetToolTip mtodo do componente ToolTip.
C#
// In this example, button1 is the control to display the ToolTip. toolTip1.SetToolTip(button1, "Save
changes");
Para definir uma dica de ferramenta no designer
1. Adicionar um ToolTip componente para o formulrio.
2. Selecione o controle que exibir a dica de ferramenta, ou adicion-lo ao formulrio.
3. Na janela Properties, defina o ToolTip on ToolTip1 valor como uma seqncia de texto
apropriada.
COMO: Adicionar controles ActiveX ao Windows Forms
Enquanto o Windows Forms Designer otimizado para host controles Windows Forms, voc
tambm pode colocar controles ActiveX em Windows Forms.
Cuidado
Existem limitaes de desempenho para Windows Forms quando controles ActiveX so
adicionados a eles.
Antes de adicionar controles ActiveX a seu formulrio, voc deve adicion-los para a Caixa de
ferramentas. Para obter mais informaes, consulte Componentes COM, Personalizar caixa de
dilogo Caixa de ferramentas.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
clique em Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Visual C# Consolidado 790
Para adicionar um controle ActiveX para o formulrio Windows
Set the Text property to a string that includes an ampersand (&) before the letter that will be
the shortcut.
C#
// Set the letter "P" as an access key. button1.Text = "&Print";
Observao
To include an ampersand in a caption without creating an access key, include two ampersands
(&&). Um nico e comercial exibido na legenda e sem caracteres so sublinhados.
Como: Adicionar ou remover de uma coleo de controles em tempo de execuo
Tarefas comuns em desenvolvimento de aplicativos so adicionar controles para e removendo
controles de qualquer caixa de controles no seus formulrios o Panel, como ou GroupBox
controle, ou mesmo o formulrio prprio)..), como o Panel ou GroupBox controle, ou mesmo o
prprio formulrio (( Em tempo de criao, controles podem ser arrastadas diretamente em uma
caixa painel ou grupo. Em tempo de execuo, esses controles manter uma Controls coleo,
que mantm registro dos quais controles so colocados sobre eles.
Observao
Visual C# Consolidado 791
O exemplo de cdigo a seguir aplica a qualquer controle que mantm um conjunto de controles
dentro dela.
Para adicionar um controle a uma coleo programaticamente
1. Criar uma instncia do controle a ser adicionado.
2. Definir propriedades do novo controle.
3. Adicione o controle coleo Controls do controle pai.
O exemplo de cdigo a seguir mostra como criar uma instncia do controle Button. Ele requer um
formulrio com um Panel controle e que o mtodo tratamento de eventos para o boto sendo
criada NewPanelButton_Click,. j existe
C#
public Button newPanelButton = new Button(); public void addNewControl() { // The Add method will
accept as a parameter any object that derives // from the Control class. In this case, it is a Button control.
panel1.Controls.Add(newPanelButton); // The event handler indicated for the Click event in the code //
below is used as an example. Substite the appropriate event // handler for your application.
this.newPanelButton.Click += new System.EventHandler(this. NewPanelButton_Click); }
Para remover controles de uma coleo programaticamente
1. Remover o manipulador de eventos do evento. No Visual Basic, use a Instruo
RemoveHandler palavra-chave; no Visual C#, use o = Operador (referncia C#).
2. Use o Remove mtodo para excluir o controle desejado do painel na Controls coleo.
3. Chamar o Dispose mtodo para verso todos os recursos usado pelo controle.
C#
private void removeControl(object sender, System.EventArgs e) { // NOTE: The code below uses the instance
of // the button (newPanelButton) from the previous example.
if(panel1.Controls.Contains(newPanelButton)) { this.newPanelButton.Click -= new
System.EventHandler(this. NewPanelButton_Click); panel1.Controls.Remove(newPanelButton);
newPanelButton.Dispose(); } }
COMO: Ativar estilos do Visual Windows XP
Estilo visual a aparncia modifiable Usurio da interface do usurio de um aplicativo ou sistema
operacional. Por padro, o Windows XP fornece um novo estilo visual. O novo estilo visual a
barras de rolagem e barra ttulo de um formulrio do Windows ser usam automaticamente
quando o formulrio executado no Windows XP. O estilo visual se seu aplicativo chama o
EnableVisualStyles mtodo, a maioria dos controles Windows Forms usar automaticamente
quando seu aplicativo executado no Windows XP.
Observao
O suporte estilos visuais Windows XP tambm pode ser habilitado atravs da Enable Visual
Styles caixa de seleo no painel Application da Project Designer. Para obter mais
informaes, consulte o tpico COMO: ativar estilos visuais.
Para ativar estilos visuais
Visual C# Consolidado 792
Para exibir um retorno de carro em uma vrias linhas TextBox, use a NewLine
propriedade.
Esteja ciente que a interpretao de caracteres de escape ( especfico de idioma. Visual
Basic usa Chr$(13) & Chr$(10) para retorno de carro e alimentao de linha a combinao de
caracteres.
Para exibir vrias linhas no controle TextBox
1. Defina a Multiline propriedade para true. Se WordWrap ser true (o padro), em seguida,
o texto no controle ser exibida como um ou mais pargrafos; caso contrrio, ele aparecer
como uma lista, em que algumas linhas podem ser cortadas na borda do controle.
2. Defina a ScrollBars propriedade como um valor apropriado.
Value
(Valor) Descrio
None Use esse valor se o texto ser um pargrafo que. quase sempre ajusta o controle O
usurio pode usar o ponteiro do mouse para mover-se dentro do controle se o texto
for muito longa para exibir todos de uma vez.
Horizontal Use esse valor se voc deseja exibir uma lista de linhas, alguns dos que podem estar
maior que a largura do controle TextBox.
Both Use esse valor se a lista pode ser maior que a altura do controle.
3. Defina a WordWrap propriedade como um valor apropriado.
Value
(Valor) Descrio
false Texto no controle no automaticamente ser ser disposto, para que ele ir rolar para a
direita at que uma quebra de linha seja alcanada. Use esse valor se voc escolheu
Horizontal barras de rolagem ou Both, acima.
(true
padro)
A barra de rolagem horizontal no ser exibido. Use esse valor se voc escolheu
Vertical barras de rolagem ou None, acima, para exibir um ou mais pargrafos.
Componente Timer (Windows Forms)
Os formulrios Timer do Windows um componente que gera um evento em intervalos regulares.
Este componente projetado para um ambiente Windows Forms.
Viso geral do componente de timer (Windows Forms)
Os formulrios Timer do Windows um componente que gera um evento em intervalos regulares.
Este componente projetado para um ambiente Windows Forms. Se voc precisar um timer que
adequado para um ambiente de servidor, consulte Introduo ao timers Based Server-.
Chave propriedades, mtodos e eventos
Visual C# Consolidado 798
O comprimento de intervalos definido pela propriedade Interval, cujo valor em milissegundos.
Quando o componente est ativado, o Tick evento ser gerado a cada intervalo. onde voc
adicionaria cdigo para ser executado. Para obter mais informaes, consulte Como executar
procedimentos na intervalos do conjunto com o componente Timer Windows Forms:.Os mtodos
para o Timer componente de chave so Start e Stop, que ativar o timer e desativar. Quando o
cronmetro desligado, ele redefine; no um meio para pausar um Timer componente.
Limitaes do componente Timer de formulrios do Windows
na propriedade Interval
O componente Windows Forms Timer tem uma Interval propriedade que especifica o nmero de
milissegundos que passam entre um evento Timer e a prxima. A menos que o componente
desativado, um timer continua a receber o Tick evento em aproximadamente iguais intervalos de
tempo.
Este componente projetado para um ambiente Windows Forms. Se voc precisar um timer que
adequado para um ambiente de servidor, consulte Introduo ao timers Based Server-.
A propriedade Interval
A Interval propriedade tem algumas limitaes a serem considerados quando voc est
programando um Timer componente:
Se seu aplicativo ou outro aplicativo est fazendo demandas pesadas no sistema , como
loops longos, intenso clculos, ou unidade, rede, ou acesso da porta seu aplicativo pode
possvel obter eventos timer com freqncia como a Interval propriedade especifica.
O intervalo pode ser entre 1 e 64,767, inclusive, que significa que mesmo o intervalo mais
longo no muito maior que um minuto 64.8 sobre (segundos).
Web Sites
Projetos
Edio
Programao
Visual C# Consolidado 807
Controles
Sistema de Arquivos.
Voc pode manter todos os arquivos de um site em uma pasta simples. O sistema de arquivos
de web sites no dependem do IIS. Para obter detalhes, consulte Passo-a-passo: Criando uma
pgina da web bsica no Visual Web Developer.
IIS Local.
Como nas verses anteriores do Visual Studio, voc pode criar aplicativos do IIS que podem
residir na raiz local do IIS ou em um diretrio virtual. Voc tambm pode criar pastas virtuais.
Para obter detalhes, consulte Passo-a-passo: Acesso a Dados Bsico em Pginas da Web.
Remoto.
Voc pode criar aplicativos residentes em servidores remotos que oferecem suporte ao
FrontPage 2002 Server Extensions da Microsoft. Este o modelo que foi usado em verses
anteriores do Visual Web Developer e continua recebendo suporte nesta verso.
FTP.
Voc pode abrir web sites atravs de FTP. Para obter detalhes, consulte Passo-a-passo:
Edio de Web Sites com FTP no Visual Web Developer.
Servidor de Desenvolvimento do ASP.NET
A ferramenta de desenvolvimento Web do Visual Web Developer inclui um servidor de aplicao
de teste simplificado, o ASP.NET Development Server, que voc pode usar para testar sistemas
de arquivos de web sites, sem precisar utilizar o IIS. Para mais informaes, consulte Servidores
Web no Visual Web Developer.
Projetos
Na nova verso do Visual Web Developer, web sites no dependem de arquivos de projeto e de
soluo. Voc pode adicionar arquivos a um web site no Visual Web Developer, ou usar o
Microsoft Windows Explorer, e os arquivos so automaticamente parte do web site.
O Visual Web Developer ainda cria arquivos de projeto e de soluo para armazenar uma
pequena quantidade de informaes especficas de projeto, como as configuraes IDE. Boa
parte das informaes que anteriormente eram armazenadas em arquivos de projeto, agora so
armazenadas no arquivo Web.config, como configuraes padro do ASP.NET 2.0, ou no so
mais necessrias. O arquivo de projeto no armazena informao necessria para executar o
aplicativo.
Visual C# Consolidado 808
Trabalhar sem um modelo de projeto no somente torna possvel adicionar, editar e remover
arquivos de fora do Visual Web Developer, como tambm torna mais fcil a mais de um
desenvolvedor trabalhar juntos para criar um site. Mais de um desenvolvedor pode adicionar ou
remover arquivos de um web site sem exigir acesso a um arquivo centralizado de projeto, que
precisa ser atualizado com as informaes do arquivo. Alm disso, mais fcil manter arquivos do
web site em um sistema controlado por origem, como o sistema de controle de verso do
Microsoft Visual SourceSafe, porque os desenvolvedores no tm, exclusivamente, que fazer o
check-out em um arquivo de projeto para adicionar arquivos ao web site.
Modelo de Compilao Dinmica
No Visual Web Developer, web sites no usam mais o modelo de compilao que foi usado em
verses anteriores, no qual o cdigo executvel do projeto inteiro era compilado em um nico
assembly. Em vez disso, como padro, a nova verso usa o modelo de compilao dinmica que
nativo para o ASP.NET 2.0.
Trabalhar com web sites que no produzem um assembly executvel como sada tem vrias
vantagens:
Voc pode testar web sites que contm pginas ainda em desenvolvimento pginas que
contm erros de compilao no impedem que outras pginas do web site sejam executadas.
Para desenvolvimento em web sites grandes, no necessrio que a aplicao inteira seja
recompilada sempre que uma alterao feita a uma pgina nica ou componente. Quando
um desenvolvedor altera uma nica pgina, somente essa pgina recompilada quando ela
solicitada em seguida.
Cdigo compartilhado.
Classes para as quais o cdigo fonte est na pasta App_Code de sua aplicao da web so
automaticamente referenciadas; se voc tiver compilado componentes, voc pode inseri-los na
pasta Bin para que o Visual Web Developer os referencie automaticamente. A funcionalidade
IntelliSense obtm informaes sobre qualquer componente que estiver instalada na pasta
Visual C# Consolidado 810
App_Code ou Bin, de sua aplicao. Para obter detalhes, consulte Passo-a-passo: Usando
Cdigo Compartilhado em Web Sites no Visual Web Developer.
Depurao.
Voc tem facilidades completas de depurao para Web Sites locais, incluindo arquivos de
sistema. A depurao menos complexa e mais rpida do que nas verses anteriores. Para
obter detalhes, consulte Passo-a-passo: Depurao de Pginas da Web no Visual Web
Developer.
Modelo Code-Behind Aperfeioado
Uma diferena significativa entre verses anteriores do Visual Web Developer e esta verso est
no funcionamento de pginas code-behind. No Microsoft Visual Studio .NET 2002, quando voc
cria pgina de Web Forms, o Visual Web Developer cria um arquivo .aspx com uma marcao e
um arquivo .vb ou .cs separado (o arquivo code-behind) para o cdigo da pgina. O arquivo code-
behind define uma classe completa que derivada da classe Page.
O Web Page Designer guarda o arquivo .aspx e o arquivo code-behind na sincronizao. Por
exemplo, se voc adicionou um controle de servidor web ao arquivo .aspx, o Web Page Designer
criou uma varivel de instncia correspondente no arquivo code-behind para aquele controle.
Nesta verso, o modelo code-behind tira proveito de um novo recurso de linguagem, conhecido
como classes parciais. O arquivo code-behind para uma pgina no uma definio completa de
classe. Em vez disso, ele inclui somente o cdigo do aplicativo que voc precisa, como
manipuladores de eventos. A classe parcial code-behind no necessita incluir variveis de
instncia; o ASP.NET 2.0 infere as instncias de controle da marcao, no tempo de compilao.
Se voc estiver programando em C#, voc no precisa incluir representantes explcitos para
vinculao de evento, porque o ASP.NET 2.0 pode deduzi-los dos atributos de evento (por
exemplo, onclick) na marcao de controle. No Visual Basic, voc pode adicionar uma clusula
Handles para a declarao de um mtodo de evento, como no modelo anterior, para vincular o
evento ao manipulador.
O novo modelo code-behind oferece uma srie de vantagens sobre o modelo anterior, da seguinte
maneira:
Edio de modelo.
O Web Page Designer fornece uma interface simplificada e mais intuitiva para criar e editar
modelos em controles complexos, como o controle DataList e o GridView.
Edio de Tabela.
muito mais fcil agora criar e editar tabelas HTML no Web Page Designer. Para obter
detalhes, consulte Passo-a-passo: Editando Tabelas HTML no Visual Web Developer.
Extensibilidade de Controle
Agora voc pode estender controles de novas e eficientes maneiras. Como antes, voc pode criar
controles de usurio e controles personalizados. Esta verso da ferramenta de desenvolvimento
da Web, o Visual Web Developer, fornece suporte aprimorado para controles de usurio, incluindo
processamento WYSIWYG no modo Design e janela Properties de suporte.
Voc pode estender o comportamento em tempo de execuo dos controles criando adaptadores
que definem a sada do controle para um dispositivo especfico ou navegador. Em tempo de
execuo, o ASP.NET 2.0 determina o tipo de dispositivo que gerou a solicitao e chama um
adaptador de controle para processar a sada apropriada para este dispositivo, para um dado
controle. Criando um adaptador para um controle e uma classe especfica de dispositivo, voc
pode personalizar a sada para o controle do dispositivo. Adaptadores so especialmente teis
para criar processamento personalizado para novos dispositivos. Para mais informaes, consulte
Criao de Adaptadores de Controle do Servidor ASP.NET - Uma Introduo.
Se voc desenvolver controles comuns, voc ter melhorado o suporte para hospedar seu
controle em um Web Page Designer, incluindo o seguinte:
Classes que permitem que voc adicione edio baseada em regio aos controles em
tempo de design.
Suporte a edio baseada em tarefas, de modo que voc possa definir verbos (tarefas)
que so expostos para o controle usando atalhos de menu no Web Page Designer.
Servios de edio de modelos que simplificam a adio de suporte para modelos nos
controles.
Informaes de conexo.
Consultas (um instruo SQL, nome de parmetro armazenado ou nomes dos mtodos
para chamar em um objeto).
O controle DetailsView exibe um registro por vez e permite que voc edite, exclua e insira
registros.
Voc pode tambm paginar atravs de vrios registros.
O controle FormView semelhante ao controle DetailsView, mas permite que voc defina
um layout de forma livre para cada registro.
O controle FormView como um controle DataList para um registro individual.
Voc pode continuar usando o controle DataGrid, embora ele seja substitudo pelo controle
GridView. Pginas existentes que usam o controle DataGrid trabalham como so. Como em
outros controles de dados, o controle DataGrid foi aprimorado para interagir com controles de
fonte de dados.
Vinculao bidirecional de dados
A combinao de controles de fonte de dados, parmetros declarativos e controles de dados
avanados fornece a capacidade para criar vinculao bidirecional de dados, sem precisar
escrever cdigo. Nos controles de fonte de dados, voc pode definir consultas ou nomes de
mtodos a serem usados para atualizaes. Controles de dados, como o controle GridView,
DetailsView e FormView, suportam modos de edio e excluso (e para alguns controles, modo
de insero) que automaticamente podem interagir com os controles de fonte de dados, para
gravar dados na fonte de dados.
Armazenamento de seqncia de caracteres de conexo
Para ajudar a tornar seus sites mais manutenveis e mais seguros, voc pode manter as
seqncias de caracteres de conexo no arquivo Web.config em uma nova seo, que foi
desenvolvida especificamente para armazenamento de seqncia de caracteres de conexo.
Quando utilizar a ferramenta de desenvolvimento da Web, o Visual Web Developer, para criar ou
configurar controles de fonte de dados, voc pode especificar que a seqncia de caracteres de
conexo seja armazenada no arquivo Web.config. Se voc alterar as fontes de dados, voc pode
facilmente alterar a seqncia de caracteres de conexo em um local, ao invs de ter que
atualizar todos os componentes de dados em todas as pginas, com uma nova seqncia de
caracteres de conexo. Para segurana adicional, voc pode criptografar a seo de seqncia
de caracteres de conexo do arquivo Web.config. Para obter detalhes, consulte Criptografar
informaes de configurao usando configurao protegida.
Acesso a dados em duas e trs camadas
O modelo anterior de vinculao de dados incentivava a criao de solues de dados em duas
camadas, na qual as pginas da Web interagiam diretamente com o banco de dados para
preencher o dataset e para vincular controles a ele. O novo modelo continua facilitando o trabalho
em uma estrutura em duas camadas. Por exemplo, o controle SqlDataSource se conecta
Visual C# Consolidado 814
diretamente a um banco de dados e executa instrues SQL ou procedimentos para ler e gravar
dados armazenados.
O novo modelo de vinculao de dados tambm torna mais fcil criar uma estrutura em trs
camadas na qual o acesso a dados tratado por um objeto corporativo de camada intermediria.
O controle ObjectDataSource interage com um objeto corporativo chamando mtodos no objeto
para recuperar e atualizar dados. Controles de dados em uma pgina podem se vincular ao
controle ObjectDataSource da mesma maneira como eles fazem a quaisquer outros controles de
fonte de dados, como o controle SqlDataSource.
A ferramenta de desenvolvimento da Web, o Visual Web Developer, inclui um assistente de
componente de dados que ajuda a criar um objeto personalizado que contm mtodos para ler e
atualizar dados. Como alternativa, voc pode criar seu prprio objeto de camada intermediria que
contm mtodos. Enquanto seu objeto personalizado expe os mtodos com as assinaturas
apropriadas, voc pode referenci-los de um controle ObjectDataSource. Para obter detalhes,
consulte Passo-a-passo: Vinculao de Dados Para Um Objeto Corporativo Personalizado.
Compatibilidade com Verses Anteriores para Acesso a Dados
A ferramenta de desenvolvimento da Web, o Visual Web Developer, continua oferecendo suporte
a pginas que usam o modelo de vinculao de dados de verses anteriores. Pginas que contm
datasets e outros componentes executam como faziam antes, e voc pode abrir e editar as
pginas no Web Page Designer. O Visual Web Developer no remove os componentes de dados
e no converte os componentes para controles de fonte de dados.
Observao
Componentes de dados, como datasets e conexes de dados, no so mostrados no Web Page
Designer do Visual Web Developer. Portanto, voc no pode definir, nem examinar as
propriedades usando a janela Properties. Entretanto, voc ainda pode editar o cdigo que usado
para instanciar os componentes de dados e definir suas propriedades.
Para obter mais informaes, consulte Viso Geral de Controles de Fonte de Dados e Passo-a-
passo: Acesso Bsico a Dados em Pginas da Web.
Convertendo sites da Web existentes
O Visual Web Developer, pode converter automaticamente seus projetos existentes para o novo e
modernizado layout de site. O processo de converso preserva a funcionalidade de seu aplicativo
e as opes de projeto que so aplicadas. Pginas da Web code-behind existentes so
convertidas em um novo modelo code-behind que preserva a separao de HTML e cdigo, mas
fornece uma estrutura simplificada. Para mais informaes, consulte Converso do Projeto Da
Web no Visual Studio.NET.
Aps a converso, voc pode usar o Web Page Designer para trabalhar com pginas e controles
que foram desenvolvidos em verses anteriores do Visual Web Developer.
Visual C# Consolidado 815
Introduo a pginas da Web do ASP.NET
Pginas da Web do ASP.NET permitem que sejam criados contedos dinmicos para seu site da
Web. Com uma pgina de HTML esttico (arquivo .htm ou .html), o servidor atende uma
solicitao Web por ler o arquivo e envi-lo como ele para o navegador. Por outro lado, quando
algum solicita uma pgina da Web do ASP.NET (arquivo.aspx), a pgina executada como um
programa no servidor Web. Enquanto a pgina estiver sendo executada, ele pode executar
qualquer tarefa que seu site da Web requerer, inclusive calcular valores, leitura ou gravao de
informaes no banco de dados, ou chamada de outros programas. Como sua sada, a pgina
dinamicamente produz marcao (elementos em HTML ou outra linguagem de marcao) e envia
essa sada dinmica para o navegador.
Este tpico fornece uma viso geral sobre as caractersticas fundamentais de como pginas da
Web do ASP.NET funcionam em aplicativos da Web.
Postbacks e Round Trips
Pginas ASP.NET executam como cdigo no servidor. Portanto, para a pgina ser processada, a
pgina configurada para enviar para o servidor quando os usurios clicarem em botes (ou
opcionalmente, quando os usurios marcarem caixas ou interagir com outros controles da pgina).
Cada vez, a pgina enviada de volta a si mesma para que ela possa executar seu cdigo de
servidor novamente e depois processar uma nova verso de si prpria para o usurio.
O ciclo de processamento para um pgina da Web do ASP.NET :
1. O usurio solicita a pgina. (A pgina solicitada usando um mtodo HTTP GET). A
pgina executa pela primeira vez, executando processamentos preliminares se voc tiver
programado-a para fazer isso.
2. A pgina dinamicamente processa a marcao para o navegador, que o usurio v como
uma pgina da Web semelhante a qualquer outra pgina.
3. O usurio digita informaes ou seleciona a partir das opes disponveis e clica em um
boto. (Se os usurios clicarem em um link em vez de um boto, simplesmente a pgina
pode ser redirecionada para outra pgina, e no ocorre mais processamento na primeira
pgina.)
4. A pgina remetida para o servidor Web. ( O navegador executa um mtodo HTTP POST,
que no ASP.NET conhecido como um postback). Especificamente, a pgina remetida de
volta a si mesma. Por exemplo, se o usurio que estiver trabalhando com a pgina
Default.aspx clicar em um boto na pgina , a pgina a remete de volta para o servidor com
um destino de Default.aspx.
5. No servidor Web, a pgina executa novamente. As informaes que o usurio digitou ou
selecionou esto disponveis para a pgina.
6. A pgina executa o processamento que voc a tiver programado para fazer.
7. A pgina processa ela mesma de volta para o navegador.
Esse ciclo continua, enquanto o usurio estiver trabalhando na pgina. Cada vez que um boto
clicado, a informao na pgina remetida para o servidor Web e a pgina executada
novamente. Cada ciclo conhecido como um round trip(processamento). Como o processamento
da pgina ocorre no servidor Web, cada ao que pode fazer a pgina requer um round trip para o
servidor.
Observao
Visual C# Consolidado 816
Uma pgina da Web do ASP.NET pode executar scripts de cliente, o que no requer um round trip
para o servidor, e que til para validao de entrada de usurio e para alguns tipos de interface
de programao. Para obter mais informaes, consulte Programando pginas da Web do
ASP.NET com script de cliente.
Postagem cruzada de pginas
Em algumas circunstncias, voc pode querer que uma pgina poste para uma pgina diferente,
no a si prpria. Isso chamado de da cross-page posting(postagem cruzada de pgina). Por
exemplo, voc pode ir criando uma srie de pginas que processam um pedido do cliente. Cada
pgina pode enviar para a prxima pgina na seqncia. Para obter mais informaes, consulte
Postagem entre Pginas em Pginas da Web do ASP.NET.
Vida til da pgina
Diferente de formulrios em aplicativos desktop, uma pgina da Web do ASP.NET no
inicializada, executa enquanto o usurio trabalha com o formulrio, e depois descarrega somente
quando o usurio clicar um boto Close (fechar). Isso ocorre porque a Web est desconectada
inerentemente. Quando um navegador solicita uma pgina de um servidor Web, o navegador e o
servidor esto conectados somente durante tempo suficiente para processar a solicitao. Depois
que o servidor Web tenha processado uma pgina para o navegador, a conexo encerrada. Se
o navegador fizer outra solicitao para o mesmo servidor Web, mesmo para a mesma pgina, a
solicitao ser processada como uma nova solicitao.
A natureza desconectada da Web determina a maneira que uma pgina ASP.NET executa.
Quando um usurio solicita uma pgina da Web do ASP.NET, uma nova instncia da pgina
criada. A pgina executa seu processamento, processa a marcao para o navegador, e
descartada. Se o usurio clica em um boto para executar uma nova postagem, uma nova
instncia da pgina criada, a pgina executa seu processamento, e novamente ser descartada.
Assim, cada nova postagem e round trip resulta em uma nova instncia da pgina.
Para obter mais informaes, consulte Pginas da Web ASP.NET.
Preservando o estado da pgina
No protocolo normal HTTP, a nica informao que o servidor tem sobre uma pgina a
informao que o usurio especificou usando controles na pgina, porque o navegador envia
somente essas informaes para o servidor quando a pgina postada. Outras informaes, tais
como valores de varivel e definies de propriedade, so descartadas. ASP.NET ajuda a
preservar outras informaes de pgina das seguintes maneiras:
O ASP.NET fornece recursos de gerenciamento de estado para que voc possa salvar
suas prprias variveis e informaes especficas do aplicativo ou informaes especficas de
sesso entre as round trips.
ASP.NET pode detectar quando uma pgina solicitada pela primeira vez e quando a
pgina enviada, o que lhe permite programar adequadamente. Por exemplo, voc talvez
queira ler informaes de um banco de dados na primeira vez que uma pgina exibida, mas
no em cada novo postback.
Observao
Visual C# Consolidado 817
O servidor pode ser configurado para guardar informaes de pgina para otimizar as pginas,
mas para fins de programao de aplicativos, melhor pensar em pginas como sendo
descartadas assim que o servidor terminar seu processamento.
Para obter mais informaes, consulte Viso Geral sobre o Gerenciamento de Estado do
ASP.NET.
Programando pginas da Web ASP.NET
Voc pode criar o cdigo de servidor para suas pginas da Web ASP.NET usando uma variedade
de idiomas no.NET Framework, incluindo Visual Basic, C#, e J#. As pginas da Web ASP.NET
podem conter scripts de cliente que executam dentro do navegador. Algumas funes ASP.NET
geram scripts de cliente e inserem-nos na pgina. Nesse caso, ASP.NET sempre gera
ECMAScript (JavaScript) para melhor funcionalidade de navegadores cruzados. Alm disso, voc
pode adicionar seus prprios scripts de cliente para funcionalidade personalizada. Se fizer isso,
voc pode utilizar qualquer linguagem de script de cliente que seja compatvel com os
navegadores que voc estiver como objetivo.
Controles de servidor
Como qualquer pgina da Web, as pginas da Web ASP.NET podem conter texto esttico. Com
mais freqncia, entretanto, voc adicionar controles para a pgina, como caixas de texto, caixas
de seleo e botes. Esses controles permitem ao usurio interagir com a pgina e enviar
informaes para o servidor quando a pgina remetida novamente.
O ASP.NET fornece um conjunto de controles conhecido como controles do servidor Web.
Controles do servidor ASP.NET podem ser semelhante aos elementos de formulrios HTML
correspondentes. Por exemplo, o controle ASP.NET TextBox semelhante a um marcador HTML
<input type="text">. Entretanto, os controles do servidor ASP.NET oferecem uma experincia de
programao mais enriquecedora de elementos HTML. H tambm controles do servidor
ASP.NET para um intervalo muito maior de funes que o que oferecido pelos elementos HTML.
Entre os controles do servidor que podem ser usados em um pgina da Web do ASP.NET est
um controle de calendrio, controles com dados vinculados que exibem listas ou grades, um
controle de logon para adicionar segurana a seu site, e muito mais.
Para obter mais informaes, consulte Controles de servidores Web do ASP.NET.
Pgina e eventos de controle do servidor
Um pgina da Web do ASP.NET e os controles dele oferecem suporte a um modelo de evento
como os encontrados em Windows Forms. Por exemplo, quando os usurios clicar em um
controle Button em um pgina da Web do ASP.NET, a pgina remetida de volta para o servidor,
recriada, e um evento de clique criado. Voc pode adicionar cdigo para a pgina que responde
a este evento de clique.
A prpria pgina inicia eventos de ciclos de vida quando inicializada, como os eventos Page_Init
e Page_Load, que oferecem a oportunidade de executar o cdigo quando a pgina inicializada
(Lembre-se de que a pgina criada e reinicializada em cada round trip). Controles individuais
podem iniciar seus prprios eventos. Controles de boto iniciam um evento Click, controles de
boto de rdio e caixas de seleo iniciam um mtodo CheckedChanged, e caixa de listagem e
controles de lista drop-down iniciam um evento SelectedIndexChanged. Alguns controles, tais
como o controle Calendar, disparam eventos que so mais abstratos do que simples eventos de
clique. Por exemplo, o controle Calendar dispara um evento VisibleMonthChanged quando
usurios navegarem para um ms diferente.
Visual C# Consolidado 818
A maioria dos controles servidor ASP.NET suportam somente alguns dos eventos que voc pode
tratar no cdigo servidor. Para processar um evento, a pgina deve executar uma round trip para
que a escolha do usurio possa ser enviada para a pgina para processamento. Os controles do
servidor no expe eventos de alta freqncia como onmouseover, porque sempre que esse
evento iniciado, outra round trip para o servidor deve ocorrer, o que iria afetar
consideravelmente o tempo de resposta na pgina. Entretanto, voc pode configurar controles de
servidor ASP.NET para iniciar eventos do lado do cliente, como onmouseover. Nesse caso, os
controles no iro ser remetidos novamente para o servidor, e voc criar um script de cliente para
responder a eventos.
Para obter mais informaes sobre como criar e usar eventos e manipuladores de eventos,
consulte Tratamento de Evento de servidor em pginas da Web ASP.NET.
Compatibilidade do navegador
Como o processamento da pgina da Web do ASP.NET ocorre no servidor Web, pginas da Web
ASP.NET so compatveis com qualquer navegador ou dispositivo mvel. Uma pgina da Web
processa automatica e corretamente a marcao (XHTML ou outra linguagem de marcao)
compatvel com o navegador para recursos, como estilos e layout. Como alternativa, voc pode
criar pginas da Web com controles projetados especificamente para processar a sada para
dispositivos especficos, como telefones celulares. Para obter mais informaes, consulte Criando
Aplicativos da Web ASP.NET Mobile.
Documentos e dados XML
As classes XML na namespace System.Xml fornecem um conjunto abrangente e integrado de
classes, permitindo-lhe trabalhar com documentos XML e dados. As classes XML do suporte a
leitura e escrita XML, edio de dados XML em memria, validao de dados, e transformao
XSLT.
O que h de novo no System.Xml
Os seguintes recursos System.Xml so novo in .NET Framework verso 2.0.
Novo modelo para processamento de dados XML
A verso 2.0 inclui um novo modelo para processamento de dados XML na memria. A
XPathNavigator classe foi atualizada para incluir editar recursos. Pode ser usado para modificar
dados armazenados na classe XmlDocument.
Para obter mais informaes consulte Processo dados XML usando o modelo de dados XPath.
Novo processador XSLT
Tem a arquitetura XSLT foi redefinida na verso .NET Framework 2.0. A XslCompiledTransform
classe o novo processador XSLT. A XslCompiledTransform classe inclui muitos
aprimoramentos de desempenho e otimizaes que que facilitam muito mais rpida que a classe
obsoleta XslTransform.
Para obter mais informaes consulte Transformaes em XSLT.
Suporte a tipo
Visual C# Consolidado 819
O XmlWriterXmlReader,. e XPathNavigator Classes tiver sido atualizadas para incluir suporte tipo
Novos mtodos nessas classes Ativar voc retornar um valor de n como um objeto Runtime de
idioma comum.
Para obter mais informaes consulte Suporte tipo nas classes System.Xml.
Novo modelo para criao XmlReader e objetos XmlWriter
Do XmlReader os mtodos estticos Create Em e XmlWriter classes so a prtica recomendada
para criar XmlReader e XmlWriter objetos. Do XmlReader o Create mtodo permite que voc
para especificar o conjunto de recursos que voc deseja ou XmlWriter Objeto para oferecer
suporte.
Consulte Criando leitores XML e Criando Writers XML Para obter mais informaes.
Inference do esquema
A classe classe XmlSchemaInference permite-lhe inferir um esquema de idioma (XSD) de
definio esquema XML da estrutura de um documento XML.
Migrando de verso 1.1 das classes XML
O Microsoft .NET Framework verso 2.0 inclui vrias atualizaes para as classes XML. Em
ordem para tirar total proveito dos novos recursos, talvez precise mover o seu cdigo existente
para as novas APIs. As sees a seguir descrevem alteraes as APIs existentes que podem
exigir que voc para atualizar o cdigo existente.
Criao XmlReader
Na verso 2.0, XmlReader objetos so criados usando o mtodo esttico Create na classe
XmlReader. Um XmlReaderSettings objeto especifica os recursos que voc deseja o criado
XmlReader para oferecer suporte.
Observao
Embora o .NET Framework inclui concreto implementaes da classe XmlReader, como o
XmlTextReader, XmlNodeReader.. e as XmlValidatingReader classes, recomendvel que voc
cria XmlReader instncias usando o Create mtodo, e as XmlValidatingReader classes,
recomendvel que voc cria XmlReader instncias usando o Create mtodo, o XmlTextReader,
XmlNodeReader Isso permite que voc para tirar proveito dos todos os novos recursos que
tenham sido adicionados para a XmlReader classe.
Verso 1.1
O cdigo a seguir cria um XmlTextReader objeto que ignora espao em branco e usa um
XmlUrlResolver objeto para resolver o nome do arquivo URI.
C#
// Supply the credentials necessary to access the Web server. XmlUrlResolver resolver = new
XmlUrlResolver(); resolver.Credentials = CredentialCache.DefaultCredentials; // Create the XmlTextReader.
XmlTextReader reader = new XmlTextReader("http://serverName/data/books.xml");
reader.WhitespaceHandling = WhitespaceHandling.None; reader.XmlResolver = resolver;
Visual C# Consolidado 820
Verso 2,0
O cdigo a seguir cria um XmlReader objeto com a mesma configurao, usando o Create
mtodo.
C#
// Supply the credentials necessary to access the Web server. XmlUrlResolver resolver = new
XmlUrlResolver(); resolver.Credentials = CredentialCache.DefaultCredentials; // Create the XmlReader.
XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true;
settings.XmlResolver = resolver; XmlReader reader =
XmlReader.Create("http://serverName/data/books.xml", settings);
Para obter mais informaes, consulte Criando leitores XML.
Validao XML
Do XmlValidatingReader na verso 2.0, e XmlSchemaCollection Classes tiver sido marcadas
obsoletos. Em vez disso, voc deve usar a XmlReaderSettings classe para criar um objeto
validao XmlReader. A XmlSchemaCollection classe substituda pela XmlSchemaSet classe.
Observao
O XmlReaderSettings e XmlSchemaSet Classes no oferecem suporte validao de esquema
XML-Data Reduced (XDR). Use a XmlValidatingReader classe se voc deve validar usando um
esquema XDR.
Verso 1.1
Do XmlValidatingReader o cdigo a seguir valida dados usando e XmlSchemaCollection
Classes.
C#
XmlValidatingReader reader = new XmlValidatingReader(new XmlTextReader("books.xml"));
reader.ValidationType = ValidationType.Schema; reader.Schemas.Add("urn:books", "books.xsd");
reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack); while
(reader.Read());
C#
private static void ValidationCallBack(object sender, ValidationEventArgs e) { Console.WriteLine("Validation
Error: {0}", e.Message); }
Verso 2,0
Do XmlReader o cdigo a seguir valida dados usando e XmlSchemaSet Classes.
C#
XmlReaderSettings settings = new XmlReaderSettings(); settings. ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:books", "books.xsd"); settings.ValidationEventHandler += new
Visual C# Consolidado 821
ValidationEventHandler (ValidationCallBack); XmlReader reader =
XmlReader.Create("books.xml",settings); while (reader.Read());
C#
private static void ValidationCallBack1(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message); }
Criao XmlWriter
Na verso 2.0, XmlWriter objetos so criados usando o mtodo esttico Create na classe
XmlWriter. Um XmlWriterSettings objeto especifica os recursos que voc deseja o criado
XmlWriter para oferecer suporte.
Observao
Embora o .NET Framework inclui a XmlTextWriter classe, que uma implementao da classe
XmlWriter, recomendvel que voc criar XmlWriter objetos com o Create mtodo. Isso permite
que voc para tirar proveito dos todos os novos recursos adicionada classe XmlWriter.
Verso 1.1
O cdigo a seguir cria um XmlTextWriter objeto com uma codificao especfica.
C#
XmlTextWriter writer = new XmlTextWriter("books.xml", Encoding.Unicode); writer.Formatting =
Formatting.Indented;
Verso 2,0
O cdigo a seguir cria um XmlWriter objeto com a mesma configurao, usando o Create
mtodo.
C#
XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding =
Encoding.Unicode; XmlWriter writer = XmlWriter.Create("books.xml", settings);
Para obter mais informaes, consulte Criando Writers XML.
Processamento XSLT
A XslCompiledTransform classe o novo processador XSLT. Ele substituir a XslTransform
classe. A XsltSettings enumerao usada para ativar as configuraes opcionais, como o
suporte para scripts incorporados ou a funo XSLT document() XSLT.
Verso 1.1
O cdigo a seguir executa uma transformao XSLT usando a XslTransform classe.
C#
Visual C# Consolidado 822
// Create the XslTransform. XslTransform xslt = new XslTransform(); // Create a resolver and set the
credentials to use. XmlUrlResolver resolver = new XmlUrlResolver(); resolver.Credentials =
CredentialCache.DefaultCredentials; // Load the style sheet.
xslt.Load("http://serverName/data/xsl/sort.xsl", resolver); // Transform the file. XPathDocument doc =
new XPathDocument(filename); XmlTextWriter writer = new XmlTextWriter("output.xml", null);
xslt.Transform(doc, null, writer, null);
Verso 2,0
O cdigo a seguir executa uma transformao XSLT usando a XslCompiledTransform classe.
C#
// Create the XslCompiledTransform object. XslCompiledTransform xslt = new XslCompiledTransform(); //
Create a resolver and set the credentials to use. XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials; // Load the style sheet.
xslt.Load("http://serverName/data/xsl/sort.xsl", XsltSettings.Default, resolver); // Transform the file.
XmlWriter writer = XmlWriter.Create("output.xml"); xslt.Transform("books.xml", writer);
Para obter mais informaes, consulte Migrando da classe XslTransform.
Arquitetura Overview of XML no .NET Framework
Esta seo fornece uma viso geral da arquitetura de XML no .NET Framework. O metas de
design para as classes XML no .NET Framework so:
Produtividade alta-.
Suporte multilnge.
Extensvel.
Arquitetura conectvel.
XmlResolver Class
XmlTextReader Class
XslCompiledTransform Class
Se voc estiver criando uma propriedade de classe que usa a XmlResolver classe, a
propriedade deve ser definida como uma propriedade somente para gravao. A propriedade
pode ser usada para especificar mas ela no pode ser usada para retornar um XmlResolver
objeto. a ser usado, o XmlResolver Isso permite um uso componente no confiveis a classe,
mas no permite-lo para recuperar e use o XmlResolver objeto diretamente.
Visual C# Consolidado 824
O aplicativo pode atenuar Negao de memria das ameaas do servio para o GetEntity
mtodo implementando uma disposio implementada IStream que limita o nmero de bytes
lidos. Isso ajuda a proteo contra situaes onde cdigo mal-intencionado tenta se passar um
fluxo de bytes infinito para o GetEntity mtodo.
XmlReader e classes XmlReaderSettings
Praticamente todos os System.Xml componentes so criados acima do conceito de Anlise XML.
Por exemplo, a XmlDocument classe usa a XmlReader classe para analisar um documento e criar
uma representao na memria do documento XML.
recomendvel usar o Create mtodo para criar XmlReader objetos. A XmlReaderSettings
classe especifica o conjunto de recursos voc deseja ativar para o XmlReader objeto.
Processamento DTD
Processamento DTD pode levar a uma condio de negao de servio. Por exemplo, o DTD
pode conter entidades aninhadas ou complexos Modelos de contedo que podem tirar uma
quantidade excessiva de tempo para processar.
Processamento DTD desativado por padro. Um XmlException encontrar os XmlReader dados
DTD acionada quando.
Processamento de esquema
O ProcessInlineSchema e ProcessSchemaLocation Sinalizadores de validao de um
XmlReaderSettings objeto no so definidas por padro. Do XmlReader Isso ajuda a proteger
contra ataques baseada em esquema quando ele est processando dados XML de uma origem
no confivel. Quando esses sinalizadores so definidas, o XmlResolver. do objeto
XmlReaderSettings usado para resolver locais do esquema encontrados no documento de
ocorrncia na XmlReader Locais de esquema no sero resolvidos se a XmlResolver
propriedade estiver definida como null, mesmo que. e ProcessSchemaLocation Sinalizadores
de validao esto definidas o ProcessInlineSchema
Esquemas adicionadas durante a validao adicionar novos tipos e pode alterar o resultado de
validao do documento que est sendo validado. Como resultado, esquemas externas somente
devem ser resolvidas de fontes confiveis.
Microsoft recomenda desativar o ProcessIdentityConstraints Sinalizador (ativado por padro)
quando XML validando, no confiveis, grande documentos em cenrios alta disponibilidade em
um esquema com restries de identidade sobre uma grande parte do documento.
Recursos externos
Dados XML podem incluir referncias a recursos externos, como um arquivo de esquema. Por
padro recursos externos so resolvidos usando um XmlUrlResolver objeto COM sem
credenciais de usurio. Isso significa que, por padro, voc pode acessar qualquer locais que no
exigem credenciais. Voc pode proteger isso mais seguindo um destes procedimentos:
Voc pode criar uma implementao personalizada IStream que limita o tamanho de
entrada usado e fornecer isso para a XmlReader classe.
Use o ReadValueChunk mtodo para lidar com grandes fluxos de dados. Esse mtodo l
um pequeno nmero de caracteres de cada vez em vez de alocar uma nica seqncia para o
valor inteiro.
Classe XmlTextReader
A XmlTextReader classe uma implementao da classe XmlReader legada.
Processamento DTD
Processamento DTD ativado por padro. Para desativar processamento DTD, defina a
ProhibitDtd propriedade como true.
Tratamento de entidade
Por padro entidades gerais no so expandidas. Entidades gerais so expandidas quando voc
chamar o ResolveEntity mtodo.
Recursos externos
Dados XML podem incluir referncias a recursos externos, como referncias DTD. Por padro
recursos externos so resolvidos usando um XmlUrlResolver objeto COM sem credenciais de
usurio.
Voc pode proteger isso mais seguindo um destes procedimentos:
No permitir que o processo XSLT aberto qualquer recursos externos passando em null
Para o XmlResolver argumento.
Blocos de script
A XslCompiledTransform classe no oferece suporte blocos de script por padro. Blocos de
script so ativados atravs da XsltSettings classe. XSLT script deve ser ativada somente se voc
exigem suporte script e voc estiver trabalhando em um ambiente totalmente confivel.
Objetos de extenso
Objetos extenso adicionam recursos de programao ao transformaes XSLT. Esse recurso
ativado por padro. Se Objetos de extenso for passados para o Transform mtodo, elas so
usadas na transformao XSLT.
Modelo de Objeto de Documento
Porque o DOM (modelo de objeto Document) caches todos os dados da memria, operaes
DOM, como Consultar, Editar, mover sub-Trees entre documentos, e salvar objetos DOM no so
recomendadas se voc estiver trabalhando com dados no confiveis e estiver preocupado com a
ataques de negao de servio. Outra opo para definir um limite para a quantidade de dados
para ler em DOM. Uma maneira para fazer isso para criar uma implementao personalizada de
fluxo que limita o tamanho de entrada usado e Use isso para carregar o objeto DOM.
Objetos XmlDocument podem conter informaes sigilosas such as credenciais de usurio no
objeto incorporado XmlResolver. Se a System.Xml.XmlDocument.XmlResolver propriedade
estiver definida como um XmlResolver objeto com credenciais de usurio, no cache o
XmlDocument objeto ou transmiti-las a um componente no confivel. Um componente no
confivel pode usar o objeto DOM, e as credenciais do usurio incorporado XmlResolver, para
acessar e carregar dados.
Visual C# Consolidado 827
System.Xml codificao diretrizes
As sees a seguir fornecem diretrizes gerais podem ser usadas para ajudar a proteger seus
System.Xml aplicativos.
Observao
Os System.Xml componentes dependem do sistema de segurana Microsoft .NET Framework.
Este tpico somente soluciona problemas de segurana especificamente que so tratados pelas
classes XML. Para obter mais informaes, consulte Segurana no .NET Framework.
Questes de segurana
As questes de segurana podem ser divididas fora em trs categorias gerais.
Acesso externo
Vrias tecnologias XML tm a capacidade para recuperar outros documentos durante o
processamento. Por exemplo, uma definio de tipo de documento (DTD) pode residir no
documento sendo analisada. O DTD tambm pode morar em um documento externo que
referenciado pelo documento sendo analisada. O idioma de definio esquema XML (XSD) e
tecnologias XSLT tambm tm a capacidade para incluir informaes de outros arquivos. Esses
recursos externos podem apresentar algumas questes de segurana:
Faa como voc garantir que seu aplicativo somente recupera arquivos de sites
confiveis? Por exemplo, se um documento XML tiver uma referncia de arquivo a um arquivo
a partir da Internet, voc deseja seu aplicativo para recuperar este arquivo?
Fazer se voc recuperar um arquivo, como voc garantir esse arquivo no contm dados
mal intencionados?
Negao de Servio
Porque documentos XML podem incluir referncias a outros arquivos, difcil para determinar a
quantidade de capacidade de processamento necessrio para analisar um documento XML. Por
exemplo, documentos XML podem incluir um DTD. Se o DTD contm entidades aninhadas ou
complexos Modelos de contedo, ele poder ter uma quantidade excessiva de tempo para
analisar o documento.
Os seguintes cenrios so considerados para ser menos vulnervel a ataques de negao de
servio porque as System.Xml classes fornecem um meio de proteo contra esses ataques.
Para saber sobre os tipos de questes de segurana que possam surgir ao trabalhar com
System.Xml componentes e o que voc pode fazer para atenuar essas ameaas, consulte
Consideraes sobre segurana System.Xml.
Anlise binrios dados XML se os dados XML binrios foi gerados pelo Microsoft SQL
Server 2005.
Processamento DTD.
Processamento XSLT.
Script XSLT desativado por padro. XSLT script deve ser ativada somente se voc
exigem suporte script e voc estiver trabalhando em um ambiente totalmente confivel.
A funo XSLT document() desativada por padro. Se voc ativar a document() funo,
restringir os recursos que podem ser acessados, passando um XmlSecureResolver objeto
para o Transform mtodo
Folhas de estilos XSLT podem incluir referncias a outros arquivos e blocos de script
incorporado. Um usurio mal-intencionado pode explorar isso, fornecendo voc com dados ou
estilo folhas que quando executado pode causar o sistema para processar at que o
computador executar baixa em Recursos.
Codificar bytes binrios como BASE64, ou BinHex, e gravao sem o texto resultante.
Passar os valores usando tipos Runtime de idioma comuns em vez de seqncias. Isso
permite evitar a Executar converses valor manualmente.
Se o processo XSLT precisa acessar um recurso de rede que exija autenticao, voc
pode usar com as credenciais necessrias. um XmlResolver
Se voc quiser restringir os recursos que o processo XSLT pode acessar, voc poder
usar com a permisso correta Definir. um XmlSecureResolver Use a XmlSecureResolver
classe caso voc precise abrir um recurso que voc no faa controle, ou que no confivel.
Se voc desejar garantir que nenhum recursos externos so acessados, voc pode
especificar null para o XmlResolver argumento.
Visual C# Consolidado 839
Consulte tambm
Transformaes em XSLT com a classe XslTransform
Observao
A XslTransform classe obsoleta no Microsoft .NET Framework verso 2.0. Voc pode executar
Extensible Stylesheet Language para transformaes transformaes (XSLT) usando a
XslCompiledTransform classe. Consulte Usando a classe XslCompiledTransform e Migrando da
classe XslTransform Para obter mais informaes.
O objetivo da XSLT para transformar o contedo de um documento XML de origem em outro
documento que seja diferente em formato ou estrutura (por exemplo, para transformar XML em
HTML para uso em um site da Web ou para transform-lo em um documento que contenha
apenas os campos necessrios para um aplicativo). Esse processo de transformao
especificado pelo W3C (World Wide Web Consortium) (W3C) Recomendao verso 1.0 XSLT
localizado em www.w3.org/TR/XSLT. No, .NET Framework a XslTransform classe, encontrada no
espao para nome System.Xml.Xsl, o processador XSLT que implementa a funcionalidade
dessa especificao. Existe um pequeno nmero dos recursos que no foram implementados da
recomendao W3C 1.0 XSLT, listada em Sadas de um XslTransform. A figura a seguir mostra a
arquitetura de transformao a .NET Framework.
Viso Geral
Arquitetura de transformao
A recomendao XSLT usa XML Path Language (XPath) para selecionar partes de um documento
XML, XPath uma linguagem de consulta usada para navegar ns de uma rvore de
documentos. Como mostrado no diagrama, a .NET Framework Implementao do XPath usada
para selecionar partes de XML armazenados em vrias classes, como um XmlDocument, um
XmlDataDocument, e um XPathDocument. Um XPathDocument um armazenamento de dados
XSLT otimizado, e quando usado com XslTransform, ele fornece transformaes XSLT com bom
desempenho.
A seguinte lista de tabela normalmente usa classes ao trabalhar com XslTransform e XPath e
suas funes.
Visual C# Consolidado 840
Classe ou
interface Funo
XPathNavigator uma API que fornece um modelo de estilo cursor para navegar em um
armazenamento, juntamente com suporte a consultas XPath. Ele no
fornece a edio de armazenamento subjacente. Para edio, use a
XmlDocument classe.
IXPathNavigable Ele uma interface que fornece um CreateNavigator mtodo para para o
armazenamento. um XPathNavigator
XmlDocument Ele permite edio do documento. Ele implementa IXPathNavigable,
permitindo cenrios edio documento-onde transformaes XSLT so
necessrias posteriormente. Para obter mais informaes, consulte Entrada
XmlDocument para XslTransform.
XmlDataDocument Ele derivado da XmlDocument. Ele Bridges o relacional e mundos XML
por meio. Para otimizar o armazenamento de dados estruturados dentro do
documento XML de acordo com mapeamentos especificados em um
DataSet o DataSet Ele implementa IXPathNavigable, permitindo cenrios
onde transformaes XSLT podem ser executadas sobre dados
recuperados de um banco de dados relacionais. Para obter mais
informaes, consulte Integrao XML com dados relacional e ADO.NET.
XPathDocument Essa classe otimizada para XslTransform consultas XPath,
processamento e e ele fornece um cache de alto desempenho somente
leitura. Ele implementa IXPathNavigable e o armazenamento preferencial
a ser usado para transformaes XSLT.
XPathNodeIterator Ele fornece navegao pela conjuntos de n XPath. Todos os mtodos de
Seleo XPath no XPathNavigator retorno um XPathNodeIterator. Vrios
XPathNodeIterator objetos podem ser criados sobre o mesmo
armazenamento, que representa cada um conjunto de ns selecionado.
Extenses XSLT MSXML
O msxsl:script e msxsl:node-set funes so as extenses XSLT Microsoft XML Core Services
(MSXML) somente suporte para a XslTransform classe.
Exemplo
Cdigo o exemplo seguinte carrega um folha de estilo XSLT, l um arquivo denominado
meusdados.xml em e executa uma transformao sobre os dados em um arquivo fictcio chamado
myStyleSheet.xsl, enviar a sada formatada para o console. an XPathDocument,
C#
using System; using System.IO; using System.Xml; using System.Xml.XPath; using System.Xml.Xsl; public
class Sample { private const String filename = "mydata.xml"; private const String stylesheet =
"myStyleSheet.xsl"; public static void Main() { XslTransform xslt = new XslTransform();
xslt.Load(stylesheet); XPathDocument xpathdocument = new XPathDocument(filename); XmlTextWriter
writer = new XmlTextWriter(Console.Out); writer.Formatting=Formatting.Indented;
xslt.Transform(xpathdocument, null, writer, null); } }
Visual C# Consolidado 841
Modelo de objeto de esquema (SOM) do XML
Um esquema XML uma ferramenta poderosa e complexa para criar e validando estrutura em
documentos XML compatveis. Semelhante ao dados modelagem em um banco de dados
relacional, um esquema fornece uma maneira de definir a estrutura de documentos XML,
especificando os elementos que podem ser usados nos documentos,, bem como o estrutura e
tipos que esses elementos devem seguir para poder ser vlido para que esquema especfica.
O esquema Object Model (SOM) fornece um conjunto de classes no espao para nome
System.Xml.Schema que permitem a voc para ler um esquema de um arquivo ou para criar um
esquema na memria programaticamente. O esquema ento pode ser traversed, editando,
compilados, validado, ou gravadas em um arquivo.
Viso geral do modelo de objeto do esquema XML
O esquema Objeto Modelo (SOM) no Microsoft .NET Framework uma API Rich que permite que
voc se criar, editar, e validar esquemas programaticamente. O som opera em documentos de
esquema XML de forma semelhante maneira como o DOM (modelo de objeto Document) opera
em documentos XML. Documentos de esquema XML so vlidos arquivos XML que, uma vez
carregados no som, transmitir significado sobre a estrutura e validade de outros documentos XML
que esto de acordo com o esquema.
Um esquema um documento XML que define uma classe de documentos XML, especificando a
estrutura ou modelo de documentos XML para um esquema especfico. Um esquema identifica as
restries sobre o contedo dos documentos XML, e descreve o vocabulrio (regras ou gramtica)
que compatveis documentos XML devem seguir a fim de ser considerada Valid esquema com
esse esquema especfica. Validao de um documento XML o processo que garante que o
documento est de acordo com a gramtica especificada pelo esquema.
A seguir esto maneiras a API som no .NET Framework permite-lhe criar, editar, e validar
esquemas.
Interagir com o Create mtodo da XmlReader classe para validar documentos da instncia
XML com base em esquemas.
Editar um esquema que pode ser complied e salvos para uso na validao dos
documentos da instncia XML dinamicamente.
O modelo de objeto de esquema
O som consiste de um conjunto abrangente de classes no espao para nome
System.Xml.Schema correspondente aos elementos em um esquema XML. Por exemplo, o
<xsd:schema>...</xsd:schema> elemento mapeia para a System.Xml.Schema.XmlSchema classe, e
todas as informaes que podem estar contidas em um <xsd:schema/> elemento podem ser
representadas usando a XmlSchema classe. Da mesma forma, e
System.Xml.Schema.XmlSchemaAttribute Classes respectivamente. e
<xsd:attribute>...</xsd:attribute> elementos mapear para o <xsd:element>...</xsd:element> o
System.Xml.Schema.XmlSchemaElement Este mapeamento continua para todos os elementos de
um Esquema XML criando um modelo de objeto de esquema XML no espao para nome
System.Xml.Schema ilustrado no diagrama a seguir.
Visual C# Consolidado 842
Para obter mais informaes sobre cada classe no espao para nome System.Xml.Schema,
consulte a System.Xml.Schema documentao de referncia espao para nome da biblioteca de
classe do .NET Framework.
Visual C# Consolidado 843
Leitura e escrita esquemas XML
Schema Object Model o som (API) pode ser usado para ler e gravar idioma de definio esquema
XML (XSD) esquemas de arquivos ou outras fontes e criar esquemas na memria XML usar as
classes no espao para nome System.Xml.Schema que mapeiam para as estruturas definidas na
recomendao Esquema XML W3C (World Wide Web Consortium) (W3C).
Leitura e escrita esquemas XML
Do Read a XmlSchema classe fornece e Write mtodos para ler e gravar esquemas XML. O Read
mtodo retorna um XmlSchema objeto que representa o esquema XML e leva um opcional
ValidationEventHandler como um parmetro para lidar com avisos de validao de esquema e
erros encontrados ao ler um esquema XML.
O Write mtodo grava esquemas XML para Stream, TextWriter e XmlWriter objetos e pode levar
um objeto como um parmetro opcional XmlNamespaceManager. Um XmlNamespaceManager
usado para tratar espaos para nome encontrado em um esquema XML. Para obter mais
informaes sobre a XmlNamespaceManager classe, consulte Gerenciar Namespaces usando o
XmlNamespaceManager.
O exemplo de cdigo a seguir ilustra Leitura e Gravao esquemas XML de e para um arquivo. O
exemplo de cdigo utiliza o example.xsd arquivo, l-lo em um XmlSchema objeto usando o static
Read mtodo, e seguida, gravar o arquivo para o console e um novo new.xsd arquivo. O exemplo
de cdigo tambm fornece um ValidationEventHandler como um parmetro para o static Read
mtodo para lidar com quaisquer avisos de validao de esquema ou erros encontrados ao ler o
esquema XML. Se (null. no for especificado sem avisos ou erros so relatados,) a
ValidationEventHandler
C#
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Schema; class
XmlSchemaReadWriteExample { static void Main() { try { XmlTextReader reader = new
XmlTextReader("example.xsd"); XmlSchema myschema = XmlSchema.Read(reader, ValidationCallback);
myschema.Write(Console.Out); FileStream file = new FileStream("new.xsd", FileMode.Create,
FileAccess.ReadWrite); XmlTextWriter xwriter = new XmlTextWriter(file, new UTF8Encoding());
xwriter.Formatting = Formatting.Indented; myschema.Write(xwriter); } catch(Exception e) {
Console.WriteLine(e); } } static void ValidationCallback(object sender, ValidationEventArgs args) { if
(args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: "); else if (args.Severity ==
XmlSeverityType.Error) Console.Write("ERROR: "); Console.WriteLine(args.Message); } }
O exemplo utiliza a example.xsd como entrada.
<?xml version="1.0"?> <xs:schema id="play" targetNamespace="http://tempuri.org/play.xsd"
elementFormDefault="qualified" xmlns="http://tempuri.org/play.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name='myShoeSize'> <xs:complexType>
<xs:simpleContent> <xs:extension base='xs:decimal'> <xs:attribute name='sizing' type='xs:string' />
</xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:schema>
Visual C# Consolidado 844
Criando esquemas XML
As classes no espao para nome System.Xml.Schema Mapear para as estruturas definidas na
recomendao Esquema XML W3C (World Wide Web Consortium) (W3C) e pode ser usado para
criar esquemas XML na memria.
Criando um esquema XML
Nos exemplos de cdigo a seguir, a API som usado para criar um cliente Esquema XML na
memria.
Criando Elemento e atributos
Exemplos de cdigo criar o cliente Esquema da parte inferior Backup, criao o filho elementos,
atributos, e seus tipos correspondentes primeiro, e os elementos de primeiro nvel.
No exemplo de cdigo a seguir, a FirstName e XmlSchemaAttribute Classes do SOM. e LastName
elementos, bem como o CustomerId atributo do esquema do cliente criado usando o
XmlSchemaElement Alm das propriedades Name do e XmlSchemaAttribute Classes. e
XmlSchemaAttribute classes, que correspondem ao atributo " name " do) ter propriedades
correspondentes em, fixedValue, form, e assim por diante e <xs:attribute /> elementos em um
esquema XML, todos os outros atributos permitidos pelo esquema o XmlSchemaElement
(defaultValue o <xs:element /> o XmlSchemaElement
C#
// Create the FirstName and LastName elements. XmlSchemaElement firstNameElement = new
XmlSchemaElement(); firstNameElement.Name = "FirstName"; XmlSchemaElement lastNameElement =
new XmlSchemaElement(); lastNameElement.Name = "LastName"; // Create CustomerId attribute.
XmlSchemaAttribute idAttribute = new XmlSchemaAttribute(); idAttribute.Name = "CustomerId";
idAttribute.Use = XmlSchemaUse.Required;
Criar tipos esquema
O contedo do elementos e atributos definido por seus tipos. Do XmlSchemaElement para criar
elementos e atributos cujos tipos so uma do esquema interna tipos, a SchemaTypeName
propriedade do ou XmlSchemaAttribute classes esto definidas com o nome qualificado
correspondente do tipo interno usando a XmlQualifiedName classe. Do XmlSchemaSimpleType
para criar um tipo definido pelo usurio para elementos e atributos, um novo tipo simples ou
complexos criado usando ou XmlSchemaComplexType Classe.
Observao
Para criar sem nome tipos simples ou complexos que sejam filhos de um elemento ou atributo
annimos definir a SchemaType propriedade de. (somente tipos simples aplicar para atributos), ou
XmlSchemaAttribute classes para o tipo simples ou complexos sem nome, em vez da
SchemaTypeName propriedade do ou XmlSchemaAttribute Classes o XmlSchemaElement o
XmlSchemaElement
Esquemas XML permitir ambos annimo e simples nomeado tipos para ser derivado por restrio
de outros tipos simples (internas ou definida pelo usurio) ou construdo como uma lista ou unio
de outros tipos simples. A XmlSchemaSimpleTypeRestriction classe usada para criar um tipo
Visual C# Consolidado 845
simples, restringindo o tipo interno xs:string. Voc tambm pode usar ou
XmlSchemaSimpleTypeUnion classes para criar tipos Lista ou unio. o
XmlSchemaSimpleTypeList A System.Xml.Schema.XmlSchemaSimpleType.Content propriedade
indica se ele uma restrio de tipo simples, lista, ou unio.
No exemplo de cdigo a seguir, tipo do FirstName elemento o tipo xs:string interno, tipo do
LastName elemento um tipo simples nomeado que uma restrio do tipo xs:string interno, com
um MaxLength aspecto Valor de 20, e tipo do CustomerId atributo o tipo xs:positiveInteger interno.
O Customer elemento um tipo complexo annimo cuja partcula a seqncia de. elementos e
LastName cujos atributos contm o CustomerId atributo a FirstName
Observao
Voc tambm pode usar ou XmlSchemaAll Classes como a partcula do tipo complexo para
duplicam <xs:choice /> ou <xs:all /> semntica. o XmlSchemaChoice
C#
// Create the simple type for the LastName element. XmlSchemaSimpleType lastNameType = new
XmlSchemaSimpleType(); lastNameType.Name = "LastNameType"; XmlSchemaSimpleTypeRestriction
lastNameRestriction = new XmlSchemaSimpleTypeRestriction(); lastNameRestriction.BaseTypeName =
new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); XmlSchemaMaxLengthFacet
maxLength = new XmlSchemaMaxLengthFacet(); maxLength.Value = "20";
lastNameRestriction.Facets.Add(maxLength); lastNameType.Content = lastNameRestriction; // Associate
the elements and attributes with their types. // Built-in type. firstNameElement.SchemaTypeName = new
XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); // User-defined type.
lastNameElement.SchemaTypeName = new XmlQualifiedName("LastNameType",
"http://www.tempuri.org"); // Built-in type. idAttribute.SchemaTypeName = new
XmlQualifiedName("positiveInteger", "http://www.w3.org/2001/XMLSchema"); // Create the top-level
Customer element. XmlSchemaElement customerElement = new XmlSchemaElement();
customerElement.Name = "Customer"; // Create an anonymous complex type for the Customer element.
XmlSchemaComplexType customerType = new XmlSchemaComplexType(); XmlSchemaSequence sequence
= new XmlSchemaSequence(); sequence.Items.Add(firstNameElement);
sequence.Items.Add(lastNameElement); customerType.Particle = sequence; // Add the CustomerId attribute
to the complex type. customerType.Attributes.Add(idAttribute); // Set the SchemaType of the Customer
element to // the anonymous complex type created above. customerElement.SchemaType = customerType;
Criando e Compiling esquemas
Nesse ponto, os elementos filho e atributos, seus tipos correspondentes, e o elemento de nvel
superior Customer ter sido criado usando a API som na memria. No exemplo de cdigo a seguir,
o elemento de esquema criado usando a XmlSchema classe, a elementos de primeiro nvel e
tipos so adicionados a ele usando a System.Xml.Schema.XmlSchema.Items propriedade e o
esquema completa compilado usando a XmlSchemaSet classe e gravada para o console.
C#
// Create an empty schema. XmlSchema customerSchema = new XmlSchema();
customerSchema.TargetNamespace = "http://www.tempuri.org"; // Add all top-level element and types to
the schema customerSchema.Items.Add(customerElement); customerSchema.Items.Add(lastNameType); //
Create an XmlSchemaSet to compile the customer schema. XmlSchemaSet schemaSet = new
Visual C# Consolidado 846
XmlSchemaSet(); schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add(customerSchema); schemaSet.Compile(); foreach (XmlSchema schema in
schemaSet.Schemas()) { customerSchema = schema; } // Write the complete schema to the Console.
customerSchema.Write(Console.Out);
O System.Xml.Schema.XmlSchemaSet.Compile mtodo valida o esquema do cliente contra as
regras para um esquema XML e torna propriedades Post Schema--compilation disponveis.
Observao
Todas as propriedades Post Schema--compilation na API som diferem da Post Schema--
Validation-InfoSet.
O ValidationEventHandler um delegado que chama o mtodo ValidationCallback de retorno de
chamada para tratar erros e avisos de validao de esquema. adicionados a XmlSchemaSet
A seguir exemplo de cdigo completa, e o esquema do cliente gravados no console.
C#
using System; using System.Xml; using System.Xml.Schema; class XmlSchemaCreateExample { static void
Main(string[] args) { // Create the FirstName and LastName elements. XmlSchemaElement
firstNameElement = new XmlSchemaElement(); firstNameElement.Name = "FirstName";
XmlSchemaElement lastNameElement = new XmlSchemaElement(); lastNameElement.Name =
"LastName"; // Create CustomerId attribute. XmlSchemaAttribute idAttribute = new
XmlSchemaAttribute(); idAttribute.Name = "CustomerId"; idAttribute.Use = XmlSchemaUse.Required; //
Create the simple type for the LastName element. XmlSchemaSimpleType lastNameType = new
XmlSchemaSimpleType(); lastNameType.Name = "LastNameType"; XmlSchemaSimpleTypeRestriction
lastNameRestriction = new XmlSchemaSimpleTypeRestriction(); lastNameRestriction.BaseTypeName =
new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); XmlSchemaMaxLengthFacet
maxLength = new XmlSchemaMaxLengthFacet(); maxLength.Value = "20";
lastNameRestriction.Facets.Add(maxLength); lastNameType.Content = lastNameRestriction; // Associate
the elements and attributes with their types. // Built-in type. firstNameElement.SchemaTypeName = new
XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); // User-defined type.
lastNameElement.SchemaTypeName = new XmlQualifiedName("LastNameType",
"http://www.tempuri.org"); // Built-in type. idAttribute.SchemaTypeName = new
XmlQualifiedName("positiveInteger", "http://www.w3.org/2001/XMLSchema"); // Create the top-level
Customer element. XmlSchemaElement customerElement = new XmlSchemaElement();
customerElement.Name = "Customer"; // Create an anonymous complex type for the Customer element.
XmlSchemaComplexType customerType = new XmlSchemaComplexType(); XmlSchemaSequence sequence
= new XmlSchemaSequence(); sequence.Items.Add(firstNameElement);
sequence.Items.Add(lastNameElement); customerType.Particle = sequence; // Add the CustomerId attribute
to the complex type. customerType.Attributes.Add(idAttribute); // Set the SchemaType of the Customer
element to // the anonymous complex type created above. customerElement.SchemaType = customerType;
// Create an empty schema. XmlSchema customerSchema = new XmlSchema();
customerSchema.TargetNamespace = "http://www.tempuri.org"; // Add all top-level element and types to
the schema customerSchema.Items.Add(customerElement); customerSchema.Items.Add(lastNameType); //
Visual C# Consolidado 847
Create an XmlSchemaSet to compile the customer schema. XmlSchemaSet schemaSet = new
XmlSchemaSet(); schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add(customerSchema); schemaSet.Compile(); foreach (XmlSchema schema in
schemaSet.Schemas()) { customerSchema = schema; } // Write the complete schema to the Console.
customerSchema.Write(Console.Out); } static void ValidationCallback(object sender, ValidationEventArgs
args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: "); else if (args.Severity
== XmlSeverityType.Error) Console.Write("ERROR: "); Console.WriteLine(args.Message); } }
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://www.tempuri.org"
targetNamespace="http://www.tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customer"> <xs:complexType> <xs:sequence> <xs:element name="FirstName"
type="xs:string" /> <xs:element name="LastName" type="tns:LastNameType" /> </xs:sequence>
<xs:attribute name="CustomerId" type="xs:positiveInteger" use="required" /> </xs:complexType>
</xs:element> <xs:simpleType name="LastNameType"> <xs:restriction base="xs:string"> <xs:maxLength
value="20" /> </xs:restriction> </xs:simpleType> </xs:schema>
Atravessando esquemas XML
Atravessando um Esquema XML usando o esquema Objeto Modelo (SOM) API fornece acesso a
elementos, atributos, e tipos armazenados no SOM. Atravessando um XML esquema carregada
no som tambm a primeira etapa da edio um Esquema XML usando a API som.
Atravessando o esquema XML
As seguintes propriedades da classe XmlSchema fornecem acesso coleo de todos os itens
adicionados ao esquema XML globais.
Propriedade Tipo de objeto armazenado na coleo ou matriz
Elements XmlSchemaElement
Attributes XmlSchemaAttribute
AttributeGroups XmlSchemaAttributeGroup
Groups XmlSchemaGroup
Includes XmlSchemaExternalXmlSchemaInclude ou XmlSchemaRedefine,
XmlSchemaImport
Items (XmlSchemaObject fornece acesso a todos os elementos nvel globais,
atributos e tipos.)
Notations XmlSchemaNotation
SchemaTypes XmlSchemaType, XmlSchemaSimpleType, XmlSchemaComplexType
UnhandledAttributes (XmlAttribute) fornece acesso a atributos que no pertencem ao
espao para nome do esquema
Observao
Todas as propriedades listadas na tabela acima, exceto para a Items propriedade, so Post
Schema--Compilation-InfoSet propriedades (PSCI) que no esto disponveis at que o esquema
tiver sido compilada. A Items propriedade uma propriedade Pre Schema--compilation que pode
ser usada antes o esquema tem foi compilada para acessar e editar todos os elementos nvel
globais, atributos e tipos.
Visual C# Consolidado 848
A UnhandledAttributes propriedade fornece acesso a todos os atributos que no pertencem ao
espao para nome do esquema. Esses atributos no so processados pelo processador de
esquema.
O exemplo de cdigo a seguir demonstra atravessando o esquema do cliente criada no tpico
Criando esquemas XML. O exemplo de cdigo demonstra atravessando o esquema usando as
colees descritas acima e grava todos os elementos e atributos no esquema no console.
O exemplo traverses o esquema do cliente nas etapas a seguir.
1. Adiciona o esquema do cliente para um novo XmlSchemaSet objeto e ento compila ele.
Quaisquer avisos de validao de esquema e erros encontrados ler ou Compilar o esquema
so tratados pelo ValidationEventHandler delegado.
2. Do XmlSchemaSet recupera o objeto compilado XmlSchema por Iterando sobre a
Schemas propriedade. Como o esquema compilada, POST Schema--Compilation-InfoSet
propriedades (PSCI) so acessveis.
3. Itera por cada XmlSchemaElement na coleo Values do POST-Schema - coleo de
compilao System.Xml.Schema.XmlSchema.Elements gravar o nome de cada elemento
para o console.
4. Obtm o Customer elemento usando a XmlSchemaComplexType Classe de tipo
complexo.
5. Se o tipo complexo tem os atributos, obter e grava seu nome para o console. Para
enumerar sobre cada XmlSchemaAttribute um IDictionaryEnumerator
6. Obtm a partcula de seqncia do tipo complexo usando a XmlSchemaSequence classe.
7. Itera por cada XmlSchemaElement na coleo
System.Xml.Schema.XmlSchemaSequence.Items gravar o nome de cada elemento filho
para o console.
A seguir o exemplo cdigo completo.
C#
using System; using System.Collections; using System.Xml; using System.Xml.Schema; class
XmlSchemaTraverseExample { static void Main() { // Add the customer schema to a new XmlSchemaSet and
compile it. // Any schema validation warnings and errors encountered reading or // compiling the schema
are handled by the ValidationEventHandler delegate. XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.tempuri.org", "customer.xsd"); schemaSet.Compile(); // Retrieve the compiled
XmlSchema object from the XmlSchemaSet // by iterating over the Schemas property. XmlSchema
customerSchema = null; foreach (XmlSchema schema in schemaSet.Schemas()) { customerSchema =
schema; } // Iterate over each XmlSchemaElement in the Values collection // of the Elements property.
foreach (XmlSchemaElement element in customerSchema.Elements.Values) { Console.WriteLine("Element:
{0}", element.Name); // Get the complex type of the Customer element. XmlSchemaComplexType
complexType = element.ElementSchemaType as XmlSchemaComplexType; // If the complex type has any
attributes, get an enumerator // and write each attribute name to the console. if
(complexType.AttributeUses.Count > 0) { IDictionaryEnumerator enumerator =
complexType.AttributeUses.GetEnumerator(); while (enumerator.MoveNext()) { XmlSchemaAttribute
attribute = (XmlSchemaAttribute)enumerator.Value; Console.WriteLine("Attribute: {0}", attribute.Name); }
} // Get the sequence particle of the complex type. XmlSchemaSequence sequence =
Visual C# Consolidado 849
complexType.ContentTypeParticle as XmlSchemaSequence; // Iterate over each XmlSchemaElement in the
Items collection. foreach (XmlSchemaElement childElement in sequence.Items) {
Console.WriteLine("Element: {0}", childElement.Name); } } } static void ValidationCallback(object sender,
ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: ");
else if (args.Severity == XmlSeverityType.Error) Console.Write("ERROR: ");
Console.WriteLine(args.Message); } }
A System.Xml.Schema.XmlSchemaElement.ElementSchemaType propriedade pode ser
XmlSchemaSimpleType, ou XmlSchemaComplexType se ele for um tipo simples definida pelo
usurio ou um tipo complexo. Tambm pode ser XmlSchemaDatatype se ele um dos tipos de
dados internos definido na Recomendao Esquema XML do W3C. No esquema do cliente, e a
FirstName. do elemento Customer XmlSchemaComplexType, e LastName so
XmlSchemaSimpleType elementos a ElementSchemaType
Exemplo de cdigo no tpico Criando esquemas XML utilizado a
System.Xml.Schema.XmlSchemaComplexType.Attributes coleo para adicionar o atributo
CustomerId para o Customer elemento. Esta uma propriedade Pre Schema--compilation. A
propriedade Post Schema--Compilation-InfoSet correspondente a
System.Xml.Schema.XmlSchemaComplexType.AttributeUses coleo, que contm todos os
atributos do tipo complexo, incluindo aqueles que so herdadas a derivao de tipo.
Editar Esquemas XML
Editar um esquema XML um dos recursos mais importantes do esquema Objeto Modelo (SOM).
Todas as propriedades Pre Schema--compilation do som poder usar para alterar os valores
existentes em um esquema XML. O esquema XML ento pode ser recompiled para refletir as
alteraes.
A primeira etapa na edio um esquema carregada no som para atravessar o esquema. Voc
deve estar familiarizado com atravessando um esquema usando a API som antes de tentar editar
um esquema. Voc tambm deve estar familiarizado com as propriedades e POST Schema--
compilation antes do POST Schema--Compilation-InfoSet (PSCI).
Editar um esquema XML
Nesta seo, dois exemplos de cdigo so fornecidos, ambos os quais editar o esquema do
cliente criada no tpico Criando esquemas XML. O primeiro exemplo de cdigo adiciona um novo
PhoneNumber elemento para o Customer elemento e o segundo exemplo de cdigo adiciona um
novo Title atributo para o FirstName elemento. O primeiro exemplo tambm usa o POST-Schema -
coleo de compilao System.Xml.Schema.XmlSchema.Elements como o meio de atravessando
o esquema do cliente enquanto o segundo exemplo de cdigo usa o Pre-Schema - coleo de
compilao System.Xml.Schema.XmlSchema.Items.
Exemplo do elemento PhoneNumber
Este primeiro exemplo de cdigo adiciona um novo PhoneNumber elemento para o Customer
elemento do esquema do cliente. O exemplo de cdigo edita o esquema do cliente nas etapas a
seguir.
1. Adiciona o esquema do cliente para um novo XmlSchemaSet objeto e ento compila ele.
Quaisquer avisos de validao de esquema e erros encontrados ler ou Compilar o esquema
so tratados pelo ValidationEventHandler delegado.
Visual C# Consolidado 850
2. Do XmlSchemaSet recupera o objeto compilado XmlSchema por Iterando sobre a
Schemas propriedade. Como o esquema compilada, POST Schema--Compilation-InfoSet
propriedades (PSCI) so acessveis.
3. Cria o PhoneNumber elemento usando a XmlSchemaElement classe, a xs:string restrio de
tipo simples Usando. e XmlSchemaSimpleTypeRestriction classes, adiciona um aspecto
padro propriedade Facets da restrio, e adiciona a restrio propriedade Content de
tipo simples e o tipo simples para do elemento PhoneNumber o XmlSchemaSimpleType o
SchemaType
4. Itera por cada XmlSchemaElement na coleo Values do POST-Schema - coleo de
compilao System.Xml.Schema.XmlSchema.Elements.
5. Do QualifiedName se do elemento "Customer", obtm o Customer elemento usando a
XmlSchemaComplexType classe e a partcula de seqncia do tipo complexo usando a
XmlSchemaSequence Classe de tipo complexo.
6. Adiciona o novo PhoneNumber elemento seqncia contendo o existente FirstName e
LastName elementos usando o Pre-Schema - coleo de compilao Items da seqncia.
7. Finalmente, reprocesses e compila o objeto modificado XmlSchema Usando e grava-para
o console. e Compile mtodos de classe XmlSchemaSet a Reprocess
A seguir o exemplo cdigo completo.
C#
using System; using System.Xml; using System.Xml.Schema; class XmlSchemaEditExample { static void
Main(string[] args) { // Add the customer schema to a new XmlSchemaSet and compile it. // Any schema
validation warnings and errors encountered reading or // compiling the schema are handled by the
ValidationEventHandler delegate. XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.tempuri.org", "customer.xsd"); schemaSet.Compile(); // Retrieve the compiled
XmlSchema object from the XmlSchemaSet // by iterating over the Schemas property. XmlSchema
customerSchema = null; foreach (XmlSchema schema in schemaSet.Schemas()) { customerSchema =
schema; } // Create the PhoneNumber element. XmlSchemaElement phoneElement = new
XmlSchemaElement(); phoneElement.Name = "PhoneNumber"; // Create the xs:string simple type
restriction. XmlSchemaSimpleType phoneType = new XmlSchemaSimpleType();
XmlSchemaSimpleTypeRestriction restriction = new XmlSchemaSimpleTypeRestriction();
restriction.BaseTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); //
Add a pattern facet to the restriction. XmlSchemaPatternFacet phonePattern = new
XmlSchemaPatternFacet(); phonePattern.Value = "\\d{3}-\\d{3}-\\d(4)";
restriction.Facets.Add(phonePattern); // Add the restriction to the Content property of the simple type //
and the simple type to the SchemaType of the PhoneNumber element. phoneType.Content = restriction;
phoneElement.SchemaType = phoneType; // Iterate over each XmlSchemaElement in the Values collection
// of the Elements property. foreach (XmlSchemaElement element in customerSchema.Elements.Values) {
// If the qualified name of the element is "Customer", // get the complex type of the Customer element //
and the sequence particle of the complex type. if (element.QualifiedName.Name.Equals("Customer")) {
XmlSchemaComplexType customerType = element.ElementSchemaType as XmlSchemaComplexType;
XmlSchemaSequence sequence = customerType.Particle as XmlSchemaSequence; // Add the new
PhoneNumber element to the sequence. sequence.Items.Add(phoneElement); } } // Reprocess and compile
the modified XmlSchema object and write it to the console. schemaSet.Reprocess(customerSchema);
schemaSet.Compile(); customerSchema.Write(Console.Out); } static void ValidationCallback(object sender,
Visual C# Consolidado 851
ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: ");
else if (args.Severity == XmlSeverityType.Error) Console.Write("ERROR: ");
Console.WriteLine(args.Message); } }
A seguir o esquema do cliente modificado criada no tpico Criando esquemas XML.
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://www.tempuri.org"
targetNamespace="http://www.tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customer"> <xs:complexType> <xs:sequence> <xs:element name="FirstName"
type="xs:string" /> <xs:element name="LastName" type="tns:LastNameType" /> <xs:element
name="PhoneNumber"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-
\d{3}-\d(4)" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> <xs:attribute
name="CustomerId" type="xs:positiveInteger" use="required" / > </xs:complexType> </xs:element>
<xs:simpleType name="LastNameType"> <xs:restriction base="xs:string"> <xs:maxLength value="20" />
</xs:restriction> </xs:simpleType> </xs:schema>
Exemplo do atributo de ttulo
Este exemplo de cdigo segundo, adiciona um novo Title atributo para o FirstName elemento do
esquema do cliente. No primeiro exemplo de cdigo, o tipo do elemento FirstName xs:string. Para
o FirstName elemento para que um atributo junto com contedo de seqncia, seu tipo deve ser
alterado para um tipo complexo com um modelo de contedo simples de extenso contedo.
O exemplo de cdigo edita o esquema do cliente nas etapas a seguir.
1. Adiciona o esquema do cliente para um novo XmlSchemaSet objeto e ento compila ele.
Quaisquer avisos de validao de esquema e erros encontrados ler ou Compilar o esquema
so tratados pelo ValidationEventHandler delegado.
2. Do XmlSchemaSet recupera o objeto compilado XmlSchema por Iterando sobre a
Schemas propriedade. Como o esquema compilada, POST Schema--Compilation-InfoSet
propriedades (PSCI) so acessveis.
3. Cria um novo tipo complexo para o FirstName elemento usando a
XmlSchemaComplexType classe.
4. Do XmlSchemaSimpleContent cria uma nova extenso de contedo simples, com um tipo
base de xs:string, usando e XmlSchemaSimpleContentExtension Classes.
5. Cria o novo Title atributo usando a XmlSchemaAttribute classe, COM e adiciona o atributo
extenso de contedo simples. de xs:string um SchemaTypeName
6. Define o modelo de contedo do contedo simples para a extenso de contedo simples e
o modelo de contedo do tipo complexo para o contedo simples.
7. Adiciona o novo tipo complexo para o Pre-Schema - coleo de compilao
System.Xml.Schema.XmlSchema.Items.
8. Itera por cada XmlSchemaObject no Pre-Schema - coleo de compilao
System.Xml.Schema.XmlSchema.Items.
Observao
Do System.Xml.Schema.XmlSchema.Items porque o FirstName elemento um elemento global
no no esquema, no est disponvel em ou System.Xml.Schema.XmlSchema.Elements
Colees. O exemplo de cdigo localiza o FirstName elemento, localizando o Customer elemento
Visual C# Consolidado 852
primeiro.
O primeiro exemplo de cdigo traversed o esquema usando o POST-Schema - coleo de
compilao System.Xml.Schema.XmlSchema.Elements. Neste exemplo, o Pre-schema -.
coleo de compilao System.Xml.Schema.XmlSchema.Items usada para atravessar o
esquema Enquanto as duas colees fornecem acesso aos elementos globais no esquema,
Iterando atravs da Items coleo mais demorada porque voc deve iterar sobre todos os
elementos no esquema globais e ele no tem nenhuma propriedade PSCI. As colees PSCI
(System.Xml.Schema.XmlSchema.Elements., System.Xml.Schema.XmlSchema.Attributes)
fornecer acesso direto a seus elementos globais, atributos, e tipos e suas propriedades PSCI,
System.Xml.Schema.XmlSchema.SchemaTypes, e assim por diante
1. Se cujos QualifiedName "Customer", obtm do elemento Customer usando a
XmlSchemaComplexType classe e a partcula de seqncia do tipo complexo usando a
XmlSchemaSequence classe tipo complexo. um elemento, o XmlSchemaObject
2. Itera por cada XmlSchemaParticle no Pre-Schema - coleo de compilao
System.Xml.Schema.XmlSchemaSequence.Items.
3. Se que. um elemento, o QualifiedName "FirstName", define do elemento FirstName
para o novo FirstName tipo complexo ao XmlSchemaParticleSchemaTypeName
4. Finalmente, reprocesses e compila o objeto modificado XmlSchema Usando e grava-para
o console. e Compile mtodos de classe XmlSchemaSet a Reprocess
A seguir o exemplo cdigo completo.
C#
using System; using System.Xml; using System.Xml.Schema; class XmlSchemaEditExample { static void
Main(string[] args) { // Add the customer schema to a new XmlSchemaSet and compile it. // Any schema
validation warnings and errors encountered reading or // compiling the schema are handled by the
ValidationEventHandler delegate. XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.tempuri.org", "customer.xsd"); schemaSet.Compile(); // Retrieve the compiled
XmlSchema object from the XmlSchemaSet // by iterating over the Schemas property. XmlSchema
customerSchema = null; foreach (XmlSchema schema in schemaSet.Schemas()) { customerSchema =
schema; } // Create a complex type for the FirstName element. XmlSchemaComplexType complexType =
new XmlSchemaComplexType(); complexType.Name = "FirstNameComplexType"; // Create a simple
content extension with a base type of xs:string. XmlSchemaSimpleContent simpleContent = new
XmlSchemaSimpleContent(); XmlSchemaSimpleContentExtension simpleContentExtension = new
XmlSchemaSimpleContentExtension(); simpleContentExtension.BaseTypeName = new
XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); // Create the new Title attribute
with a SchemaTypeName of xs:string // and add it to the simple content extension. XmlSchemaAttribute
attribute = new XmlSchemaAttribute(); attribute.Name = "Title"; attribute.SchemaTypeName = new
XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");
simpleContentExtension.Attributes.Add(attribute); // Set the content model of the simple content to the
simple content extension // and the content model of the complex type to the simple content.
simpleContent.Content = simpleContentExtension; complexType.ContentModel = simpleContent; // Add
the new complex type to the pre-schema-compilation Items collection.
customerSchema.Items.Add(complexType); // Iterate over each XmlSchemaObject in the pre-schema-
compilation // Items collection. foreach (XmlSchemaObject schemaObject in customerSchema.Items) { // If
the XmlSchemaObject is an element, whose QualifiedName // is "Customer", get the complex type of the
Visual C# Consolidado 853
Customer element // and the sequence particle of the complex type. if (schemaObject is
XmlSchemaElement) { XmlSchemaElement element = schemaObject as XmlSchemaElement; if
(element.QualifiedName.Name.Equals("Customer")) { XmlSchemaComplexType customerType =
element.ElementSchemaType as XmlSchemaComplexType; XmlSchemaSequence sequence =
customerType.Particle as XmlSchemaSequence; // Iterate over each XmlSchemaParticle in the pre-schema-
compilation // Items property. foreach (XmlSchemaParticle particle in sequence.Items) { // If the
XmlSchemaParticle is an element, who's QualifiedName // is "FirstName", set the SchemaTypeName of the
FirstName element // to the new FirstName complex type. if (particle is XmlSchemaElement) {
XmlSchemaElement childElement = particle as XmlSchemaElement; if
(childElement.Name.Equals("FirstName")) { childElement.SchemaTypeName = new
XmlQualifiedName("FirstNameComplexType", "http://www.tempuri.org"); } } } } } } // Reprocess and
compile the modified XmlSchema object and write it to the console. schemaSet.Reprocess(customerSchema);
schemaSet.Compile(); customerSchema.Write(Console.Out); } static void ValidationCallback(object sender,
ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: ");
else if (args.Severity == XmlSeverityType.Error) Console.Write("ERROR: ");
Console.WriteLine(args.Message); } }
A seguir o esquema do cliente modificado criada no tpico Criando esquemas XML.
<?xml version="1.0" encoding=" utf-8"?> <xs:schema xmlns:tns="http://www.tempuri.org"
targetNamespace="http://www.tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customer"> <xs:complexType> <xs:sequence> <xs:element name="FirstName"
type="tns:FirstNameComplexType" /> <xs:element name="LastName" type="tns:LastNameType" />
</xs:sequence> <xs:attribute name="CustomerId" type="xs:positiveInteger" use="required" / >
</xs:complexType> </xs:element> <xs:simpleType name="LastNameType"> <xs:restriction
base="xs:string"> <xs:maxLength value="20" /> </xs:restriction> </xs:simpleType> <xs:complexType
name="FirstNameComplexType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute
name="Title" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:schema>
Incluindo ou importar esquemas XML
Um esquema XML pode conter <xs:import />, <xs:include />,. e <xs:redefine /> elementos Esses
elementos de esquema consultar outros esquemas XML podem ser usadas para complementar a
estrutura do esquema que inclui ou importa-los. O XmlSchemaImport, XmlSchemaInclude e
XmlSchemaRedefine classes, mapeie para esses elementos no esquema Objeto modelo o som
(API).
Incluindo ou importando um esquema XML
O exemplo de cdigo a seguir complementa o esquema do cliente criada no tpico Criando
esquemas XML com o esquema de endereo. Supplementing o esquema do cliente com o
esquema de endereo torna tipos de endereo disponvel no esquema do cliente.
O esquema de endereo pode ser incorporada usando uma <xs:include /> ou <xs:import />
elementos para usar os componentes do esquema de endereo como. - , ou usando um
<xs:redefine /> elemento para modificar qualquer um dos seus componentes para atender a
necessidade do esquema do cliente Como o esquema de endereo tem uma targetNamespace que
diferente do esquema do cliente, o <xs:import /> elemento e portanto semntica de importao
usada.
Visual C# Consolidado 854
O exemplo de cdigo inclui o esquema de endereo nas etapas a seguir.
1. Adiciona o esquema do cliente e o esquema de endereo a um novo XmlSchemaSet
objeto e ento compila-los. Quaisquer avisos de validao de esquema e erros encontrados
ler ou compilar os esquemas so tratados pelo ValidationEventHandler delegado.
2. Do XmlSchemaSet recupera os objetos compilados XmlSchema para esquemas tanto o
cliente e endereo de por Iterando sobre a Schemas propriedade. Como os esquemas so
compiladas, POST Schema--Compilation-InfoSet propriedades (PSCI) so acessveis.
3. Cria um XmlSchemaImport objeto, define a Namespace Propriedade da importao ao
espao para nome do esquema do endereo, define a Schema Propriedade da importao
para o XmlSchema objeto do esquema de endereo, e adiciona a importao Includes
propriedade do esquema do cliente.
4. Reprocesses e compila o objeto modificado XmlSchema do esquema usando o do cliente
e grava-para o console. e Compile mtodos de classe XmlSchemaSet a Reprocess
5. Finalmente, recursivamente grava todos os os esquemas importadas para o esquema do
cliente para o console usando a Includes propriedade do esquema do cliente. Do a
Includes propriedade fornece acesso a todos inclui, importaes, ou redefines adicionado a
um esquema.
A seguir exemplo de cdigo concluda e os esquemas Cliente e Endereo gravadas o console.
C#
using System; using System.Xml; using System.Xml.Schema; class XmlSchemaImportExample { static void
Main(string[] args) { // Add the customer and address schemas to a new XmlSchemaSet and compile them.
// Any schema validation warnings and errors encountered reading or // compiling the schemas are handled
by the ValidationEventHandler delegate. XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.tempuri.org", "customer.xsd");
schemaSet.Add("http://www.example.com/IPO", "address.xsd"); schemaSet.Compile(); // Retrieve the
compiled XmlSchema objects for the customer and // address schema from the XmlSchemaSet by iterating
over // the Schemas property. XmlSchema customerSchema = null; XmlSchema addressSchema = null;
foreach (XmlSchema schema in schemaSet.Schemas()) { if (schema.TargetNamespace ==
"http://www.tempuri.org") customerSchema = schema; else if (schema.TargetNamespace ==
"http://www.example.com/IPO") addressSchema = schema; } // Create an XmlSchemaImport object, set the
Namespace property // to the namespace of the address schema, the Schema property // to the address
schema, and add it to the Includes property // of the customer schema. XmlSchemaImport import = new
XmlSchemaImport(); import.Namespace = "http://www.example.com/IPO"; import.Schema =
addressSchema; customerSchema.Includes.Add(import); // Reprocess and compile the modified
XmlSchema object // of the customer schema and write it to the console.
schemaSet.Reprocess(customerSchema); schemaSet.Compile(); customerSchema.Write(Console.Out); //
Recursively write all of the schemas imported into the // customer schema to the console using the Includes
// property of the customer schema. RecurseExternals(customerSchema); } static void
RecurseExternals(XmlSchema schema) { foreach (XmlSchemaExternal external in schema.Includes) { if
(external.SchemaLocation != null) { Console.WriteLine("External SchemaLocation: {0}",
external.SchemaLocation); } if (external is XmlSchemaImport) { XmlSchemaImport import = external as
XmlSchemaImport; Console.WriteLine("Imported namespace: {0}", import.Namespace); } if
(external.Schema != null) { external.Schema.Write(Console.Out); RecurseExternals(external.Schema); } } }
static void ValidationCallback(object sender, ValidationEventArgs args) { if (args.Severity ==
Visual C# Consolidado 855
XmlSeverityType.Warning) Console.Write("WARNING: "); else if (args.Severity == XmlSeverityType.Error)
Console.Write("ERROR: "); Console.WriteLine(args.Message); } }
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:tns="http://www.tempuri.org"
targetNamespace="http://www.tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.example.com/IPO" /> <xs:element name="Customer">
<xs:complexType> <xs:sequence> <xs:element name="FirstName" type="xs:string" /> <xs:element
name="LastName" type="tns:LastNameType" /> </xs:sequence> <xs:attribute name="CustomerId"
type="xs:positiveInteger" use="required" / > </xs:complexType> </xs:element> <xs:simpleType
name="LastNameType"> <xs:restriction base="xs:string"> <xs:maxLength value="20" /> </xs:restriction>
</xs:simpleType> </xs:schema> <schema targetNamespace="http://www.example.com/IPO"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ipo="http://www.example.com/IPO">
<annotation> <documentation xml:lang="en"> Addresses for International Purchase order schema
Copyright 2000 Example.com. All rights reserved. </documentation> </annotation> <complexType
name="Address"> <sequence> <element name="name" type="string"/> <element name="street"
type="string"/> <element name="city" type="string"/> </sequence> </complexType> <complexType
name="USAddress"> <complexContent> <extension base="ipo:Address"> <sequence> <element
name="state" type="ipo:USState"/> <element name="zip" type="positiveInteger"/> </sequence>
</extension> </complexContent> </complexType> <!-- other Address derivations for more countries or
regions --> <simpleType name="USState"> <restriction base="string"> <enumeration value="AK"/>
<enumeration value="AL"/> <enumeration value="AR"/> <!-- and so on ... --> </restriction>
</simpleType> </schema>
Para obter mais informaes sobre e XmlSchemaRedefine classes, consulte documentao de
referncia de classe espao para nome e Especificaes do esquema do W3C XML a
System.Xml.Schema., e <xs:redefine /> elementos e XmlSchemaImport, XmlSchemaInclude a
<xs:import />, <xs:include />
Integrao XML com dados relacional e ADO.NET
A XmlDataDocument classe uma classe derivada de e contm dados XML. o XmlDocument, A
vantagem de que ele fornece uma ponte entre dados relacionais e hierrquico. o
XmlDataDocument um XmlDocument que pode ser vinculados a e ambas as classes podem
sincronizar alteraes feitas nos dados contidos em duas classes. um DataSet Um XmlDocument
que esteja vinculado ao permite XML para integrar com dados relacionais, e voc que no tm
com os dados representados como o XML ou em um formato Relacional. um DataSet Voc pode
fazer ambos e no ser restrito a um nica representao dos dados.
Os benefcios de ter dados em dois modos de exibio disponveis so:
A parte do documento XML estruturada pode ser mapeado para um DataSet, e ser
eficiente armazenados, indexado, e pesquisados.
O DataSet pode armazenar uma parte do XML. Isto , voc pode usar XPath ou
XslTransform Para armazenar a. apenas os elementos e atributos de juros um DataSet A
partir da, as alteraes podem ser feitas o subconjunto de dados, menores e filtrados com as
alteraes propagando aos dados maiores no XmlDataDocument.
Visual C# Consolidado 856
Voc tambm pode executar uma transformao sobre os dados que foi carregados em do SQL
Server. o DataSet Outra opo para vincular WinForm gerenciados classes-Estilo- .NET
Framework e controles WebForm para uma DataSet que foi preenchido de um fluxo de entrada
XML.
Alm de suporte XslTransform, um XmlDataDocument Dados Relacionais expe para XPath
consultas e validao. Basicamente, todos os servios XML esto disponveis sobre dados
relacionais, e instalaes relacionais como vnculo de controle, CodeGen, e assim por diante,
esto disponveis sobre uma projeo de XML estruturada sem comprometer fidelidade XML.
Porque XmlDataDocument herdada de um XmlDocument, ele fornece uma implementao de
DOM W3C. O fato de alguma forma. que associado a, e armazenar um subconjunto de seus
dados em, um DataSet faz no restringir ou alterar seu uso como a XmlDataDocument uma
XmlDocument Cdigo escrito para consumir um XmlDocument funciona inalterado contra um
XmlDataDocument. O DataSet Fornece exibio relacional dos mesmos dados definindo tabelas,
colunas, relaes, e restries, e um armazenamento de dados do usurio Autnomo, na
memria.
A ilustrao a seguir mostra as associaes diferentes que dados XML tem com e
XmlDataDocument. o DataSet
A ilustrao mostra dados XML que podem ser carregados diretamente em que permite a
manipulao direta com XML da maneira Relacional. a DataSet, Ou, o XML pode ser carregado
em uma classe de DOM, que o XmlDataDocument, e posteriormente carregado e sincronizado
com derivado o DataSet.. o DataSet Porque as alteraes feitas aos dados em um
armazenamento de dados, so refletidas no outro armazenamento. e XmlDataDocument esto
sincronizados em um nico conjunto a DataSet
Do XmlDocument o XmlDataDocument herda todos os recursos de edio e navegao. H
momentos ao usar. e seus recursos herdados, sincronizados com uma opo mais apropriada
que carregar XML diretamente na XmlDataDocument a DataSet, o DataSet A tabela a seguir
mostra os itens a serem considerados ao escolher o mtodo a ser usado para carregar o DataSet.
Quando se carregar XML diretamente para um
DataSet
Quando se sincronizar um
XmlDataDocument com um DataSet
Consultas de dados na DataSet so mais fcil com
SQL que XPath.
Consultas XPath so necessrias sobre os
dados no DataSet.
Preservao do elemento ordenao no cdigo-
fonte XML no crtica.
Preservao do elemento ordenao no
cdigo-fonte XML essencial.
Espao em branco entre elementos e formatao
no precise ser preservado no cdigo-fonte XML.
Espao em branco e formatao
manuteno no cdigo-fonte XML crtica.
Visual C# Consolidado 857
Se carregar e gravar XML diretamente em e fora de um DataSet Endereos suas necessidades,
consulte Carregar um DataSet de XML e Gravar um DataSet como dados XML.
Do DataSet se carregando de um XmlDataDocument Endereos suas necessidades, consulte
Sincronizando um Datasetwith um documento XML.
Resolver externos recursos XML nomeados por um URI
O XmlResolver uma classe abstrata que localiza externos recursos XML que tiver sido
nomeados por um URI. usado para carregar documentos XML, e para resolver externos
recursos, como entidades, DTDs ou esquemas, e importar ou incluir diretivas. As XmlResolver
alas digite todos os aspectos do negociar a conexo com os recursos, inclusive tratamento
credenciais de segurana, abrindo a conexo com a fonte de dados, e retornar o recurso sob a
forma de um fluxo ou outro objeto.
O.NET Framework inclui duas implementaes da classe XmlResolver.
Criar um XmlSecureResolver objeto somente que tem permisso para acessar o site da
intranet local.
C#
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(),
"http://myLocalSite/");
Para restringir o acesso usando uma permisso defina
1. Criar um WebPermission objeto.
C#
WebPermission myWebPermission = new WebPermission(PermissionState.None);
2. Permitir acesso apenas s seguintes URLs dois.
C#
myWebPermission.AddPermission(NetworkAccess.Connect,"http://www.contoso.com/");
myWebPermission.AddPermission(NetworkAccess.Connect,"http://litwareinc.com/data/");
3. Adicionar as permisses da Web ao objeto PermissionSet.
C#
PermissionSet myPermissions = new PermissionSet(PermissionState.None);
myPermissions.AddPermission(myWebPermission);
4. Crie um XmlSecureResolver objeto usando o conjunto de permisses.
C#
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
Para restringir o acesso usando provas
Criar um XML Web Services Quando voc cria um XML Web Services, voc est
criando um aplicativo que expe a funcionalidade para clientes XML Web Services.
Acessar um XML Web Services Quando voc acessa um XML Web Services, seu
aplicativo cliente localiza, referencia, e usa a funcionalidade contida em um XML Web Services
separado. O cliente de um XML Web Services tipicamente um aplicativo que est apto a
enviar, receber e processar mensagens para e oriundas de XML Web Services. Entretanto, o
requisito mnimo que o cliente deve ser capaz de enviar mensagens para o XML Web
Services. Isso inclui todos os aplicativos usando o .NET Framework.
Visual C# Consolidado 867
XML Web Services pode ser aplicativos autnomos ou subcomponentes de maior um aplicativo da
Web. Por exemplo, suponha que voc estiver criando um aplicativo da Web que vende Livros on-
line. Seu aplicativo da Web pode interagir com XML Web Services da seguinte forma:
Criando um XML Web Services Seu Aplicativo expe sua ordem processando a lgica
como um XML Web Services, que seus Web sites afiliados podem usar em seus aplicativos da
Web para vender livros atravs de seu armazenamento on-line sem exigir que seus clientes
visitem seu site.
Acessando um XML Web Service Seu Aplicativo acessa um XML Web Services
fornecido por outra empresa on-line que especializada em escrever e fornecer revises de
livros para vendedores de livros on-line. Quando um visitante da sua loja on-line v os detalhes
de um livro especfico, eles tambm vem as revises desse livro na mesma pgina.
Lembre-se, XML Web Services podem ser acessados de praticamente qualquer outro tipo de
aplicativo, incluindo outros XML Web Services, aplicativos de Web, aplicativos Windows, e
aplicativos de console. O requisito mnimo que o cliente deve ser capaz de enviar mensagens
para o XML Web Services.
Programao na Web com XML Web Services
XML Web Services permitem a troca de dados e a chamada remota da lgica de aplicativo usando
mensagens XML para mover dados atravs de firewalls e entre sistemas heterogneos.
O Visual Studio fornece ferramentas para criao XML Web Services em ambos os cdigos
gerenciados e no gerenciados. Para cdigo gerenciado, Visual Studio torna possvel para
desenvolvedores criar XML Web Services que totalmente aproveitem o poder do .NET
Framework. Alm disso, Visual Studio tambm torna possvel para desenvolvedores criar XML
Web Services usando Servidor ATL e C++ nativo.
XML Web Services criados no cdigo gerenciado usam o modelo de aplicativo ASP.NET.
O Visual Studio simplifica o processo de localizar e acessar XML Web Services usando a noo
de referncias da Web. Adicionando uma referncia da Web a um aplicativo cliente resulta na
gerao de uma classe proxy que serve como uma representao local do XML Web Services
com a qual o cliente pode interagir. Este recurso est disponvel a aplicativos escritos no cdigo
gerenciado ou no gerenciado. Ao adicionar uma referncia da Web, o Visual Studio gera a classe
proxy no mesmo idioma de programao assim como o aplicativo cliente.
Aplicativos cliente XML Web Services criados no cdigo gerenciado usam o modelo de
aplicativo ASP.NET.
Criando XML Web Services em cdigo gerenciado
Voc cria XML Web Services no cdigo gerenciado usando a estrutura pgina ASP.NET
Framework. Voc inicia criando um arquivo.asmx. Esse arquivo contm a diretiva WebService,
que identifica a classe pblica que implementa a lgica XML Web Services. O classe de XML Web
Service contm um ou mais mtodos pblicos para exposio em um XML Web Services. Esses
mtodos XML Web Services so prefaceados com o atributo WebMethod. ASP.NET trata infra-
estrutura para expor esses mtodos como um XML Web Services. Para obter mais informaes,
consulte Modelo de cdigo para servios Web XML no cdigo gerenciado.
Para criar XML Web Services no cdigo gerenciado usando o Visual Studio, voc precisa acessar
um servidor Web configurado para desenvolver aplicativos ASP.NET. Voc desenvolve XML Web
Services em cdigo gerenciado em um servidor de desenvolvimento. Por padro, o servidor de
desenvolvimento o computador no qual voc instalou o Visual Studio. Normalmente, voc
Visual C# Consolidado 868
desenvolve e contri o projeto num servidor de desenvolvimento, para em seguida implant-lo em
outro servidor (o servidor de implantao) que ir hospedar o XML Web Services. Entretanto, se
ocorrer desenvolvimento diretamente no servidor que hospedar o XML Web Services, o servidor
de desenvolvimento e implantao sero os mesmos.
Nesta seo
Modelo de cdigo para XML Web Services no cdigo gerenciado
Descreve o modelo de cdigo usado pelos servios da Web no cdigo gerenciado.
Explorando contedo Servio da Web XML
Descreve o contedo de um servio da Web que voc pode exibir em um navegador da
Web.
Criando projetos servio da Web ASP.NET
Fornece instrues sobre como criar um XML Web Services usando o modelo de projeto
servio da Web ASP.NET.
Adicionar um XML Web Service a um projeto da Web existente no cdigo gerenciado
Fornece instrues sobre como adicionar um servio da Web para um projeto da Web
existente.
Usando o atributo WebService
Fornece instrues sobre como aplicar o atributo
System.Web.Services.WebServiceAttribute.
Herana da classe WebService
Fornece instrues sobre como fazer herana da classe
System.Web.Services.WebService.
Criar um mtodo servio XML da Web
Fornece instrues sobre como criar um mtodo exposto por um servio da Web.
Usando o atributo WebMethod
Fornece instrues sobre como aplicar o atributo
System.Web.Services.WebMethodAttribute.
Depurando XML Web Services no cdigo gerenciado
Fornece instrues sobre como depurar um servio da Web usando mtodos mltiplos.
Implantando XML Web Services em cdigo gerenciado
Fornece instrues sobre como implantar um servio da Web usando mtodos variados.
Sees relacionadas
Programao na Web com XML Web Services
Visual C# Consolidado 869
Fornece links para vrios tpicos XML Web Services.
Introduo programao XML Web Services no cdigo gerenciado
Descreve o paradigma de programao de servios da Web.
Acessando XML Web Services no cdigo gerenciado
Descreve o processo e fornece instrues sobre como acessar servios da Web no cdigo
gerenciado.
Personalizando mensagens SOAP
Descreve como personalizar mensagens SOAP, incluindo como trabalhar com vrios
mtodos de codificao XML.
Usando cabealhos SOAP
Descreve como utilizar cabealhos SOAP em XML Web Services criados usando
ASP.NET e como incluir informaes adicionais com mensagens SOAP.
Criando XML Web Services usando ASP.NET
Fornece informaes do .NET Framework SDK sobre criao de XML Web Services
usando ASP.NET.
Tratamento e incluso de excees nos XML Web Services
Descreve como tratar e incluir excesses em XML Web Services criados usando
ASP.NET.
XML Web Services criados com Servidor ATL
Descreve como criar, distribuir e consumir XML Web Services usando Servidor ATL e C++.
Acessando XML Web Services no cdigo gerenciado
Um cliente XML Web Services qualquer componente ou aplicativo que faz referncia e usa um
XML Web Services. No necessariamente isso precisar ser um aplicativo baseadas no cliente;
na verdade, em muitos casos seus clientes XML Web Services podem ser outros aplicativos da
Web, como formulrios da Web ou mesmo outros XML Web Services.
Nesta seo
Modelo de cdigo para acessar XML Web Services no cdigo gerenciado
Descreve o processo de acesso a servios da Web em cdigo gerenciado.
Localizando XML Web Services
Fornece instrues sobre como localizar servios da Web para acessar.
Gerando um proxy XML Web Service
Fornece instrues sobre como gerar uma classe proxy para um servio da Web.
Visual C# Consolidado 870
Acessando um servio da Web XML no cdigo gerenciado
Fornece instrues sobre como acessar um servio da Web de um aplicativo cliente escrito
em cdigo gerenciado.
Acessando assincronamente um XML Web Service em cdigo gerenciado
Fornece instrues sobre como acessar de forma assncrona um servio da Web de um
aplicativo cliente escrito em cdigo gerenciado.
Sees relacionadas
Programao na Web com XML Web Services
Fornece um portal para toda documentao de servios da Web.
Introduo programao de XML Web Services em cdigo gerenciado
Descreve o paradigma da programao de servios da Web.
Criando XML Web Services em cdigo gerenciado
Descreve o processo e fornece instrues sobre como criar servios da Web em cdigo
gerenciado.
Criando clientes XML Web Services
Descreve o processo e fornece instrues sobre criao de clientes XML Web Services.
Personalizando mensagens SOAP
Descreve como personalizar mensagens SOAP, incluindo como trabalhar com vrios
mtodos de codificao XML.
Usando cabealhos SOAP
Descreve como utilizar cabealhos SOAP nos servios da Web criados usando ASP.NET e
como incluir informaes adicionais com mensagens SOAP.
How to: Access XML Web Services from a Browser
Fornece instrues sobre acessar servios da Web ASP.NET em um navegador da Web
usando HTTP-GET, HTTP-POST e HTTP-SOAP.
XML Web Services criados com servidor ATL
Descreve o processo e provm instrues sobre como criar e acessar servios da Web
usando um servido ATL e C++.
Criado usando clientes do servio XML da Web ASP.NET e
Servios XML da Web
Irrevocably nos ltimos anos, uma fora tem restyled a paisagem de desenvolvimento de
aplicativos mais de qualquer outro na Internet. Organizaes tornaram progressivamente
Visual C# Consolidado 871
dependem dos recursos digital e canais de comunicao que so fornecidos pela Internet e
tecnologias relacionadas. Como resultado, muito poucos aplicativos so criados e desenvolvidos
que atualmente no fazer considerar como melhor para incorporar e aproveitar tecnologias da
Internet para totalmente dinamizar os benefcios da computao conectado.
Quando no pursuing totalmente novo desenvolvimento de aplicativos, as organizaes podem
ser encontradas tentativa de criar aplicativos que agregar vrios aplicativos tradicionais, orientado
tarefas-em um aplicativo simples, composto. Isso s vezes inclui integrar aplicativos que existe
dentro dos limites de uma entidade separada, como outra empresa ou um provedor de servios.
No entanto, um dilema ainda maior surge quando tentam integrar aplicativos legados criado
usando uma variedade de tecnologias, modelos de objeto, sistemas operacionais, e linguagens de
programao. Como voc tornar todos eles funcionam juntos? A resposta a Internet
programvel.
Extensible linguagem de marcao (XML) como um formato Descrio dados abertas tem
fornecidos aumento para a realidade de um Internet programvel. Da mesma forma TCP / IP
fornecido conectividade universal para a Internet, e HTML fornecido um idioma padronizada para
exibir informaes em uma grande variedade de plataformas para consumo humano, XML fornece
um idioma padronizada para trocar dados para consumo automatizado. Ele fornece a capacidade
para representar dados em um formato que permite que computadores para enviar e receber
dados em um estilo previsvel, habilitando programabilidade que ultrapassa sistemas fechados,
controlado amplamente aceitos. XML liberating porque sua simplicidade e extensibilidade
permite que voc para definir quase tudo, permitindo sala para expanso. Uma dos blocos
construo fundamental da Internet programvel servios XML da Web.
O Microsoft oferece suporte para criar servios XML da Web, usando tecnologias projetado para
atender s necessidades de diferentes audincias. Especificamente, o Microsoft oferece aos
desenvolvedores a opo de criar os Servios XML da Web usando ASP.NET, ATL Server,
sistema de interao remota.NET, e o 2.0 Toolkit SOAP. Remotos ASP.NET e.NET fazer Criando
Servios XML da Web mais fcil, conforme eles so criados na parte superior do.NET Framework.
O 2.0 Toolkit SOAP fornece suporte servios XML da Web compatvel com a Microsoft Visual
Studio 6.0 e aplicativos herdados, permitindo que eles para fins de interoperabilidade com
servios da Web XML construdo sobre o .NET Framework.
Nesta seo
Viso geral do XML Web Services
Fornece uma viso geral neutra da plataforma dos XML Web Services.
XML Web Services Usando ASP.NET
Detalhes como criar servios XML da Web, usando o ASP.NET.
Criando clientes XML Web Services
Detalhes como criar um cliente para um servio XML da Web, independentemente da
plataforma ou tecnologia usada para criar do XML Web Service.
Tratamento e incluso de excees nos XML Web Services
Descreve como para lidar com excees de um servio XML da Web criados com clientes
servio XML da Web ASP.NET e criados com o.NET Framework.
Usando cabealhos SOAP
Visual C# Consolidado 872
Detalhes como cabealhos SOAP pode ser definido, processada, e manipulados para
clientes chamar servios XML da Web criados com ASP.NET.
Personalizando SOAP Message formatao
Descreve como para controlar o SOAP enviados para e do Servios XML da Web criados
com ASP.NET.
Modificao de mensagens SOAP usando extenses SOAP
Explica como criar extenses Modifique a mensagem SOAP enviada atravs da rede para
servios XML da Web criados com ASP.NET e seus clientes.
Passo-a-passo: Personalizando a Gerao de Descries de Servios e Classes Proxy
Descreve as etapas para criar um extenso do formato da descrio do servio (SDFE).
Como personalizar a gerao de descries de servio e classes proxy:
Fornece cdigo de exemplo que define um extenso do formato da descrio do servio.
Tipos de dados com suporte pelos servios XML da Web criados usando ASP.NET
Lista os tipos de dados suporte para servios XML da Web criados com ASP.NET.
Atributos para criados usando clientes do servio XML da Web ASP.NET e Servios da Web XML
Lista os atributos que podem ser aplicadas aos criados com clientes servio XML da Web
ASP.NET e Servios XML da Web.
Sees relacionadas
Programao de rede
Mostra como usar classes de acesso a Internet para implementar ambos os aplicativos
baseados na Web e na Internet.
COMO: Acessar um Servio da Web XML no Cdigo Gerenciado
Acessando um XML Web Services a partir de cdigo gerenciado um processo simples. Primeiro,
voc adiciona uma referncia da Web no seu projeto para o XML Web Services que voc deseja
acessar. A referncia da Web cria uma classe proxy com mtodos que servem como proxies para
cada mtodo exposto do XML Web Services. Em seguida, voc adiciona o namespace para a
referncia da Web. Finalmente, voc criar uma instncia de classe proxy e acessar os mtodos de
classe assim como acessaria os mtodos de uma outra classe qualquer. Para obter mais
informaes, consulte Modelo de Cdigo para Acessar XML Web Services em Cdigo
Gerenciado.
Por padro, adicionar uma referncia da Web adiciona tambm mtodos para a classe proxy para
acessar o XML Web Services de forma assncrona. Para obter mais informaes, consulte
Acessar um XML Web Services de forma assncrona em cdigo gerenciado.
Para acessar um XML Web Services no cdigo gerenciado
1. Crie o aplicativo a partir do qual voc deseja acessar um XML Web Services. Este
aplicativo pode at ser outro XML Web Services.
Visual C# Consolidado 873
2. Adicionar uma referncia da Web para o XML Web Services com o qual seu aplicativo ir
interagir. Para obter instrues, consulte Adicionando e Removendo Referncias da Web.
3. Crie uma instncia do objeto do proxy em seu cdigo cliente onde voc deseja acessar o
XML Web Services.
4. Acesse os mtodos do XML Web Services como voc faria com qualquer outro
componente.
No cdigo de exemplo abaixo, o aplicativo cliente (Application1) est acessando um XML
Web Services para o qual ele tem uma referncia da Web (Converter) que contm uma
classe proxy (Service1), que possui um mtodo (ConvertTemperature) para chamar o
XML Web Services. As duas linhas de cdigo em negrito representam o cdigo que
necessrio para acessar o XML Web Services.
C#
using System; namespace Application1 { class Class1 { static void Main() { Converter.Service1 cService
= new Converter.Service1(); Console.WriteLine("Temperature in degrees Fahrenheit: "); double
dFahrenheit = Convert.ToDouble(Console.ReadLine()); double dCelsius =
cService.ConvertTemperature(dFahrenheit); Console.Write("Temperature in degrees Celsius: ");
Console.WriteLine(dCelsius.ToString()); } } }
COMO: Acessar um Servio da Web XML Assincronamente no Cdigo Gerenciado
Cada mtodo Web em uma classe proxy de servio da Web possui uma cpia assncrona. A
classe proxy gera automaticamente mtodos assncronos e um evento correspondente para cada
mtodo Web. Quando o mtodo assncrono chamado, ele executado em outro segmento e
dispara o evento correspondente quando ele retorna. Voc pode executar cdigo quando um
mtodo assncrono retorna, atravs da criao de um manipulador para seus eventos
correspondentes.
Chamar um mtodo Web de forma assncrona com o Visual Basic
1. Declare uma instncia da classe proxy de servio da Web usando a palavra-chave
WithEvents, conforme mostrado abaixo:
Dim WithEvents myWebService As New Service1
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
2. No editor de cdigo, use a palavra-chave Handles para criar um manipulador de eventos
para o evento MethodCompleted, que corresponde ao mtodo que voc deseja chamar. Por
exemplo, se voc estivesse chamando um mtodo chamado HelloWorld assincronamente,
voc deveria criar um mtodo semelhante ao seguinte:
Private Sub HelloWorldComplete(ByVal sender As Object, _ ByVal completed As
localhost.HellowWorldCompletedEventArgs) _ Handles myWebService.HelloWorldCompleted ' Insert
code to implement the method here End Sub
Observe que o mtodo que manipula o evento MethodCompleted deve corresponder a
assinatura do evento. Isso comumente exige um argumento Object para representar o
remetente, e uma instncia do EventArgs do mtodo, a qual consiste no mesmo namespace
que a classe proxy de servio da Web. Voc tambm pode usar o Code Editor para criar
automaticamente manipuladores de eventos para voc. Para obter mais informaes,
consulte How to: Create Event Handlers in the Visual Basic Code Editor.
Visual C# Consolidado 874
3. Chame o mtodo Web usando o formulrio MethodAsync do mtodo. Por exemplo, se
voc estivesse chamando um mtodo Web chamado HelloWorld assincronamente, ele
deveria ser da seguinte forma:
HelloWorldAsync
Observe que o valor de retorno do mtodo est disponvel na propriedade Result do
EventArgs.
Chamar um mtodo Web de forma assncrona com C#
1. Declare uma instncia da classe proxy de servio da Web, conforme mostrado abaixo:
private localhost.Service1 myWebService = new localhost.Service1 ();
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
2. No Code Editor, adicione um manipulador para o evento MethodCompleted que
corresponde ao mtodo que voc deseja chamar. Por exemplo, se voc estivesse
chamando um mtodo chamado HelloWorld assincronamente, voc deveria criar um
mtodo semelhante ao seguinte:
private void HelloWorldCompleted(Object sender, localhost.HelloWorldCompletedEventArgs
Completed) { // Insert code to implement the method here }
Observe que o mtodo que manipula o evento MethodCompleted deve corresponder a
assinatura do evento. Isso comumente exige um argumento Object para representar o
remetente e uma instncia do EventArgs do mtodo, a qual consiste no mesmo namespace
que a classe proxy de servio da Web. Voc tambm pode usar o Code Editor para criar
automaticamente manipuladores de eventos para voc. Para obter mais informaes,
consulte Como criar manipuladores de eventos no Editor de Cdigo Visual C# (guia de
programao C#):.
3. No Construtor para a classe, adicione o manipulador de evento do MethodCompleted
lista de manipuladores para tal evento, como mostrado abaixo:
private void Form1_Load(object sender, EventArgs e) { myWebService.HelloWorldCompleted += new
localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted); }
4. Chame o mtodo Web usando o formulrio MethodAsync do mtodo. Por exemplo, se
voc estivesse chamando um mtodo Web chamado HelloWorld assincronamente, ele
deveria ser da seguinte forma:
HelloWorldAsync();
Observe que o valor de retorno do mtodo est disponvel na propriedade Result do
EventArgs.
Como: Acessar XML Web Services de um navegador
Depois que voc publicar um servio da Web criados com ASP.NET, voc pode testar sua
funcionalidade usando um navegador para chamar ele via o HTTP-GET ou HTTP-POST. Acessar
o arquivo.asmx em um navegador e clique em hiperlinks para os mtodos Servio da Web, ou
acessar mtodos individuais diretamente, acrescentando uma seqncia de consulta a URL.asmx.
Observao
Visual C# Consolidado 875
Por padro, um servio da Web criados com ASP.NET capaz de oferecem suporte a vrios
protocolos, incluindo SOAP sobre HTTP e implementaes de HTTP-GET e HTTP-POST onde
SOAP XML no- retornado em resposta.
Para testar um servio da Web em um navegador usando HTTP-GET
1. Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao.
2. Acessar um navegador da Web e digite a URL para o servio da Web no endereo barra,
usando o seguinte formato:
http://servername/apppath/webservicename.asmx
Parte caminho Value (Valor)
servername O nome do servidor no qual o servio da Web foi implantado.
Apppath O nome do seu diretrio virtual e o restante do caminho do aplicativo da
Web.
webservicename.asmx O nome do arquivo.asmx Servio da Web.
Por exemplo, suponha que voc ter publicado um servio da Web chamada StockServices.
When published, the base URL for this service is
http://<servername>/apppath/StockServices.asmx. You could test this service by entering
this HTTP-GET request in the browser's address bar:
http://<servername>/apppath/StockServices.asmx
O servidor, em resposta a essa solicitao, exibe pgina Descrio HTML o servio da Web
na.
3. Pgina Descrio HTML a servios da Web mostra todos os mtodos Servio da Web aos
quais um servio da Web especfico. Vincular ao mtodo servio Web desejado e insira os
parmetros necessrios para testar o mtodo e receber a resposta XML.
Para diretamente teste um mtodo de servio da Web em um navegador usando HTTP-GET
1. Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao.
2. Acessar um navegador da Web e digite o URL para o mtodo de servio da Web no
endereo barra, usando este formato:
http://servername/vdir/webservicename.asmx/Methodname?parameter=value
Parmetro Value (Valor)
servername O nome do servidor no qual o servio da Web for implantado.
Apppath O nome do seu diretrio virtual e o restante do caminho do aplicativo da
Web.
webservicename.asmx O nome do arquivo.asmx Servio da Web.
Visual C# Consolidado 876
Methodname O nome de um mtodo pblico que seja exposto pelo seu servio Web.
Se deixar em branco, a Web pgina Descrio do servio no mostrada,
listando cada mtodo pblico no arquivo.asmx disponveis. (Opcional)
Parmetro O parmetro apropriado nome e valor para qualquer parmetro exigido
pelo seu mtodo. Se deixar em branco, a Web pgina Descrio do
servio no mostrada, listando cada mtodo pblico no arquivo.asmx
disponveis. (Opcional)
Observao
O nome do mtodo Servio da Web nessa sintaxe diferencia maisculas e minsculas, mas no
so o servidor, projeto, e nomes de servio da Web.
Por exemplo, suponha que o StockServices Servio da Web do procedimento anterior contm
um mtodo de servio da Web chamado GetQuote; o mtodo servio Web aceita um smbolo
de aes como um parmetro, retornando o preo como um nmero de ponto flutuante de
preciso dupla. Insira a solicitao HTTP-GET a seguir na barra Endereos do navegador
para testar esse mtodo:
http://<servername>/apppath/StockServices.asmx/GetStockQuote?tickerName=MSFT
3. O servidor envia uma resposta contendo um documento XML, que exibida no navegador.
Por exemplo GetQuote, o XML tem o preo atual de aes voc solicitar. O resultado pode
aspecto como o seguinte:
<?xml version="1.0" ?>
<double>74.5</double>
Para testar um servio da Web em um navegador usando HTTP-POST
1. Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao. Este procedimento usa o seguinte servio
da Web implantado como um math.asmx arquivo que seja acessvel a partir da raiz virtual
de um http://www.contoso.com Site, como um exemplo:
C#
<%@ WebService Language="C#" Class="Math" %> using System.Web.Services; public class Math :
WebService { [ WebMethod ] public int Add(int num1, int num2) { return num1+num2; } [
WebMethod ] public int Subtract(int num1, int num2) { return num1-num2; } }
Visual Basic
<%@ WebService Language="VB" Class="Math" %> Imports System.Web.Services Public Class Math
Inherits WebService <WebMethod> _ Public Function Add(num1 As Integer, num2 As Integer) As
Integer Return num1 + num2 End Function <WebMethod> _ Public Function Subtract(num1 As
Integer, num2 As Integer) As Integer Return num1 - num2 End Function End Class
2. Crie uma pgina HTML com um formulrio que tenha o method atributo definido como
POST. Use o seguinte formato:
<form method=POST action='http://www.contoso.com/math.asmx/Subtract'> <input type="text"
size="5" name='num1'\"></td> - <input type="text" size="5" name='num2'\"></td> = <input
type=submit value="Subtract"> </td> </form>
Visual C# Consolidado 877
Parmetro Value (Valor)
Mtodo POST Se voc desejar para testar seu servio da Web usando HTTP-POST, use
POST.
AO URL para o mtodo de servio da Web. No exemplo anterior, math.asmx o servio
da Web e Subtract o mtodo Servio da Web.
Tipo ="text" Para cada parmetro do mtodo Servio da Web, criar input marcas com o atributo
Tipo definido como " text" . Isso permite que voc para digitar um valor de parmetro
em Controle de entrada de texto.
Nome
='num1'
O nome do parmetro mtodo Servio da Web. Adicionar quantos controles de
entrada de texto no formulrio pois h parmetros no mtodo de servio da Web.
Por exemplo, se um mtodo de servio da Web tiver trs parmetros, trs controles
de entrada de texto so necessrias que cada ter seu name atributo definido como o
nome do parmetro.
Tipo =
enviar
Adicionar um boto Enviar para voc pode enviar os dados de volta para o mtodo
servio Web.
3. Acessar um navegador da Web e digite o URL para o documento HTML criado na etapa
anterior.
O documento HTML criado na etapa anterior exibido.
4. Insira os valores apropriados para o mtodo de servio da Web nas caixas de texto e
clique no submit boto.
Por exemplo, e 3 se voc inseriu 6 para as caixas dois texto para mtodo Servio da Web o
exemplo na Subtract, o seguinte resultado retornado:
<?xml version="1.0" ?> <int xmlns="http://tempuri.org/">3</int>
Consulte tambm
COMO: Explorar contedo de Servios da Web XML
O arquivo.asmx representa o ponto enderevel de entrada de XML Web Services criados com
cdigo gerenciado. A maneira como voc acessa esse arquivo via HTTP determina o tipo de
resposta recebida.
Pgina de Ajuda de Servio
Quando chamado em um navegador da Web sem fornecimento de uma seqncia de caracteres
de consulta reconhecido, o arquivo.asmx retorna uma pgina de ajuda de servio, gerada
automaticamente, para o XML Web Service. Isso o equivalente a fazer um HTTP-GET no
arquivo.asmx.
Este mtodo de Servio ajuda a pgina a fornecer uma lista dos mtodos fornecidos pelo XML
Web Service e que voc pode acessar programaticamente. Esta pgina contm links para cada
mtodo que levar voc a informaes adicionais sobre esse mtodo. Alm disso, esta pgina
contm um link para o documento de descrio do XML Web Service.
Visual C# Consolidado 878
Acessar a Pgina de Ajuda de Servio
Na campo Endereo do navegador, digite o URL bsico para o XML Web Service usando
este formato:
http://servername/projectname/xmlwebservicename.asmx
Parmetro Valor
servername O servidor no qual o XML Web Service est instalado.
projectname Nome do projeto do seu XML Web Service e quaisquer informaes
adicionais de diretrio necessrias para acessar o arquivo.asmx para seu
XML Web Service.
webservicename.asmx O nome do arquivo.asmx para o XML Web Service.
Por exemplo, para acessar um XML Web Service chamado Service1.asmx, que faz parte de
um projeto chamado WebService1 em sua mquina local, voc deve digitar o seguinte:
http://localhost/XmlWebService1/Service1.asmx
A pgina de ajuda de servio do mtodo fornece informaes adicionais relacionadas quele
mtodo de XML Web Service especfico.
A pgina fornece a possibilidade de chamar o mtodo usando o protocolo HTTP-POST. O mtodo
XML Web Service, no entanto, deve suportar o protocolo HTTP-POST para ativar essa
funcionalidade.
Na parte inferior da pgina, a pgina de ajuda de servio do mtodo fornece exemplos de
mensagens de solicitao e resposta para os protocolos que o mtodo XML Web Service suporta.
Descrio do Servio
A pgina de ajuda de servio tambm fornece um link para a descrio de servio do XML Web
Service, que uma definio formal dos recursos do XML Web Service. A descrio de servio
um documento que usa a gramtica WSDL (Web Services Description Language) (WSDL). A
descrio de servio define o contrato para os formatos das mensagens que os clientes precisam
seguir para trocar mensagens com o XML Web Service. Para obter mais informaes, consulte
Descrio do XML Web Service.
Acessar a descrio de servio
No campo Endereo do navegador, digite o URL bsico para o XML Web Service e
fornea a seqncia de caracteres de consulta WSDL utilizando este formato:
http://servername/projectname/xmlwebservicename.asmx?WSDL
Parmetro Valor
servername O servidor no qual o XML Web Service est instalado.
projectname Nome do projeto do seu XML Web Service e quaisquer informaes
adicionais de diretrio necessrias para acessar o arquivo.asmx para seu
XML Web Service.
Visual C# Consolidado 879
webservicename.asmx O nome do arquivo.asmx para o XML Web Service.
Por exemplo, para acessar a descrio de servio de um XML Web Service chamado
Service1.asmx, que faz parte de um projeto chamado WebService1 em sua mquina local,
voc deve digitar o seguinte:
http://localhost/XmlWebService1/Service1.asmx?WSDL
Acessando XML Web Services de um navegador da Web
Voc pode acessar um XML Web Service que oferea suporte ao protocolo HTTP-GET em um
navegador da Web. Por padro, os XML Web Services que voc cria no Visual Studio, usando o
modelo de projeto de Web Service ASP.NET, suportam HTTP-GET, HTTP-POST, e HTTP-SOAP.
Nem todos os protocolos podem oferecer suporte a todos os mtodos. Em geral, os protocolos
HTTP-GET e HTTP-POST so mais restritos que o HTTP-SOAP, em relao aos tipos de dados
que eles suportam.
Acessar um XML Web Service de um navegador da Web
Na campo Endereo do navegador, digite o URL bsico para o XML Web Service com o
nome e parmetros do mtodo na seqncia de caracteres de consulta, usando o seguinte
formato:
http://servername/projectname/xmlwebservicename.asmx/methodname?parametername0=value0&par
ametername1=value1&...¶meternamen=valuen
Parmetro Valor
servername O servidor no qual o XML Web Service est instalado
projectname Nome do projeto do seu XML Web Service e quaisquer informaes
adicionais de diretrio necessrias para acessar o arquivo.asmx para seu
XML Web Service.
webservicename.asmx O nome do arquivo.asmx para o XML Web Service.
methodname O nome do mtodo Web com diferenciao de letras maisculas de
minsculas.
parametername Os nomes dos parmetros do mtodo da Web.
Valor Os valores codificados da URL de cada um dos parmetros do mtodo da
Web.
Por exemplo, para acessar o mtodo ReturnThisString de um XML Web Service chamado
Service1.asmx, com um parmetro chamado MyString definido com o valor de "This is my
test String", e que parte de um projeto chamado WebService1 na sua mquina local, voc
deve digitar o seguinte:
http://localhost/XmlWebService1/Service1.asmx/ReturnThisString?MyString=This+is+my+test+string
Consulte tambm
Visual C# Consolidado 880
COMO: Criar Projetos de Servio da Web ASP.NET
Voc pode iniciar um projeto que inclui os arquivos necessrios para criar um XML Web Services
em Visual Basic ou Visual C#, usando os modelos de projeto fornecidos pelo Visual Studio.
Para criar um projeto XML Web Services
1. No menu File, aponte para New, e clique Web Site.
2. Na caixa de dilogo New Web Site, selecione o cone ASP.NET Web Service.
3. Digite o endereo do servidor Web no qual voc ir desenvolver o XML Web Services. Por
exemplo, usar " http://MyServer/Application " ou " http://MyServer " simplesmente para
desenvolver o diretrio raiz. Voc tambm pode criar seu site no sistema de arquivos,
escolhendo um endereo arquivo, como " C:\Application "
4. Clique OK para criar o projeto.
O Visual Studio cria automaticamente os arquivos necessrios e referncias para suporte um XML
Web Services . Quando concludo, a IDE exibe o arquivo cdigo de servio no modo de exibio
de cdigo. Para obter mais informaes, consulte ASP.NET XML Web Service Basics.
Consulte tambm
COMO: Usar o Atributo WebService
Voc pode usar o atributo WebService para especificar o namespace, que usa como padro "
http://tempuri.org. " e o texto de descrio para o XML Web Services. Por padro o modelo do
projeto de servio da Web ASP.NET no gera uma classe que inclui este atributo. Separe
mltiplas propriedades com uma vrgula.
Aplicar o atributo WebService
BufferResponse
Visual C# Consolidado 882
CacheDuration
Description
EnableSession
MessageName
TransactionOption
BufferResponse
A propriedade BufferResponse do atributo WebMethod habilita o buffer de respostas para um
mtodo do XML Web Service. Quando definida como true, a configurao padro, o ASP.NET faz
um buffer inteiro da resposta antes de envi-la para para o cliente. O buffer muito eficiente e
ajuda a melhorar o desempenho, minimizando a comunicao entre o processo ativo e o processo
do IIS. Quando definida como false, o ASP.NET faz buffers da resposta em blocos de 16 KB.
Normalmente, voc deve definir essa propriedade para false somente se voc no quiser todo o
contedo da resposta na memria de uma s vez. Por exemplo, voc est mandando de volta
uma coleo que est transmitindo seus itens a partir de um banco de dados. A menos que seja
especificado em contrrio, o valor padro true. Para obter mais informaes, consulte
Propriedade WebMethodAttribute.BufferResponse.
Fazendo um buffer da resposta de um mtodo de XML Web Service
O Visual Studio salva todos os arquivos no projeto que voc modificou desde a ltima
compilao.
Adicione uma referncia da Web no seu projeto. Para obter mais informaes, consulte
Como: Adicionar e remover referncias da Web. Uma classe de um proxy automaticamente
gerada e adicionada sua soluo, que ento pode ser instanciada como uma outra classe
qualquer.
COMO: Criar um Cliente de Aplicativo de Console
Exemplo do cdigo
Criar um aplicativo de console que atua como um cliente de servios da Web bem simples.
Depois que uma classe proxy for criada, uma nova instncia da classe proxy pode ser criada,
contanto que ele seja acessvel pelo aplicativo de console. A maneira mais fcil para torn-lo
Visual C# Consolidado 888
acessvel para compilar a classe proxy em montagem para o aplicativo Console. Como
alternativa, a classe proxy podem ser compilado em um conjunto e implantado onde o aplicativo
Console possam acess-lo.
Para criar um aplicativo cliente console Servio da Web
1. Criar um proxy para o servio da Web.
C#
Wsdl http://www.contoso.com/Counter.asmx?WSDL
Para obter mais informaes, consulte Criando um proxy de servio da Web XML.
2. Criar um aplicativo de console.
3. Criar uma instncia da classe proxy em seu cdigo do cliente.
C#
Counter myCounter = new Counter();
4. Chame o mtodo da classe proxy que se comunica com o mtodo de servio da Web.
C#
UsageCount = counter.ServiceUsage();
5. Compilar o aplicativo Console em um executvel. No exemplo a seguir, o aplicativo
Console foi salvo como UsageMonitor.
C#
csc /t:exe /r:System.Web.dll,System.XML.dll,System.Web.Services.dll UsageMonitor.cs Counter.cs
Exemplo
C#
using System; class UsageMonitor { public static void Main(string[] args) { int UsageCount; // Create an
instance of the Web service class. Counter myCounter = new Counter(); // Call the Web service method
ServiceUsage. UsageCount = myCounter.ServiceUsage(); // Output the results to the console. if (UsageCount
== 1) Console.WriteLine("Web service has been utilized >" + UsageCount.ToString() + "< time."); else
Console.WriteLine("Web service has been utilized >" + UsageCount.ToString() + "< times."); } }
COMO: Manipular Excees Lanadas por um Mtodo de Servio da Web
O exemplo de cdigo a seguir de um cliente chamar um mtodo de servio da Web captura um
SoapException acionada pelo mtodo servio Web. O cliente depois preenche uma Tabela HTML
com as propriedades do.For caught SoapException mais no tratamento falhas SOAP recebidas
por clientes de servios da Web, consulte Tratamento e excees Throwing nos Servios XML da
Web.
Exemplo
C#
<%@ Import Namespace="System.Web.Services.Protocols" %> <%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" %> <html> <head> <script runat=server language=c#> void Page_Load(Object
o, EventArgs e){ // Create a new instance of the Web service proxy class. ThrowSoapException
throwSoapException = new ThrowSoapException(); // Make a call to the Web service method, which throws
an // exception. try { throwSoapException.myThrow(); } catch (SoapException error) { // Populate the table
Visual C# Consolidado 889
with the exception details. ErrorTable.Rows.Add(BuildNewRow("Fault Code Namespace",
error.Code.Namespace)); ErrorTable.Rows.Add(BuildNewRow("Fault Code Name", error.Code.Name));
ErrorTable.Rows.Add(BuildNewRow( "SOAP Actor that threw Exception", error.Actor));
ErrorTable.Rows.Add(BuildNewRow("Error Message", error.Message));
ErrorTable.Rows.Add(BuildNewRow("Detail", HttpUtility.HtmlEncode(error.Detail.OuterXml))); return; } }
// This populates a row in an HtmlTable. HtmlTableRow BuildNewRow(string Cell1Text, string Cell2Text) {
HtmlTableRow row = new HtmlTableRow(); HtmlTableCell cell1 = new HtmlTableCell(); HtmlTableCell
cell2 = new HtmlTableCell(); //Set the contents of the two cells. cell1.Controls.Add(new
LiteralControl(Cell1Text)); //Add a cell to the row. row.Cells.Add(cell1); cell2.Controls.Add(new
LiteralControl(Cell2Text)); //Add a cell to the row. row.Cells.Add(cell2); return row; } </script> <head>
<body> <table id="ErrorTable" CellPadding=5 CellSpacing=0 Border="1" BorderColor="black"
runat="server" /> </body>
COMO: Implementar um Cliente Servio da Web Assncrono Usando a Tcnica de Callback
A tcnica de retorno de chamada uma maneira para implementar um cliente do servio da Web
para se comunicar com um mtodo de servio da Web de forma assncrona, mesmo que o
mtodo pode ser destinado a acesso assncrono. A tcnica explicado no tpico comunicao
com Asynchronously servios XML da Web.
Este exemplo for baseada em uma classe PrimeFactorizer de servio da Web com um mtodo
Factorize, para o qual a ferramenta WSDL.exe gerou dois mtodos proxy cliente assncrona,
BeginFactorize e EndFactorize.
Para implementar a tcnica de retorno de chamada
1. Definir um funo callback que implementa o delegado AsyncCallback.
C#
public static void FactorizeCallback(IAsyncResult ar)
2. Criar uma instncia do AsyncCallback delegado.
C#
AsyncCallback cb = new AsyncCallback(TestCallback.FactorizeCallback);
3. Chamar o mtodo Begin, passando o funo callback como o segundo argumento e um
objeto fornecendo estado (no neste exemplo, a implementao do cliente do
PrimeFactorizer) como o terceiro argumento.
C#
IAsyncResult ar = pf.BeginFactorize(factorizableNum, cb, pf);
4. Verifique a propriedade IsCompleted em retornado pelo mtodo Begin. o IAsyncResult O
valor definido como true Depois o cliente tem recebeu uma resposta de um servidor.
5. Dentro do funo callback, acessar o objeto estado. O IAsyncState parmetro na
propriedade AsyncState possui o objeto passado como o terceiro parmetro para o Begin
mtodo.
C#
PrimeFactorizer pf = (PrimeFactorizer) ar.AsyncState;
6. Dentro do funo callback, chame o mtodo final sobre o objeto estado obtidos na etapa
anterior.
Visual C# Consolidado 890
C#
long[] results = pf.EndFactorize(ar);
Exemplo
C#
using System; using System.Runtime.Remoting.Messaging; using MyFactorize; class TestCallback { public
static void Main(){ long factorizableNum = 12345; PrimeFactorizer pf = new PrimeFactorizer(); //Instantiate
an AsyncCallback delegate to use as a parameter //in the BeginFactorize method. AsyncCallback cb = new
AsyncCallback(TestCallback.FactorizeCallback); // Begin the Async call to Factorize, passing in our //
AsyncCalback delegate and a reference // to our instance of PrimeFactorizer. IAsyncResult ar =
pf.BeginFactorize(factorizableNum, cb, pf); // Keep track of the time it takes to complete the async call // as
the call proceeds. int start = DateTime.Now.Second; int currentSecond = start; while (!ar.IsCompleted){ if
(currentSecond < DateTime.Now.Second) { currentSecond = DateTime.Now.Second;
Console.WriteLine("Seconds Elapsed..." + (currentSecond - start).ToString() ); } } // Once the call has
completed, you need a method to ensure the // thread executing this Main function // doesn't complete prior
to the call-back function completing. Console.Write("Press Enter to quit"); int quitchar = Console.Read(); }
// Set up a call-back function that is invoked by the proxy class // when the asynchronous operation
completes. public static void FactorizeCallback(IAsyncResult ar) { // You passed in our instance of
PrimeFactorizer in the third // parameter to BeginFactorize, which is accessible in the // AsyncState
property. PrimeFactorizer pf = (PrimeFactorizer) ar.AsyncState; long[] results; // Get the completed results.
results = pf.EndFactorize(ar); //Output the results. Console.Write("12345 factors into: "); int j; for (j = 0;
j<results.Length;j++){ if (j == results.Length - 1) Console.WriteLine(results[j]); else Console.Write(results[j]
+ ", "); } } }
COMO: Implementar um Cliente Servio da Web Assncrono Usando a Tcnica de Espera
A tcnica de espera uma maneira para implementar um cliente do servio da Web para se
comunicar com um mtodo de servio da Web de forma assncrona, mesmo que o mtodo pode
ser destinado a acesso assncrono. A tcnica explicado no tpico comunicao com
Asynchronously servios XML da Web.
Este exemplo for baseada em uma classe PrimeFactorizer de servio da Web com um mtodo
Factorize, para o qual a ferramenta WSDL.exe gerou dois mtodos proxy cliente assncrona,
BeginFactorize e EndFactorize.
Para implementar a tcnica de espera
1. O cliente de servios da Web chama o Begin mtodo da classe proxy gerado.
C#
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
2. O cliente de servios da Web acessa um WaitHandle objeto atravs da AsyncWaitHandle
propriedade do retornado IAsyncResult. O cliente chama um dos mtodos de espera, a
WaitHandle classe e espera para um ou mais objetos de sincronizao a ser sinalizado.
Se um cliente usa essa tcnica para assincronamente chamar apenas um mtodo de
servio da Web, ele poder chamar WaitOne para aguardar o processamento desse
mtodo para concluir. Outros mtodos espera so WaitAny e WaitAll.
C#
Visual C# Consolidado 891
ar.AsyncWaitHandle.WaitOne();
3. Quando o mtodo de espera retorna, o cliente chama o End mtodo para obter os
resultados.
C#
results = pf.EndFactorize(ar);
Exemplo
C#
// -----------------------------------------------------------------------// Async Variation 2. // Asynchronously
invoke the Factorize method, //without specifying a call back. using System; using
System.Runtime.Remoting.Messaging; // MyFactorize, is the name of the namespace in which the proxy
class is // a member of for this sample. using MyFactorize; class TestCallback { public static void Main(){
long factorizableNum = 12345; PrimeFactorizer pf = new PrimeFactorizer(); // Begin the Async call to
Factorize. IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null); // Wait for the asynchronous
operation to complete. ar.AsyncWaitHandle.WaitOne(); // Get the completed results. long[] results; results =
pf.EndFactorize(ar); //Output the results. Console.Write("12345 factors into: "); int j; for (j = 0;
j<results.Length;j++){ if (j == results.Length - 1) Console.WriteLine(results[j]); else Console.Write(results[j]
+ ", "); } } }
Passo-a-passo: Redirecionando um Aplicativo para Apontar para um Servio da Web XML
Diferente na Instalao
Esta explicao passo a passo demonstra como criar um aplicativo da Web que pode ser
redirecionado para alcanar um XML Web Services diferente usando a propriedade URL
Behavior, uma classe Installer, e um projeto de instalao da Web. Isso til quando voc
precisa alcanar um XML Web Services localmente durante o desenvolvimento e deseja usar uma
verso de produo do XML Web Services quando seu aplicativo for implantado.
Observao
As caixas de dilogo e comandos de menu voc v pode diferir das descritas na Ajuda
dependendo das configuraes ativas ou edio. Para alterar as configuraes, escolha Import
and Export Settings no menu Tools. Para mais informaes, consulte Configuraes do Visual
Studio.
Criando o projeto de aplicativos da Web
A primeira etapa criar um projeto de aplicativos da Web ASP.NET que contm uma referncia
da Web para um XML Web Services.
Para criar o projeto
Crie um aplicativo da Web que tenha uma referncia da Web para um XML Web Services.
Uma referncia da Web para qualquer XML Web Services vlido bastar para esta explicao
passo a passo. Por exemplo, voc pode usar o aplicativo da Web descrito em Passo-a-Passo:
acessando um XML Web Services utilizando Visual Basic ou Visual C#
Adicionando uma classe Installer
Visual C# Consolidado 892
Classes Installer, tambm conhecidas como componentes de instalao, so classes .NET
Framework chamadas como aes personalizadas durante a instalao. Nesse caso, voc
adicionar um projeto de biblioteca de classes soluo. Nesse projeto de biblioteca de classes,
voc ir criar uma classe Installer e substituir seu mtodo Install, adicionando cdigo para
modificar o aplicativo da Web do arquivo .config. Para obter mais informaes sobre classes
Installer, consulte Introduo aos componentes de instalao.
Para criar o projeto de biblioteca de classes
1. Clique com o boto direito do mouse no n soluo no Solution Explorer e clique em
Add, em seguida clique em New Project.
2. Na caixa de dilogo Add New Project, no n Visual Basic, selecione Class Library.
3. Nomeie o projeto InstallerClassLibrary.
Para adicionar e implementar uma classe Installer
1. Clique com o boto direito do mouse no n de projeto InstallerClassLibrary no Solution
Explorer, e em seguida, clique em Add, e depois Class.
2. Na caixa de dilogo Add New Item, selecione Installer Class e altere o Name para
WebServiceInstaller.vb.
Quando voc clicar em Add, a classe ser adicionado ao projeto, e o designer para a classe
Installer abrir.
3. Clique duas vezes no designer para abrir o editor de cdigos.
4. No WebServiceInstaller.vb, adicione o seguinte cdigo na parte inferior do mdulo de
classe Installer (logo acima da declarao End Class); esse cdigo implementa o mtodo
Install:
Visual Basic
Public Overrides Sub Install(ByVal stateSaver As _ System.Collections.IDictionary) ' Gets the
parameter passed across in the CustomActionData. Dim installlog As New
System.IO.StreamWriter("Installation.log") installlog.AutoFlush = True Try Dim ProvidedName As
String = Me.Context.Parameters.Item("ServerName") Dim SvcName As String =
Me.Context.Parameters.Item("ServiceName") installlog.WriteLine("Starting Edit of the config file") If
ProvidedName = "" Or SvcName = "" Then Throw New InstallException("No arguments specified")
End If ' Uses reflection to find the location of the config file. Dim Asm As System.Reflection.Assembly
= _ System.Reflection.Assembly.GetExecutingAssembly Dim strConfigLoc As String strConfigLoc =
Asm.Location Dim strTemp As String strTemp = strConfigLoc strTemp =
strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _ strTemp.LastIndexOf("\")) strTemp =
strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _ strTemp.LastIndexOf("\")) Dim
FileInfo As System.IO.FileInfo = New System.IO.FileInfo( _ strTemp & "\web.config")
installlog.WriteLine("File info: " & strTemp) If Not FileInfo.Exists Then Throw New
InstallException("Missing config file") End If ' Loads the config file into the XML DOM. Dim
XmlDocument As New System.Xml.XmlDocument() XmlDocument.Load(FileInfo.FullName) ' Finds
the right node and change it to the new value. Dim Node As System.Xml.XmlNode Dim FoundIt As
Boolean = False For Each Node In _ XmlDocument.Item("configuration").Item("appSettings") ' Skips
any comments. If Node.Name = "add" Then If Node.Attributes.GetNamedItem("key").Value = _
"servername.service" Then ' Note that "Service1.asmx" should be replaced with the ' actual name of the
XML Web service file. Node.Attributes.GetNamedItem("value").Value = "http://" _ & ProvidedName
Visual C# Consolidado 893
& "/" & SvcName & "/Service1.asmx" FoundIt = True End If End If Next Node If Not FoundIt Then
Throw New InstallException("Config file did not contain a ServerName section") End If ' Writes out
the new config file. XmlDocument.Save(FileInfo.FullName) Finally installlog.WriteLine("Ending edit
of config file") installlog.Close() End Try End Sub
O cdigo acima primeiro cria um arquivo de log de instalao que ir gravar o andamento
de uma ao personalizada. O namespace System.Reflection usado para localizar o
assembly que est sendo instalado e para localizar o arquivo .config associado. O modelo
de documento do XML usado para fazer uma iterao atravs do arquivo .config at a
seo appSettings ser localizada. Quando a chave servername.service for encontrada, seu
valor associado alterado para incluir os parmetros que foram passados, redirecionando o
aplicativo para usar o novo XML Web Services.
5. No Solution Explorer, clique duas vezes no arquivo Web.config para abr-lo.
6. Copie o valor da chave para seu XML Web Services na seo appSettings . A chave
assume a forma servername.service onde servername o servidor onde o XML Web Services
est localizado, e service o nome do XML Web Services.
7. Abra o mdulo de classe Installer no editor de cdigos e substitua o texto
"ServerName.Service" com o valor que voc copiou na etapa anterior.
Adicione um projeto de instalao da Web
Projetos de instalao so usados para criar um instalador para o aplicativo. Baseados na
tecnologia do Windows Installer, projetos de instalao incluem recursos como a capacidade para
executar aes personalizadas durante a instalao e para personalizar a interface do usurio de
instalao. Para obter mais informaes sobre projetos de instalao, consulte Implantando
aplicativos e componentes.
Para adicionar um projeto de instalao da Web
1. Clique com o boto direito do mouse no n soluo em Solution Explorer e clique em
Add, em seguida clique em New Project.
2. Na caixa de dilogo Add New Project, no painel Project Types, expanda o n Other
Project Types, e selecione o n Setup and Deployment Projects.
No painel Templates, selecione Web Setup Project. Na caixa Name, nomeie o projeto
WebAppSetup.
Quando voc clicar em OK, o projeto ser adicionado a soluo e o File System Editor
ser aberto.
3. Na janela Properties, selecione Propriedade ProductName e defina-a para o nome do seu
aplicativo da Web.
4. No File System Editor, marque Web Application Folder.
5. No menu Action, aponte para Add, e clique em Project Output.
6. Na caixa de dilogo Add Project Output Group, selecione InstallerClassLibrary da lista
suspensa Project; em seguida, selecione Primary Output.
Quando voc clicar em OK, a sada principal da InstallerClassLibrary ser adicionada ao
projeto de instalao da Web.
Adicionando uma ao personalizada
Aes personalizadas so usadas para executar cdigo no final de uma instalao para executar
aes que no podem ser tratadas durante a instalao. O cdigo para uma ao personalizada
pode estar contido em um arquivo .dll, .exe, script, ou assembly. Para mais informaes sobre
aes personalizadas, consulte Gerenciamento aes na implantao personalizada.
Visual C# Consolidado 894
Para adicionar a classe installer como uma ao personalizada
1. No Solution Explorer, selecione o projeto WebAppSetup.
2. No menu View, clique em Editor, e depois em Custom Actions.
O Custom Actions Editor abre.
3. No Custom Actions Editor, selecione o n Install.
4. No menu Action, escolha Add Custom Action.
5. Clique duas vezes no Web Application Folder, e selecione Primary output from
InstallerClassLibrary (Active).
6. Na janela Properties, verifique se a propriedade InstallerClass est definida como True.
7. Selecione a propriedade CustomActionData e digite o texto a seguir:
/ServerName=[EDITA1] /ServiceName=[EDITA2]
A propriedade CustomActionData fornece os dois parmetros que so passados para a
ao personalizada, separados por um espao.
Adicionando uma caixa de dilogo
Caixas de dilogo de interface de usurio so exibidas durante a instalao para coletar
informaes do usurio. Para obter mais informaes sobre caixas de dilogo de interface de
usurio, consulte Gerenciamento de interface de usurio na implantao.
Para adicionar uma caixa de dilogo de interface de usurio personalizada
1. No Solution Explorer, selecione o projeto a instalao.
2. No menu View, aponte para Editor, e em seguida, clique em User Interface.
3. No User Interface Editor, selecione o n Start em Install.
4. No menu Action, escolha Add Dialog.
5. Na caixa de dilogo Add Dialog, escolha a caixa de dilogo Textboxes (A) e clique em
OK.
6. No menu Action, escolha Move Up, e repita at o dilogo Textboxes (A) estar localizado
acima do dilogo Installation Address.
7. Na janela Properties, defina as seguintes propriedades:
Propriedade Valor
BannerText Digite o nome do servidor e o nome do servio
Edit1Label Nome do servidor:
Edit1Value LocalHost
Observao
Isso especifica um servidor padro. Voc pode inserir seu prprio nome de
servidor padro aqui.
Visual C# Consolidado 895
Edit2Label Nome do servio:
Edit2Value <nome do servio>
Edit3Visible False
Edit4Visible False
8. Observe que a propriedade Edit1Property est definida como "EDITA1" e a propriedade
Edit2Property est definida como "EDITA2". Isso corresponde aos valores que voc inseriu
na propriedade CustomActionData no Custom Actions Editor. Quando o usurio insere
texto nesses controles de edio durante a instalao, os valores so passados
automaticamente por meio da propriedade CustomActionData.
Criando e implantando o aplicativo
A etapa final criar o projeto de instalao para criar o instalador, e para instalar o aplicativo no
servidor de destino.
Para criar o projeto de instalao
No menu Build, escolha Build Projectname, onde Projectname o nome do seu projeto
de instalao.
Para implantar o aplicativo em um servidor Web no seu computador de desenvolvimento
1. No Solution Explorer, selecione o projeto a instalao.
2. No menu Project, clique em Install.
Para implantar o aplicativo em um servidor Web em outro computador
1. No Windows Explorer, navegue at o diretrio de projeto e localize o instalador criado. O
caminho padro ser \documents and settings\ yourloginname\My Documents\Visual Studio
Projects\setupprojectname\project configuration\productname.msi O project configuration
padro Debug.
2. Copie o arquivo .msi e todos os outros arquivos e subpastas no diretrio para o
computador do servidor Web.
3. No computador do servidor Web, clique duas vezes no arquivo Setup.exe para executar o
instalador.
Protegendo Servios da Web XML Criados Usando ASP.NET
Decidir qual implementao de segurana melhor para um servio da Web comea com olhando
para dois princpios de segurana de chave: Autenticao e autorizao. Autenticao o
processo de validar uma identidade com base nas credenciais, como um nome de usurio e
senha, contra uma autoridade. Quando uma identidade tiver sido autenticado, autorizao
determina se a identidade est autorizado a acessar um recurso.
Servios da Web criados com ASP.NET pode escolher as opes de segurana da autenticao e
autorizao opes oferecidas pelo ASP.NET ou personalizado de segurana baseada em SOAP-
. ASP.NET funciona em conjunto com Internet Information Services (IIS) para fornecer
autenticao e autorizao vrias opes. Tambm possvel para criar opes de autenticao
Visual C# Consolidado 896
personalizado, como o uso de cabealhos SOAP. Alm disso, o ASP.NET oferece a capacidade,
conhecida como representao, para executar uma solicitao usando as credenciais do cliente.
Para obter mais informaes sobre como usar a representao, consulte Representao
ASP.NET.
Este tpico resume as opes disponveis para servios da Web criados com ASP.NET
autenticao e autorizao. Para obter mais informaes sobre opes de segurana disponveis
para aplicativos da Web ASP.NET, consulte Proteger Aplicativos da Web ASP.NET Como Criando
aplicativos ASP.NET seguros: autenticao, autorizao e comunicao seguraSegurana de
aplicativos da Web ASP.NET.
Para obter mais informaes sobre como acessar recursos remotos de aplicativos-baseado em
ASP.NET, consulte os tpicos " modelo Impersonation / Delegation " e confiveis modelo
subsistema " " no captulo 3 de Criando aplicativos ASP.NET Seguros.
Opes de autenticao para servios XML da Web
Servios da Web criados com ASP.NET tem vrias opes para autenticar clientes, portanto, a
pergunta grande: qual um for da direita para um servio da Web especfico? Para escolher a
opo Segurana direita, uma das coisas para escolher entre um desenvolvedor tem o nvel de
segurana e desempenho. Para alguns servios da Web, essencial que credenciais cliente so
enviados atravs da rede usando criptografia, portanto, um algoritmo que criptografa as
credenciais do cliente essencial. Por exemplo, um desenvolvedor gravar um servio da Web que
processa cartes de crdito provavelmente worries mais sobre as credenciais do cliente seja
roubado que a sobrecarga extra de criptografar os dados de carto de crdito.
A tabela a seguir um resumo das opes de autenticao disponveis para servios da Web
criado com o ASP.NET. Opes prefixo com o Windows so uma parte das opes de
autenticao Windows disponveis para servios da Web criados com ASP.NET.
Resumo das opes de autenticao
Opo de
autenticao Descrio
Windows-Basic Use para identificao no seguros de clientes, como o nome de usurio e
senha so enviados em Base seqncias codificado 64-em texto sem
formatao. Senhas e nomes de usurio so codificado, mas no
criptografados, neste tipo de autenticao. Um usurio determinado, mal-
intencionado equipado com uma ferramenta monitoramento de rede-pode
interceptar nomes de usurio e senhas.
Windows-Basic via
SSL
Use para identificao dos clientes em cenrios de Internet seguros. O nome
de usurio e senha so enviados atravs da rede usando criptografia Layer
(SSL) soquetes Segurana, em vez de texto sem formatao. Este
relativamente fcil para configurar e funciona para cenrios de Internet. No
entanto, usando SSL diminui o desempenho.
Windows-Digest Use para identificao dos clientes em cenrios de Internet seguros.
Desmarque usa hash para transmitir credenciais cliente de uma maneira
criptografado para a senha no so transmitidos em texto. Alm disso,
autenticao Digest pode trabalhar atravs de servidores proxy. No entanto,
ele suporte em outras plataformas no amplamente.
Visual C# Consolidado 897
Windows-
Integrada do
Windows
Usa NTLM ou Kerberos. Usa uma troca criptogrfica com navegador da Web
Microsoft Internet Explorer do usurio.
Windows-
certificados de
cliente
Usar para identificao dos clientes na Internet e intranet seguras cenrios.
Requer cada cliente para obter um certificado de um autoridade de
certificao mutuamente confivel. Certificados opcionalmente so mapeados
para contas de usurio, que so usadas pelo IIS para autorizar acesso ao
servio da Web.
Formulrios No suporte para servios da Web. Isso um sistema pelo qual as
solicitaes no autenticadas so redirecionadas para um formulrio HTML
utilizando o redirecionamento do lado do cliente HTTP. A maioria dos clientes
de servios da Web no ser deseja fornecer credenciais usando uma
interface; voc deve resolver isso se voc desejar usar a autenticao de
formulrios.
SOAP cabealhos
personalizados
til para cenrios de Internet seguros e no seguras. Credenciais de usurio
so passados no cabealho SOAP da mensagem SOAP. O servidor Web,
independentemente da plataforma que hospeda o servio da Web, fornece
uma implementao de autenticao personalizado.
Para todas as opes listadas acima, exceto o uso de cabealhos SOAP, as configuraes de
segurana so especificadas usando uma combinao de arquivos de configurao e o IIS. Para
obter mais informaes sobre arquivos de configurao, consulte ASP.NET Configuration. A
opo cabealhos SOAP personalizados detalhado seguinte na seo Autorizao como essa
soluo envolve a autenticao e autorizao.
A autenticao do Windows
O IIS e ASP.NET fornecem suporte para autenticar aplicativos da Web, incluindo servios da Web,
usando segurana criado na para Windows. Windows fornece trs opes para autenticao:
BASIC, Digest e integrada do Windows. Alm disso, cada opo pode ser usada com SSL. Como
todos os Windows autenticao opes exceto Basic criptografar os dados em algum formulrio, o
nvel de criptografia oferecidos pelo SSL adicionais normalmente somente usada em juntamente
com Basic ou certificados de cliente.
Independentemente do que opo autenticao Windows usada, os procedimentos para
configurar o servio da Web e cliente servio Web so semelhantes. Para obter mais informaes,
consulte Como configurar um servio da Web XML para a autenticao do Windows:. Nenhum
cdigo precisa para ser adicionado ao um servio da Web para usar a autenticao do Windows,
como as opes de autenticao so definidas em um arquivo de configurao e do IIS. Cdigo
para passar o cliente credenciais para o servio da Web deve ser adicionado a um cliente de
servios da Web.
Se SSL for escolhido como parte do mecanismo de autenticao usado por um servio da Web,
SSL precisar ser configurado para o aplicativo da Web que hospeda o servio da Web ou para o
servio da Web propriamente dito, usando o IIS. O descrio do servio e, conseqentemente,
proxy classes gerado a partir do descrio do servio refletir que o servio da Web usa SSL (se o
descrio do servio e pgina Ajuda servio so acessados usando SSL). Ser a URL para o
servio da Web dentro do descrio do servio ser prefixados com HTTPS. Para obter mais
informaes sobre como configurar a SSL, consulte a documentao do IIS.
Visual C# Consolidado 898
Autenticao de certificado de cliente
Certificados de cliente ajudam a fornecer um mecanismo seguro para autenticao, como clientes
so necessrios para enviar um documento eletrnico, chamado um certificado de cliente, que
identifica um cliente usando uma conexo SSL para o servidor Web. A conexo SSL criptografa
as credenciais do cliente contido o certificado de cliente como eles so enviados atravs da rede.
Comunicao entre o cliente e o servidor Web criptografada usando uma combinao das
chaves de criptografia enviadas pelo cliente e teclas fornecidos pelo servidor Web. Assim que a
comunicao for estabelecida, somente os computadores cliente e servidor podero se comunicar
uns aos outros usando essa conexo SSL.
Um certificado de cliente pode ser obtido de um autoridade de certificao, que pode ser o
servidor Web prprio ou um intermedirio confivel entre o cliente e servidor. Depois que um
certificado tenha sido obtido, e o servidor Web foi configurado para aceitar certificados de cliente,
um cliente pode enviar o certificado de cliente para o servidor Web atravs de uma conexo SSL,
quando um servio da Web chamado. Para obter mais informaes sobre certificados de cliente,
consulte a documentao do IIS. Para obter mais informaes sobre como configurar autenticao
de Certificado de Cliente para um servio da Web, consulte Como configurar um servio da Web
XML para a autenticao do Windows:.
Opes de autorizao para servios XML da Web
O objetivo de autorizao para determinar se uma identidade deve ser concedido o tipo de
acesso a determinado recurso solicitado. Existem duas maneiras fundamentais para autorizar
acesso a um determinado recurso: arquivo autorizao e a autorizao de URLs. Autorizao
arquivo pode ser usado sempre que a autenticao do Windows for utilizado, como as permisses
so definidas no IIS em uma base por arquivo. A autorizao de URL pode ser usado com
qualquer dos mecanismos autenticao interna Suporte ao ASP.NET Com a autorizao de URLs,
configurao feito atravs de um arquivo de configurao, onde os usurios podem ser
seletivamente concedidas ou acesso negado a quaisquer arquivos associados ao ASP.NET,
inclusive arquivos.asmx.
Para obter mais informaes sobre como configurar autorizao em uma base por arquivos,
consulte a documentao do IIS.
Para obter mais informaes sobre como configurar autorizao usando um arquivo de
configurao, consulte Autorizao ASP.NET.
Autenticao usando cabealhos SOAP personalizados
Os mecanismos de autenticao do Windows, incluindo certificados de cliente, contam com o
transporte HTTP, enquanto SOAP independente de transporte-. Servios da Web criados com
ASP.NET usam SOAP sobre HTTP,, bem como HTTP-POST e implementaes HTTP-GET que
retornam documentos XML SOAP no-. Portanto, um motivo para criar um mecanismo de
autenticao personalizado para decouple a autenticao a partir do transporte. Isso pode ser
feito, passando as credenciais de autenticao no cabealho SOAP.
Cabealhos SOAP so uma tima maneira de passar fora de banda ou informaes no
relacionado semntica de um servio da Web. Diferentemente o Body elemento de um SOAP
mensagem, que inclui a em e sem parmetros para a Web operao de servio que so
processados pelo mtodo Servio da Web, o Header elemento opcional e pode assim ser
processada pelo infra-estrutura. Isto , processados pelo infra-estrutura desenvolvido para
fornecer um mecanismo de autenticao personalizada.
Para obter uma descrio de um mtodo de usando cabealhos SOAP para autenticao,
consulte Como executar autenticao personalizada usando cabealhos SOAP:.
Visual C# Consolidado 899
Um cliente de servios da Web para usar cabealhos SOAP para autenticao, deseja enviar suas
credenciais para o servio da Web, adicionando o cabealho SOAP esperado solicitao SOAP
e preenchendo-lo com as credenciais do cliente. Para usar autenticao cabealho SOAP, um
servio da Web deve seguir duas coisas: especificar que espera o cabealho SOAP que contm
as credenciais de autenticao e autorizar o acesso do cliente para o servio da Web.
Visual C# Consolidado 900
Acesso a Dados (Como fazer em C#)
Os links desta pgina ajudam nas tarefas de acesso a dados amplamente usadas. Para ver outras
categorias de tarefas comuns abordadas na Ajuda, consulte Como fazer em C#.
COMO: Instalar Bancos de Dados de Exemplo
Muitos tpicos do Visual Studio e exemplos de cdigo requerem a capacidade de se conectar a
um banco de dados, como o banco de dados de exemplo Northwind. Se voc estiver executando
o SQL Server e o banco de dados Northwind no estiver disponvel, ento consulte o SQL Books
Online para obter informaes sobre como instal-lo. Se voc no tem uma cpia do SQL Server,
ento voc pode acessar os bancos de dados de exemplo instalando o SQL Server Express
(SSE), ou uma verso Access do Northwind.
Observao
As caixas de dilogo e comandos de menu que voc ver, podem diferir daquelas descritas no Help
dependendo da sua configurao ativa ou edio. Para alterar as configuraes, escolha Import
and Export Settings no menu Tools. Para obter mais informaes, consulte Visual Studio
Settings.
Para instalar o banco de dados de exemplo Northwind do Microsoft Access
1. No Windows, abra o Internet Explorer.
2. Navegue at a seguinte URL:
http://www.microsoft.com/downloads/details.aspx?familyid=c6661372-8dbe-422b-8676-
c632d66c529c&displaylang=en(Access 2000 Tutorial: Northwind Traders Sample Database)
3. Clique no boto Download.
4. Na caixa File Download, escolha Save This File Now e clique em OK.
5. Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
Para instalar os bancos de dados de exemplo Northwind e Pubs para o SQL Server
1. No Windows, abra o Internet Explorer.
2. Navegue at a seguinte URL:
http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46a0-8da2-
eebc53a68034&DisplayLang=en (Northwind and Pubs Sample Databases)
3. Clique no boto Download.
4. Na caixa File Download, escolha Save This File Now e clique em OK.
5. Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
Para instalar os bancos de dados de exemplo Adventure Works para o SQL Server 2000
1. No Windows, abra o Internet Explorer.
2. Navegue at a seguinte URL:
http://www.microsoft.com/downloads/details.aspx?familyid=487C9C23-2356-436E-94A8-
2BFB66F0ABDC&displaylang=en (Adventure Works Cycles Database 2000)
3. Clique no boto Download.
4. Na caixa File Download, escolha Save This File Now e clique em OK.
Visual C# Consolidado 901
5. Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
Para baixar e instalar o SQL Server Express
1. No Windows, abra o Internet Explorer.
2. Navegue at a seguinte URL: http://www.microsoft.com/downloads (Microsoft Download
Center)
3. No campo Keywords, digite SQL Server Express.
4. Clique em Go.
5. Na pgina de resultados, siga o link para a pgina de download do SQL Server Express e
siga as instrues.
Segurana
Sempre verifique se h atualizaes do produto ao instalar um software adicional.
Passo a passo: Criando um aplicativo de dados simples
Uma dos cenrios mais comuns no desenvolvimento de aplicativos exibir dados de um banco de
dados em um Windows Form. Voc pode exibir dados em formulrios em aplicativos Windows,
arrastando itens da Janela de fontes de dados em seu formulrio. Esta explicao passo a passo
demonstra como criar um aplicativo que exiba dados de duas tabelas relacionadas em um banco
de dados.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir das descritas na Ajuda
dependendo de suas configuraes ativas. Para alterar as configuraes, escolha Import and
Export Settings no menu Tools. Para obter mais informaes, consulte Visual Studio Settings.
As tarefas ilustradas nesta explicao passo a passo incluem:
Editar a consulta que carrega os dados para o aplicativo com os assistentes TableAdapter.
Para obter mais informaes, e Como editar TableAdapters:. ver Como: Editar consultas do
TableAdapter,
Adicionar a validao para verificar se os dados corretos esto sendo inseridos, antes de
enviar as alteraes para o banco de dados. Para obter mais informaes, consulte Validando
dados.
Viso geral sobre como conectar-se a dados no Visual Studio
O Visual Studio fornece ferramentas para conectar seu aplicativo a dados de vrias fontes
diferentes, como bancos de dados, servios da Web, e objetos. Se voc estiver usando
ferramentas de design de dados no Visual Studio, voc freqentemente no precisa criar
explicitamente um objeto de conexo para o seu formulrio ou componente. O objeto conexo
normalmente criado como resultado da concluso de um dos assistentes de dados ou do arraste
de objetos de dados em seu formulrio. Para conectar seu aplicativo a dados de um banco de
dados, servio da Web, ou objeto, execute o Assistente para Configurao da Fonte de Dados.,
selecionando Add New Data Source no Janela de fontes de dados
O diagrama a seguir mostra o fluxo padro de operaes ao se conectar a dados atravs da
execuo de uma consulta TableAdapter para buscar dados e exibi-los em um formulrio de um
aplicativo do Windows.
Visual C# Consolidado 904
Em algumas situaes, talvez seja conveniente criar um objeto de conexo sem a assistncia de
qualquer ferramentas de design de dados. Para informaes sobre como criar conexes
programaticamente, consulte Connecting to Data Sources.
Observao
Para obter informaes sobre como conectar aplicativos da Web a dados, consulte Acessando
dados com o ASP.NET.
Criando conexes
Ao usar Visual Studio, conexes so configuradas usando o Add/Modify Connection Dialog Box
(General). A caixa de dilogoAdd Connection aparece quando voc est editando ou criando
conexes dentro de um dos assistentes de dados ou doServer Explorer / Database Explorer ou
quando voc estiver editando propriedades de conexo na janela Properties
Conexes de dados so automaticamente configuradas quando voc executa uma das seguintes
aes:
Ao Descrio
Execuo do Assistente para
Configurao da Fonte de
Dados.
Conexes so configuradas quando o caminho do banco de dados
escolhido no Data Source Configuration Wizard. Para obter
mais informaes, consulte Como: Conectar-se a Dados em um
Banco de Dados.
Visual C# Consolidado 905
Execuo do Assistente de
Configurao para o
TableAdapter.
Conexes so criadas dentro do TableAdapter Configuration
Wizard. Para obter mais informaes, consulte Como: Criar
TableAdapters.
Execuo do Assistente de
configurao da consulta
TableAdapter.
Conexes so criadas dentro do TableAdapter Query
Configuration Wizard. Para obter mais informaes, consulte
Como: Criar Consultas TableAdapter:.
Arraste de itens da Janela de
fontes de dados para um
formulrio ou o Component
Designer
Objetos de conexo so criados quando voc arrasta itens da
janela Data Sources para o Windows Forms Designer ou para o
Component Designer. Para obter mais informaes, consulte
Exibir dados em formulrios em aplicativos do Windows.
Adio de novas conexes
de dados para oServer
Explorer / Database Explorer.
Conexes de dados no Server Explorer/Database Explorer
aparecem na lista de conexes disponveis dentro dos assistentes
de dados. Para obter mais informaes, consulte Como: adicionar
novas conexes de dados no Server Explorer/Database Explorer.
Seqncias de Caracteres de Conexo
Todos os objetos de conexo expoem aproximadamente os mesmos participantes. Entretanto, os
membros especficos disponveis em um determinado objeto OleDbConnection dependem de qual
fonte de dados ele est conectado a; nem todas as fontes de dados suportam todos os membros
da classe OleDbConnection.
A propriedade Primria associada a um objeto de conexo a propriedadeConnectionString. Esta
propriedade consiste em uma seqncia de caracteres com pares de informaes de atributo /
valor necessrios para fazer logon em um servidor de banco de dados e apontam para um banco
de dados especfico. Uma propriedade ConnectionStringtpica pode parecer com o seguinte:
Provider=SQLOLEDB.1;Data Source=MySQLServer;Initial Catalog=NORTHWIND;Integrated
Security=SSPI
Essa seqncia de caracteres de conexo particular especifica que a conexo deve usar a
segurana integrada do Windows. Em vez disso uma seqncia de caracteres de conexo pode
incluir um nome de usurio e senha, mas isso no recomendvel, pois esses atributos depois
sero compilados em seu aplicativo representando portanto uma possvel violao de segurana.
Observao de segurana
O armazenamento de detalhes em seqncias de caracteres de conexo (como uma senha)
podem afetar a segurana do seu aplicativo. Utilizar a segurana integrada do Windows uma
maneira mais segura para controlar o acesso a um banco de dados. Para obter mais informaes,
consulte Securing Connection Strings.
Os pares de atributo / valor mais comuns usados pelo OLE DB tambm so representados
separadamente por uma propriedade individual, como DataSourcee Database. Ao trabalhar com um
objeto de conexo, voc pode definir a propriedade ConnectionString como uma nica seqncia
de caracteres, ou voc pode definir propriedades de conexo individuais. (Se sua fonte de dados
exigir valores seqncia de caracteres de conexo que no so representados por propriedades
individuais, ento voc deve definir a propriedade ConnectionString.)
Visual C# Consolidado 906
Salvando e Recuperando Seqncias de Caracteres de Conexo
Seqncias de caracteres de conexo podem ser armazenados dentro de seu aplicativo
compilado ou no arquivo de configurao do aplicativo. Para obter mais informaes, consulte
Como: salvar uma sequncia de conexo.
Abrindo e Fechando Conexes
Os dois mtodos primrios para conexes so Open e Close. O mtodoOpen usa as informaes
da propriedade ConnectionString para entrar em contato com a fonte de dados e estabelecer uma
conexo aberta. O mtodo Closedesliga a conexo. Fechar conexes essencial, pois a maioria
das fontes de dados oferecem suporte somente um nmero limitado de conexes abertas, e
conexes abertas ocupam valiosos recursos do sistema.
Se voc estiver trabalhando com Adaptadores de Tabela, DataAdapter s, ou DataCommands, no
necessrio abrir e fechar explicitamente uma conexo. Quando voc chamar um mtodo desses
objetos (por exemplo, um mtodo Fill ou Update de um adaptador), o mtodo verifica se a conexo
j est aberta. Caso contrrio, o adaptador abre a conexo, executa sua lgica, e fecha a conexo
novamente.
Mtodos, como Fill apenas abrem e fecham a conexo automaticamente se ela j no estiver
aberta. Se a conexo estiver aberta, os mtodos as usam mas no as fecham. Isso lhe oferece a
flexibilidade de voc mesmo abrir e fechar dados de comandos . Voc pode fazer isso se voc
tiver vrios adaptadores que compartilham uma conexo. Neste caso, ineficiente que cada
adaptador abra e feche a conexo quando voc chamar o mtodoFill . Em vez disso, voc pode
abrir a conexo, chamar o mtodo Fillde cada adaptador, e fechar a conexo quando tiver
terminado.
Pooling em Conexes
Aplicativos freqentemente tm diferentes usurios executando o mesmo tipo de acesso a banco
de dados. Por exemplo, muitos usurios podem estar consultando um mesmo banco de dados
para obter os mesmos dados. Nesses casos, o desempenho do aplicativo pode ser aprimorado
atravs da realizao de compartilhamento, ou pool, de conexes com a fonte de dados. A
sobrecarga refererente ao fato de cada usurio abrir e fechar uma conexo separada pode, caso
contrrio, ter um efeito adverso no desempenho de aplicativos.
Se voc estiver usando uma classe OleDbConnection, OdbcConnection, ou OracleConnection,
pooling de conexes so tratados automaticamente pelo provedor, portanto voc no precisa para
gerenci-las voc mesmo.
Se voc estiver usando a classe SqlConnection , o pooling de conexes gerenciado
implicitamente mas tambm fornece opes que permitem que voc gerencie o pooling voc
mesmo. Para obter mais informaes, consulte Using Connection Pooling.
Transaes
Objetos de conexo suportam transaes com um mtodoBeginTransaction que cria um objeto de
transao (por exemplo, um objeto SqlTransaction). O objeto transao sucessivamente suporta
mtodos que permitem que voc confirme ou reverta as transaes.
Transaes so gerenciados no cdigo. Para obter mais informaes, consulte Performing
Transactions.
O .NET Framework verso 2.0 inclui uma nova estrutura de transao acessvel pelo namespace
System.Transactions. Esta estrutura expe transaes de uma forma totalmente integrada com o
Visual C# Consolidado 907
.NET Framework, incluindo ADO.NET. Para obter mais informaes, consulte Leveraging
System.Transactions.
Informaes e Segurana de Conexes
Uma vez que abrir uma conexo envolve obter acesso a um recurso importante um banco de
dados existem freqentemente questes de segurana envolvendo a configurao e o trabalho
com uma conexo.
Como voc protege o aplicativo e o seu acesso a fonte de dados depende da arquitetura do seu
sistema. Em um aplicativo baseado na Web, por exemplo, os usurios geralmente obtm acessos
annimos ao Servios de Informaes da Internet (IIS) e, portanto, no fornecem credenciais de
segurana. Nesse caso, seu aplicativo mantm a seu prprio informao de logon e a utiliza (em
vez de qualquer informao de usurio especfica) para abrir a conexo e acessar o banco de
dados.
Observao de segurana
Armazenando detalhes de seqncias de caracteres de conexo (como uma senha) podem afetar
a segurana do seu aplicativo. Usando segurana integrada do Windows uma maneira mais
segura para controlar o acesso a um banco de dados. Para obter mais informaes, consulte
Securing Connection Strings.
Na intranet ou em aplicativos de vrias camadas, voc pode se aproveitar da opo de segurana
integrada fornecida pelo Windows, pelo IIS, e pelo SQL Server. Neste modelo, credenciais de
autenticao de um usurio para a rede local tambm so usadas para acessar recursos de
banco de dados, e no so usados explicitamente nomes de usurio ou senhas na seqncia de
caracteres de conexo. (Normalmente, as permisses so estabelecidas no computador servidor
do banco de dados por meio de grupos, para que voc no precise estabelecer permisses
individuais para cada usurio que pode acessar o banco de dados.) Neste modelo, voc no
precisar armazenar, de modo algum, informaes de logon para a conexo, e no h etapas
adicionais necessrias para proteger as informaes da seqncia de caracteres de conexo.
Para obter mais informaes sobre segurana, consulte as seguintes pginas:
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o Projeto
Para criar o novo projeto
1. No menu File, crie um novo projeto.
2. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto criado e adicionado ao Solution Explorer.
Conectando-se ao Banco de Dados Northwind
Voc pode se conectar verso SQL Server do banco de dados Northwind ou verso Microsot
Access do banco de dados. Cada processo est descrito em seguida nos dois procedimentos a
seguir.
Para criar uma conexo para a verso SQL Server do Northwind
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source.
Visual C# Consolidado 909
3. Clique em Next na pgina bem-vindo Data Source Configuration Wizard.
4. Selecione Database na pgina Choose a Data Source Type.
5. Na pgina Choose your Data Connection, siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind estiver
disponvel na lista suspensa, selecione-a.
-ou-
o
Selecione New Connection para configurar uma nova conexo de dados. Para
obter mais informaes, consulte Como: Criar Conexes com Bancos de Dados do Access,
ou Como: Criar conexes com bancos de dados SQL Server.
6. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (include sensitive data), e clique em Next.
7. Clique em Next na pgina Save connection string to the Application Configuration file.
8. Expanda o n Tables na pgina Choose your Database Objects.
9. Selecione as tabelas Customers e Orders, e clique em Finish.
O NorthwindDataSet adicionado ao seu projeto e as tabelas Customers e Orders
aparecem na janela Data Sources.
Para criar uma conexo para a verso Access do Northwind
1. Na caixa de dilogo Choose Data Source, selecione Microsoft Access Database File, e
clique em OK.
Se a caixa de dilogo Add Connection abrir, e o Data source no for Microsoft Access
Database File, clique em Change para abrir a caixa de dilogo Choose/Change Data
Source. Para obter mais informaes, consulte Choose/Change Data Source Dialog Box.
2. Digite o caminho para o arquivo de banco de dados Northwind.mdb, ou clique no boto
Browse para localizar o arquivo de banco de dados Northwind.mdb. Para obter mais
informaes, consulte Add/Modify Connection (Microsoft Access).
3. Clique em OK.
4. Clique em Next na pgina Save connection string to the Application Configuration file.
5. Expanda o n Tables na pgina Choose your Database Objects.
6. Selecione as tabelas Customers e Orders, e clique em Finish.
7. O NorthwindDataSet adicionado ao seu projeto e as tabelas Customers e Orders
aparecem na janela Data Sources.
Adicionando Controles ao Formulrio
Voc pode criar controles ligados a dados, arrastando itens da janela Data Sources para seu
formulrio.
Para criar controles ligados a dados no formulrio
Pressione F5.
Form1 aberto, mostrando os dados da tabela Customers.
Segurana
Armazenar detalhes da seqncia de conexo (como uma senha) podem afetar a segurana do
seu aplicativo. Usar a Autenticao do Windows uma maneira mais segura de controlar o
acesso a um banco de dados. Para obter mais informaes, consulte Securing Connection
Strings.
Prximas etapas
O DataSet que voc acabou de criar agora est disponvel na janela Data Sources.
Para adicionar funcionalidade a seu aplicativo
Selecione outros itens na janela Data Sources e arraste-os para um formulrio. Para obter
mais informaes, consulte Viso Geral da Exibio dados.
Abra a fonte de dados noDataset Designer para adicionar ou editar os objetos que
formam o dataset.
Selecione itens na janela Data Sources e arraste-os para um formulrio. Para obter mais
informaes, consulte Viso Geral da Exibio dados.
Passo a passo: Conectando-se a dados em um banco de dados do Access
A conexo de seu aplicativo do Visual Studio a dados em um banco de dados do Access
simplificada com o Assistente para Configurao da Fonte de Dados. Depois que voc concluir o
assistente, dados ficam disponveis no Janela de fontes de dados para arrastar para seus
formulrios. Para obter mais informaes, consulte Viso Geral de Dados Local. Ao conectar-se a
dados em arquivos de dados locais importante compreender como o sistema do projeto no
Visual Studio gerencia esses arquivos. Para obter mais informaes, consulte How to: Manage
Local Data Files in Your Project.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir dos descritos na Ajuda
(Help), dependendo de suas configuraes ativas ou edio. Para alterar as configuraes,
Visual C# Consolidado 912
escolha Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Visual Studio Settings.
As tarefas ilustradas nesta explicao passo-a-passo incluem:
Selecione itens na janela Data Sources e arraste-os para seu formulrio. Para obter mais
informaes, consulte Viso Geral da Exibio dados.
Abra a fonte de dados no Dataset Designer para adicionar ou editar os objetos que formam
o dataset.
Criar e configurar uma fonte de dados em seu aplicativo, criando um dataset com o
Dataset Designer.
O dataset que voc acabou de criar agora est disponvel na janela Data Sources. Voc
pode selecionar itens na janela Data Sources e arrast-los para um formulrio. Para obter
mais informaes, consulte Viso Geral da Exibio dados.
Adicione mais consultas aos TableAdapters. Para obter mais informaes, consulte Como:
Criar Consultas TableAdapter:.
Clique com o boto direito do mouse na coluna SongID, e clique Set Primary Key.
Um cone de chave aparece prxima coluna SongID.
Salvando seu projeto
Para salvar o projeto DataTableWalkthrough
Criando e configurando uma fonte de dados em seu aplicativo, criando um DataSet com o
Data Source Configuration Wizard.
Pressione F5.
Adicione um controle TextBox e um controle Button e passar o valor na caixa de texto para
a consulta. (CustomersTableAdapter.FillByCity(NorthwindDataSet.Customers, TextBox1.Text)).
Como criar e executar uma instruo SQL que retorna um nico valor:
Como: criar e executar uma instruo SQL que no retorna nenhum valor
Executar comandos Select (selecionar) que retornam um resultado que voc pode ler
diretamente, em vez de carreg-lo no DataSet. Para ler os resultados, use uma leitora de
dados (objeto OleDbDataReader, SqlDataReader, OdbcDataReader ou OracleDataReader),
que funciona como um cursor somente para leitura, somente encaminhamento ao qual voc
pode vincular controles.. Esta uma estratgia til para reduzindo uso de memria e carregar
dados somente para leitura muito rapidamente.
Executar comandos de definio de banco de dados (DDL) para criar, editar e remover
tabelas, procedimentos armazenados e outras estruturas de banco de dados. (Voc deve ter
permisses para executar essas aes, claro.)
Executar comandos SQL dinmicos para atualizar, inserir ou excluir registros em vez de
atualizar tabelas DataSet e depois copiar alteraes para o banco de dados.
Executar comandos que retornam um valor escalar (isto , um valor nico), como os
resultados de uma funo agregada (SUM, COUNT, AVG, e assim por diante).
Executar comandos que retornam dados de um banco de dados do SQL Server (verso
7.0 ou posterior) no formato XML. Um uso tpico executar uma consulta e obter novamente
dados em formato XML, aplicar um transformao XSLT a ele (para converter os dados em
HTML), e enviar os resultados para um navegador.
Propriedades de comando contm todas as informaes necessrias para executar um comando
em um banco de dados. Isso inclui:
Uma conexo O comando referencia uma conexo que ele usa para se comunicar com
o banco de dados.
O nome ou texto de um comando O comando inclui o texto real de uma intruo SQL
ou o nome de um procedimento armazenado para executar.
Parmetros Um comando pode exigir que voc passe valores de parmetro junto com
ele (parmetros de entrada). O comando tambm pode retornar valores sob a forma de um
valor de retorno ou valores de parmetro de sada. Cada comando tem um conjunto de
parmetros que voc pode definir ou ler individualmente para passar ou receber valores. Para
obter mais informaes, consulte Como: Definir e Obter Parmetros para Objetos de
Comando.
Voc executa um comando usando um mtodo apropriado para os resultados que voc espera
que sejam retornados. Por exemplo, se voc espera linhas, voc chama o comando do mtodo
ExecuteReader, que retorna registros em uma leitora de dados. Se voc estiver executando um
comando UPDATE, INSERT, ou Delete, voc chama o mtodo do comando ExecuteNonQuery, que
retorna um valor indicando o nmero de linhas afetadas. Se voc estiver executando uma funo
agregada, como retornar a contagem de pedidos para um cliente, voc chamar o mtodo
ExecuteScalar.
Visual C# Consolidado 930
Vrios conjuntos de resultados
Um uso tpico de um objeto de comando retornar uma nica tabela de dados (um conjunto de
linhas). Entretanto, comandos podem executar procedimentos que retornem vrios conjuntos de
resultados. Isso pode acontecer de maneiras diferentes. Um maneira que o comando referencie
um procedimento armazenado que retorne vrios conjuntos de resultados. Como alternativa, o
comando pode conter duas (ou mais) instrues ou nomes de procedimentos armazenados.
Nesse caso, as instrues ou procedimentos so executados seqencialmente e retornam vrios
conjuntos de resultados com uma nica chamada.
Se voc especificar vrias instrues ou procedimentos para um comando, elas devem todas ser
do mesmo tipo. Por exemplo, voc pode executar sucessivas instrues SQL ou sucessivos
procedimentos armazenados. Entretanto, voc no pode misturar chamadas de procedimentos
armazenados e instrues SQL no mesmo comando. Para obter mais informaes, consulte
Retrieving Data Using a DataReader.
Observao
Para Oracle, o .NET Framework Data Provider for Oracle no oferece suporte a instrues
agrupadas SQL. Entretanto, ele no permite que voc use vrios parmetros de sada REF
CURSOR para preencher um DataSet, cada em sua prpria tabela de dados. Voc deve definir os
parmetros, marc-los como parmetros de sada, e indicar que eles so tipos de dados REF
CURSOR. Observe que voc poder usar o mtodo Update quando o objeto OracleDataAdapter
est preenchido dos parmetros REF CURSOR em um procedimento armazenado, pois Oracle
no fornece as informaes necessrias para determinar quais os nomes da tabela e nomes de
coluna quando a instruo SQL executada.
Segurana
Quando usando comandos de dados com uma propriedade CommandType definida como Text,
cuidadosamente verifique informaes que so enviadas de um cliente antes passando-a para
seu banco de dados. Usurios mal-intencionados podem tentar enviar (inserir) instrues SQL
modificadas ou adicionais em um esforo para obter acesso no autorizado ou danificar o banco
de dados. Antes de voc transferir a entrada do usurio a um banco de dados, sempre dever
verificar se as informaes so vlidas. Uma prtica recomendada consiste em sempre usar
consultas parametrizadas ou procedimentos armazenados quando possvel. Para obter mais
informaes, consulte Validating User Input.
Passo a passo: Preenchendo um DataSet com dados
Este explicao passo a passo cria um DataSet com uma tabela de dados e a preenche com
dados da tabela Customers no banco de dados de exemplo Northwind. O DataSet preenchido
com dados chamando o mtodo Fill de um TableAdapter.
Durante este explicao passo a passo, voc aprender como:
Criar um DataGridView ligado a dados arrastando a partir da janela Data Sources para um
formulrio.
Pr-requisitos
A fim de concluir este explicao passo a passo, ser necessrio:
Visual C# Consolidado 931
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
A primeira etapa criar um Windows Application.
Para criar o novo projeto do Windows
1. No Visual Studio, a partir do menu File, criar um novo Project.
2. Nomeie o projeto como DatasetWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto DatasetWalkthrough criado e adicionado ao Solution Explorer.
Criando o NorthwindDataSet
Esta etapa cria um dataset usando o Data Source Configuration Wizard baseado na tabela
Customers no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco de dados de
exemplo Northwind para criar a conexo. Para informaes sobre como configurar o banco de
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
Para criar o dataset
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, clique em Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type, e em seguida clique em
Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista suspensa, selecione-a.
-ou-
o
Selecione New Connection para iniciar a caixa de dilogo Add/Modify
Connection. Para obter mais informaes, consulte Add/Modify Connection Dialog Box
(General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (sensitive data), e clique em Next.
6. Clique em Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a tabela Customers, e clique em Finish.
O NorthwindDataSet adicionado ao seu projeto e a tabela Customers aparece na janela
Data Sources.
Adicionando Controles ao Formulrio
Voc pode criar controles com dados vinculados, arrastando itens da janela Data Sources para
um formulrio no seu aplicativo do Windows.
Para criar um DataGridView acoplado tabela Customers
Visual C# Consolidado 932
Adicionar funcionalidade para enviar atualizaes de volta para o banco de dados. Para
obter mais informaes, consulte Passo-a-Passo: Salvando Dados para um Banco de Dados
(Tabela Simples).
Edite os dados no DataSet e grave-os de volta como XML. Para obter mais informaes,
consulte WriteXml.
BindingSource Component
Selecionando o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criando um controle vinculado a dados, arrastando itens da janela Data Sources para seu
formulrio.
Pr-requisitos
Para concluir esta explicao passo a passo, voc precisa:
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o aplicativo Windows
A primeira etapa para criar um projeto Windows Application.
Para criar o novo projeto do Windows Application
1. No menu File, crie um novo projeto.
2. Nomeie o projeto DisplayingDataonaWindowsForm.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto DisplayingDataonaWindowsForm criado e adicionado Solution Explorer.
Criando a fonte de dados
Essa etapa cria uma fonte de dados usando o Data Source Configuration Wizard baseado na
tabela Customers no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco de
Visual C# Consolidado 940
dados de exemplo Northwind para criar a conexo. Para informaes sobre como configurar
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type, e clique Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista drop-down, selecione-a.
-ou-
o
Selecione New Connection para iniciar a caixa de dilogo Add/Modify
Connection. Para obter mais informaes, consulte Add/Modify Connection Dialog Box
(General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6. Clique Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a tabela Customers, e clique Finish.
O NorthwindDataSet adicionado ao seu projeto e a tabela Customers aparece na janela
Data Sources.
Definindo os controles a serem criados
Para este explicao passo a passo os dados estaro em um layout Details onde dados so
exibidos em controles individuais. (A abordagem alternativa o layout padro Grid onde os dados
so exibidos em um controle DataGridView.)
Para definir o tipo subjacente para os itens na janela Data Sources
1. Expanda o n Customers na janela Data Sources.
2. Altere o tipo subjacente da tabela Customers para Details selecionando Details na lista
drop-down no n Customers. Para obter mais informaes, consulte Como: Definir o
controle a ser criado quando arrastado da janela Data Sources:.
3. Altere o tipo suspenso da coluna CustomerID para um rtulo selecionando Label na lista
de controles no n CustomerID.
Criando o formulrio
Crie os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
Para criar controles vinculado a dados no formulrio
Pressione F5.
Adicionar funcionalidade para enviar atualizaes de volta para o banco de dados. Para
obter mais informaes, consulte Passo-a-Passo: Salvando Dados para um Banco de Dados
(Tabela Simples).
Definio do tipo subjacente dos itens na Janela de fontes de dados. Para obter mais
informaes, consulte Como: Definir o controle a ser criado quando arrastado da janela Data
Sources:.
Criao de controles que exibem dados, arrastando itens a partir da janela Data Sources
em um formulrio.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o aplicativo Windows
A primeira etapa criar um Windows Application. Atribuir um nome para o projeto opcional
nesta etapa mas ns lhe daremos um nome porque planejamos salv-lo posteriormente.
Para criar o novo projeto do Aplicativo do Windows
1. No menu File, crie um novo projeto.
2. Nomeie o projeto como WindowsSearchForm.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto WindowsSearchForm projeto criado e adicionado ao Solution Explorer.
Criando a Fonte de Dados
Essa etapa cria uma fonte de dados a partir de um banco de dados usando o Data Source
Configuration Wizard. Voc deve ter acesso ao banco de dados de exemplo Northwind para criar
a conexo. Para informaes sobre como configurar o banco de dados de exemplo Northwind,
consulte COMO: Instalar Bancos de Dados de Exemplo.
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type, e em seguida clique Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista suspensa, selecione-a.
-ou-
o
Selecione New Connection para iniciar a caixa de dilogo Add/Modify
Connection. Para obter mais informaes, consulte Add/Modify Connection Dialog Box
(General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e em seguida clique Next.
6. Clique Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a Tablea Customers, e clique Finish.
O NorthwindDataSet adicionado ao seu projeto e a tabela Customers aparece na janela
Data Sources.
Criando o formulrio
Voc pode criar os controles vinculados a dados arrastando itens da janela Data Sources para
seu formulrio.
Para criar controles vinculado a dados no formulrio
Visual C# Consolidado 946
1. Expanda o n Customers na janela Data Sources.
2. Arraste o n Customers da janela Data Sources para seu formulrio.
Um DataGridView e uma faixa ferramenta (BindingNavigator) para navegar pelos registros
aparecem no formulrio. Um NorthwindDataSet, CustomersTableAdapter, BindingSource, e
BindingNavigator aparecem na bandeja do componente.
Adicionando Parametrizao (funcionalidade de pesquisa) Consulta
Voc pode adicionar uma clusula WHERE consulta original usando o Caixa de Dilogo
Construtora de Critrios de Pesquisa.
Para criar uma consulta parametrizada e controles para inserir os parmetros
1. Selecione o controle DataGridView, e escolha Add Query no menu Data.
2. Digite FillByCity na rea New query name no Caixa de Dilogo Construtora de Critrios
de Pesquisa.
3. Adicione WHERE City = @City consulta na rea Query Text.
A consulta deve ser semelhante seguinte:
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region,
PostalCode, Country, Phone, Fax
FROM Customers
WHERE City = @City
Observao
Fontes de dados OleDb e Access usam o ponto de interrogao '?' para denotar parmetros,
portanto a clusula WHERE teria esta aparncia: WHERE City = ?
4. Clique OK para fechar a caixa de dilogo Search Criteria Builder.
Uma FillByCityToolStrip adicionado ao formulrio.
Testando o aplicativo
Executar o aplicativo abre o formulrio pronto para receber o parmetro como entrada.
Para testar o aplicativo
1. Pressione F5 para executar o aplicativo.
2. Digite London na caixa de texto City e clique FillByCity.
A grade de dados preenchida com clientes que atendem aos critrios de parametrizao.
Neste exemplo, a grade de dados exibe clientes que tm um valor London na sua coluna
City.
Prximas etapas
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
aps criar um formulrio parametrizado. Alguns aprimoramentos que voc pode fazer nesta
explicao passo a passo incluem:
Adio de controles que exibem dados relacionados. Para obter mais informaes,
consulte Como: exibir dados relacionados em um aplicativo Windows:.
Visual C# Consolidado 947
Edio do dataset para adicionar ou remover objetos de banco de dados. Para obter mais
informaes, consulte Como editar um DataSet:.
Consulte tambm
Passo a passo: Criando uma tabela de pesquisa
Uma tabela de pesquisa (lookup table) usada para exibir informaes de uma tabela de acordo
com o valor de um campo de chave externo de outra tabela. Por exemplo, considere uma tabela
de pedidos em um banco de dados de vendas. Cada registro na tabela Pedidos inclui um
CdigoDoCliente indicando qual cliente colocou a ordem. O CdigoDoCliente uma chave
externa apontando para um registro de cliente na tabela Clientes. Convm exibir o nome real dos
clientes, em vez do CdigoDoCliente, quando apresentar uma lista de pedidos (da tabela
Pedidos). Como o nome do cliente est na tabela Clientes, e voc est apresentando dados da
tabela Pedidos, voc precisa criar uma tabela de pesquisa, que recebe o valor CdigoDoCliente
da tabela Pedidos, e usa esse valor para navegar pelo relacionamento e retornar um valor mais
palpvel, o nome do cliente. Esse conceito conhecido como uma tabela de pesquisa.
As tarefas ilustradas nesta explicao passo a passo incluem:
Selecionar o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criando controles com dados vinculados, arrastando itens da janela Data Sources em um
formulrio.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um novo aplicativo Windows
Para criar o novo projeto de Windows Application
1. No menu File, crie um novo projeto.
2. Nomeie o projeto LookupTableWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto LookupTableWalkthrough criado e adicionado Solution Explorer.
Criando uma nova fonte de dados
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
Visual C# Consolidado 948
3. Selecione Database na pgina Choose a Data Source Type, e clique Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista drop-down, selecione-o.
- ou -
o
Selecione New Connection para iniciar a caixa Add/Modify Connection. Para
obter mais informaes, consulte Add/Modify Connection Dialog Box (General).
5. Se o seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6. Clique Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione as tabelas Customers e Orders, e clique Finish.
O NorthwindDataSet adicionado ao seu projeto e as duas tabelas aparecem na janela
Data Sources .
Criando controles vinculados a dados no formulrio
Para criar controles vinculados a dados no formulrio
1. Expanda o n Customers na janela Data Sources.
2. Altere o drop type da tabela Orders relacionada para Details selecionando Details na lista
de controles no n Orders. Para obter mais informaes, consulte Como: Definir o controle
a ser criado quando arrastado da janela Data Sources:.
3. Expanda o n Orders relacionado e altere o drop type da coluna CustomerID para a uma
combo box selecionando ComboBox na lista de controles no n CustomerID.
4. Arraste o n Orders relacionado da janela Data Sources para o Form1.
Controles vinculados a dados com suas descries aparecem no formulrio, junto com um
tool strip (BindingNavigator) para navegar pelos registros. Um NorthwindDataSet,
CustomersTableAdapter, BindingSource, e BindingNavigator aparecem na caixa de
componentes.
Criando a tabela de pesquisa
Voc estabelece a tabela de pesquisa, definindo propriedades na combo box CustomerID:
Para criar a funcionalidade de tabela de pesquisa no formulrio
Arraste o n principal Customers da janela Data Sources diretamente para a combo box
CustomerID no Form1.
Observao
A tabela a seguir somente para referncia; as propriedades so definidas automaticamente
durante o arraste do procedimento acima. O designer define as propriedades a seguir conforme
descrito abaixo em " Explicao das configuraes ". Dependendo das estruturas da sua tabela,
voc talvez precise ajustar as propriedades para a sua tabela de pesquisa funcionar corretamente.
Propriedade Explicao sobre configurao
DataSource O Visual Studio define essa propriedade como o BindingSource criado para
a tabela que voc arrastou para o controle (em vez do BindingSource criado
quando o controle foi criado).
Visual C# Consolidado 949
Se voc precisar fazer um ajuste, ento defina essa propriedade como o
BindingSource da tabela com a coluna que voc quer mostrar.
(CustomersBindingSource para este passo a passo.)
DisplayMember O Visual Studio define essa propriedade como a primeira coluna aps a chave
primria que tem um tipo de dados string para a tabela que voc arrastar para
o controle.
Se voc precisar fazer um ajuste, defina essa propriedade como o nome da
coluna que voc deseja exibir.
ValueMember O Visual Studio define esta propriedade como a primeira coluna participante
da chave primria, ou a primeira coluna na tabela se nenhuma chave estiver
definida.
Se voc precisar fazer um ajuste, defina essa propriedade como a chave
primria na tabela com a coluna que voc deseja exibir.
SelectedValue O Visual Studio define essa propriedade como a coluna original arrastada da
janela Data Sources.
Se voc precisar fazer um ajuste, defina essa propriedade como a coluna de
chave externa na tabela relacionada. (CustomerID na tabela Orders para esse
passo a passo.)
Executando o aplicativo
Para executar o aplicativo
1. Pressione F5.
2. Navegue pelos pedidos e certifique-se de que a combo box CustomerID exibe o
CompanyName da tabela Customers para cada pedido (em vez da coluna CustomerID da
tabela Orders).
Prximas etapas
Dependendo dos requisitos do seu aplicativo, h vrias etapas que voc pode querer executar
aps criar um formulrio vinculado a dados. Alguns aprimoramentos que voc pode fazer nesse
passo a passo incluem:
Adicionar funcionalidade para enviar atualizaes de volta para o banco de dados. Para
obter mais informaes, consulte Passo-a-Passo: Salvando Dados para um Banco de Dados
(Tabela Simples).
Adicionar a tabela Orders para o dataset selecionando Configure DataSet with Wizard de
dentro da janela Data Sources. Em seguida, voc pode adicionar controles que exibem dados
relacionados arrastando o n Orders relacionado (aquele abaixo da coluna Fax dentro da
tabela Customers) para o formulrio. Para obter mais informaes, consulte Como: exibir
dados relacionados em um aplicativo Windows:.
Passo a passo: Criando um Controle de Usurio que Suporta Ligao de Dados Simples
Ao exibir dados em formulrios em aplicativos Windows, voc pode escolher controles existentes
da Toolbox ou voc pode criar controles personalizados se seu aplicativo requer funcionalidade
que no est disponvel nos controles padro. Este explicao passo a passo mostra como criar
um controle que implementa o DefaultBindingPropertyAttribute. Controles que implementam o
DefaultBindingPropertyAttribute podem conter uma propriedade que pode ser vinculada a
dados. Esses controles so semelhantes aos de um TextBox ou CheckBox
Visual C# Consolidado 950
Para obter mais informaes sobre criao de controle, consulte Developing Windows Forms
Controls at Design Time.
Ao criar controles para uso em cenrios de vinculao de dados, voc precisa implementar um
dos seguintes atributos de vinculao de dados:
Uso atributo DataBinding
Implementar o DefaultBindingPropertyAttribute em controles simples, como a TextBox, que
exibe uma nica coluna (ou propriedade) de dados. (Esse processo descrito nesta pgina de
explicao passo a passo.)
Implementar o ComplexBindingPropertiesAttribute nos controles, como o DataGridView, que exibe
listas (ou tabelas) de dados Para obter mais informaes, consulte Passo a passo: Criando um
Controle de Usurio que Suporta Ligao de Dados Complexa.
Implementar o LookupBindingPropertiesAttribute nos controles, como a ComboBox, que exibe
listas (ou tabelas) de dados, mas tambm precisa apresentar uma nica coluna ou propriedade.
Para obter mais informaes, consulte Passo a passo: Criando um Controle de Usurio que
Suporta Pesquisa de Ligao de Dados.
Esta explicao passo a passo cria um controle simples que exibe dados de uma nica coluna em
uma tabela. Este exemplo usa a coluna Phone da tabela Customers do banco de dados de exemplo
Northwind. O controle de usurio simples ir exibir nmeros de telefone do cliente em um padro
de formato nmero telefnico usando uma MaskedTextBox e configurando a mscara para um
nmero de telefone
Durante esta explicao passo a passo, voc aprender como:
Definir a coluna Phone na janela Data Sources para usar o novo controle.
Acessar o banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo do Windows
A primeira etapa para criar um Windows Application.
Para criar o novo projeto Windows
1. No Visual Studio, a partir do menu File, criar um novo Project.
2. Nome do projeto SimpleControlWalkthrough.
Visual C# Consolidado 951
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto SimpleControlWalkthrough criado e adicionado ao Solution Explorer.
Adicionar um Controle de Usurio ao Projeto
Esta explicao passo a passo cria um simples controle de dados-ligveis de um User Control
para adicionar um item User Control ao projeto SimpleControlWalkthrough.
Para adicionar um controle de usurio ao projeto
1. No menu Project, escolha Add User Control.
2. Digite PhoneNumberBox na rea Nome e clique em Add.
O controle PhoneNumberBox adicionado ao Solution Explorer e abre no designer.
Criando o Controle PhoneNumberBox
Esta explicao passo a passo expande na existncia de MaskedTextBox para criar o controle
PhoneNumberBox.
Para criar o controle PhoneNumberBox
1. Arraste um MaskedTextBox do Toolbox na superfcie do design do controle de usurio.
2. Selecione a marca inteligente no MaskedTextBox apenas arrastando e escolha Set Mask.
3. Selecione Phone number na caixa de dilogo Input Mask e clique em OK para definir a
mscara.
Adicionando o Atributo de Vinculao de Dados Requerido
Para simples controles que suportam DataBinding, implemente o
DefaultBindingPropertyAttribute.
Para implementar o atributo DefaultBindingProperty
1. Alterne o controle PhoneNumberBox para modo de exibio do cdigo. (No menu View,
escolha Code.)
2. Substitua o cdigo no PhoneNumberBox com o seguinte:
C#
using System.Windows.Forms; namespace CS {
[System.ComponentModel.DefaultBindingProperty("PhoneNumber")] public partial class
PhoneNumberBox : UserControl { public string PhoneNumber { get{ return maskedTextBox1.Text; }
set{ maskedTextBox1.Text = value; } } public PhoneNumberBox() { InitializeComponent(); } } }
J#
package JSL; /**@attribute System.ComponentModel.DefaultBindingProperty("Text") */ public class
PhoneNumberBox extends System.Windows.Forms.UserControl { /**@property */ public String
get_Text() { return maskedTextBox1.get_Text(); } /**@property */ public void set_Text(String value)
{ this.maskedTextBox1.set_Text(value); } public PhoneNumberBox() { InitializeComponent(); }
private System.Windows.Forms.MaskedTextBox maskedTextBox1; private
System.ComponentModel.IContainer components; #region Component Designer generated code
Visual C# Consolidado 952
protected void Dispose(boolean disposing) { if (disposing) { if (components != null) {
components.Dispose(); } } super.Dispose(disposing); } private void InitializeComponent() {
this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox(); this.SuspendLayout(); // //
maskedTextBox1 //
this.maskedTextBox1.set_CutCopyMaskFormat(System.Windows.Forms.MaskFormat.IncludeLiteral
s); this.maskedTextBox1.set_HidePromptOnLeave(false); this.maskedTextBox1.set_Location(new
System.Drawing.Point(26, 25)); this.maskedTextBox1.set_Mask("(999) 000-0000");
this.maskedTextBox1.set_Name("maskedTextBox1"); this.maskedTextBox1.set_Size(new
System.Drawing.Size(100, 20)); this.maskedTextBox1.set_TabIndex(0);
this.maskedTextBox1.set_TextMaskFormat(System.Windows.Forms.MaskFormat.IncludeLiterals);
// // PhoneNumberBox // this.set_AutoScaleDimensions(new System.Drawing.SizeF(6F, 13F));
this.set_AutoScaleMode(System.Windows.Forms.AutoScaleMode.Font);
this.get_Controls().Add(this.maskedTextBox1); this.set_Name("PhoneNumberBox");
this.ResumeLayout(false); this.PerformLayout(); } #endregion }
3. No menu Build, escolha Build Solution.
Criando Uma Fonte de Dados do Seu Banco de Dados
Esta etapa usa o Data Source Configuration Wizard para criar uma fonte de dados com base na
tabela Customers, no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco de
dados de exemplo Northwind para criar a conexo. Para informaes sobre como configurar
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type e clique Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista drop-down, selecione-o.
Ou
o
Selecione New Connection para iniciar a caixa de dilogo Add/Modify
Connection. Para obter mais informaes, consulte Add/Modify Connection Dialog Box
(General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais e clique Next.
6. Clique Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a tabela Customers e clique Finish.
O NorthwindDataSet adicionado ao seu projeto e a tabela Customers aparece na janela
Data Sources.
Definindo a Coluna de Telefone Para usar o Controle PhoneNumberBox
Dentro da janela Data Sources voc pode definir o controle a ser criado antes de arrastar itens
para seu formulrio.
Visual C# Consolidado 953
Para definir a coluna telefone para vincular ao controle PhoneNumberBox
1. Abra Form1 no designer.
2. Expanda o n Customers na janela Data Sources.
3. Clique na seta suspensa no n Customers e escolha Details a partir da lista controle.
4. Clique na seta suspensa na coluna Phone e escolha Customize.
5. Selecione o PhoneNumberBox da lista de Associated Controls na caixa de dilogo Data
UI Customization Options.
6. Clique na seta suspensa na coluna Phone e escolha PhoneNumberBox.
Adicionando Controles ao Formulrio
Voc pode criar os controles com dados vinculados, arrastando itens da janela Data Sources
para o formulrio.
Para criar controles vinculados a dados no formulrio
Criar controles que suportam o mais complexo cenrios de vinculao de dados. Para
obter mais informaes, consulte Passo a passo: Criando um Controle de Usurio que Suporta
Ligao de Dados Complexa e Passo a passo: Criando um Controle de Usurio que Suporta
Pesquisa de Ligao de Dados.
Consulte tambm
Passo a passo: Criando um Controle de Usurio que Suporta Ligao de Dados Complexa
Ao exibir dados em formulrios em aplicativos Windows, voc pode escolher os controles
existentes do Toolbox, ou voc pode criar controles personalizados se seu aplicativo requer
funcionalidade que no esto disponveis nos controles padro. Esta explicao passo a passo
mostra como criar um controle que implementa o ComplexBindingPropertiesAttribute. Os controles
que so implementados do ComplexBindingPropertiesAttribute contm o DataSource e que a
Visual C# Consolidado 954
propriedade DataMember pode ser vinculada aos dados. Esses controles so semelhantes aos um
DataGridView ou ListBox.
Para obter mais informaes sobre controle de criao, consulte Developing Windows Forms
Controls at Design Time.
Ao criar controles para uso em cenrios de ligao de dados ser preciso implementar um dos
seguintes atributos de vinculao de dados:
Uso do atributo DataBinding
Implementar os simples controles DefaultBindingPropertyAttribute, como TextBox, que exibir uma
nica coluna (ou propriedade) de dados. Para obter mais informaes, consulte Passo a passo:
Criando um Controle de Usurio que Suporta Ligao de Dados Simples.
Implementar os controle ComplexBindingPropertiesAttribute, como DataGridView, que exibem
listas (ou tabelas) de dados. (Esse processo descrito nesta pgina de explicao passo a
passo.)
Implementar os controles LookupBindingPropertiesAttribute, como ComboBox, que exibir listas (ou
tabelas) de dados, mas tambm precisa apresentar uma nica coluna ou propriedade. Para obter
mais informaes, consulte Passo a passo: Criando um Controle de Usurio que Suporta
Pesquisa de Ligao de Dados.
Esta explicao passo a passo cria um controle que exibe linhas de dados de uma tabela
complexa. Este exemplo usa a tabela Customers do banco de dados de exemplo Northwind. O
complexo controle de usurio exibir a tabela Clientes no controle personalizado DataGridView.
Durante esta explicao passo a passo, voc aprender como:
Definir a tabela Customers no Janela de fontes de dados para usar os novos controle
complexos.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
A primeira etapa para criar um Windows Application.
Para criar o novo projeto Windows
Visual C# Consolidado 955
1. No Visual Studio, a partir do menu File, crie um novo Project.
2. Nomeie o projeto como ComplexControlWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto ComplexControlWalkthrough criado e adicionado Solution Explorer.
Adicionar um controle de usurio ao projeto
Devido esta explicao passo a passo criar um controle de ligao de dados complexa do User
Control, voc deve adicionar um item User Control no projeto
Para adicionar um controle de usurio ao projeto
1. No menu Project, escolha Add User Control.
2. Digite ComplexDataGridView na rea Name, e clique Add.
O controle ComplexDataGridView adicionado ao Solution Explorer e abre no designer.
Criar o controle ComplexDataGridView
Adicione a esta etapa um DataGridView para o controle de usurio
Para criar o controle ComplexDataGridView
Criando controles que suportam cenrios de pesquisa. Para obter mais informaes,
consulte Passo a passo: Criando um Controle de Usurio que Suporta Pesquisa de Ligao de
Dados.
Consulte tambm
Passo a passo: Criando um Controle de Usurio que Suporta Pesquisa de Ligao de Dados
Ao exibir dados no Windows Forms, voc pode escolher os controles existentes a partir da caixa
de ferramentas, ou voc pode criar controles personalizados se seu aplicativo requer uma
funcionalidade no disponvel nos controles padro. Esta explicao passo a passo mostra como
criar um controle que implementa o LookupBindingPropertiesAttribute. Os controles que
Visual C# Consolidado 958
implementam o LookupBindingPropertiesAttribute pode conter trs propriedades que podem
ser vinculadas a dados. Esses controles so semelhantes aos um ComboBox.
Para obter mais informaes sobre a criao de controles, consulte Developing Windows Forms
Controls at Design Time.
Ao criar controles para uso em cenrios de ligao de dados voc precisar implementar um dos
seguintes atributos do databinding:
Uso do atributo DataBinding
Implementar o DefaultBindingPropertyAttribute em controles simples, como o TextBox, que exibi
uma nica coluna (ou propriedade) dos dados. Para obter mais informaes, consulte Passo a
passo: Criando um Controle de Usurio que Suporta Ligao de Dados Simples.
Implementar os controles ComplexBindingPropertiesAttribute, como o DataGridView, que exibe
listas (ou tabelas) de dados. Para obter mais informaes, consulte Passo a passo: Criando um
Controle de Usurio que Suporta Ligao de Dados Complexa.
Implementar os controles no LookupBindingPropertiesAttribute, como o ComboBox, que exibi
listas (ou tabelas) de dados, mas tambm necessrio para apresentar uma nica coluna ou
propriedade (Esse processo descrito nesta pgina na explicao passo a passo.)
Esta explicao passo a passo cria um controle de pesquisa que vincula dados de duas tabelas.
Este exemplo usa as tabelas do banco de dados Northwind Customers e Orders. O controle
pesquisa estar acoplado ao campo CustomerID da tabela Orders. Ele usar este valor para
pesquisar o CompanyName na tabela Customers.
Durante esta explicao passo a passo, voc aprender como:
Definir a coluna CustomerID na tabela Orders na janela Data Sources para usar o novo
controle.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um aplicativo Windows
A primeira etapa criar um Windows Application.
Para criar o novo projeto Windows
Visual C# Consolidado 959
1. No Visual Studio, a partir do menu File, crie um novo Project.
2. Nome do projeto LookupControlWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto LookupControlWalkthrough criado e adicionado Solution Explorer.
Adicionar um controle de usurio ao projeto
Esta explicao passo a passo cria um controle de pesquisa User Control, para adicionar um
item User Control ao projeto LookupControlWalkthrough
Para adicionar um controle de usurio ao projeto
1. No menu Project, selecione Add User Control.
2. Digite LookupBox na rea Name, e clique Add.
O controle LookupBox adicionado ao Solution Explorer e abre no designer.
Criar o controle LookupBox
Para criar o controle LookupBox
O mtodo TableAdapter.GetData retorna uma nova tabela dados preenchida com dados.
A maneira mais fcil de carregar os objetos personalizados com dados chamar o mtodo
TableAdapter.GetData, efetuar um loop atravs da coleo de linhas na tabela de dados retornados,
e preencher cada objeto com os valores em cada linha. Voc pode criar um mtodo GetData que
retorna uma tabela de dados preenchida para qualquer consulta adicionada a um TableAdapter.
Observao
Visual Studio nomeia as consultas TableAdapter Fill e GetData por padro, mas esses nomes
podem ser alterados para qualquer nome de mtodo vlido.
O exemplo a seguir mostra como percorrer as linhas de uma tabela de dados e preencher um
objeto com dados:
Para obter um exemplo de cdigo completo, consulte Passo-a-Passo: Conectando a dados em
Objetos.
C#
private void LoadCustomers() { NorthwindDataSet.CustomersDataTable customerData =
customersTableAdapter1.GetTop5Customers(); foreach (NorthwindDataSet.CustomersRow customerRow in
customerData) { Customer currentCustomer = new Customer(); currentCustomer.CustomerID =
customerRow.CustomerID; currentCustomer.CompanyName = customerRow.CompanyName; if
(customerRow.IsAddressNull() == false) { currentCustomer.Address = customerRow.Address; } if
(customerRow.IsCityNull() == false) { currentCustomer.City = customerRow.City; } if
(customerRow.IsContactNameNull() == false) { currentCustomer.ContactName =
customerRow.ContactName; } if (customerRow.IsContactTitleNull() == false) {
currentCustomer.ContactTitle = customerRow.ContactTitle; } if (customerRow.IsCountryNull() == false) {
currentCustomer.Country = customerRow.Country; } if (customerRow.IsFaxNull() == false) {
currentCustomer.Fax = customerRow.Fax; } if (customerRow.IsPhoneNull() == false) {
currentCustomer.Phone = customerRow.Phone; } if (customerRow.IsPostalCodeNull() == false) {
currentCustomer.PostalCode = customerRow.PostalCode; } if (customerRow.IsRegionNull() == false) {
currentCustomer.Region = customerRow.Region; } LoadOrders(currentCustomer);
customerBindingSource.Add(currentCustomer); } }
Criando uma coleo tipada de objetos
Voc pode criar classes de coleo para os objetos ou usar as colees tipadas que so
automaticamente fornecidas pelo BindingSource Component.
Quando voc estiver criando uma classe de coleo personalizada para objetos, recomendvel
que voc herde da BindingList. Essa classe genrica fornece funcionalidade para administrar sua
coleo, bem como a capacidade de evocar eventos que enviam notificaes para a infra-
estrutura de vinculao de dados no Windows Forms.
A coleo gerada automaticamente no BindingSource usa um BindingList para sua coleo
tipada. Se seu aplicativo no requerer funcionalidade adicional, ento voc pode manter sua
Visual C# Consolidado 964
coleo dentro do BindingSource. Para obter mais informaes, consulte a propriedade List da
classe BindingSource.
Observao
Se sua coleo exigir funcionalidade no fornecida pela implementao base do BindingList,
ento voc deve criar uma coleo personalizada para que voc possa adicionar classe,
conforme o necessrio.
O cdigo a seguir mostra como criar a classe de uma coleo fortemente tipada de objetos Order:
C#
/// <summary> /// A collection of Orders /// </summary> public class Orders:
System.ComponentModel.BindingList<Order> { // Add any additional functionality required by your
collection. }
Adicionando objetos a uma coleo
Voc adiciona objetos a uma coleo chamando o mtodo Add de sua classe de coleo
personalizada ou do BindingSource.
Para obter um exemplo de como adicionar a uma coleo usando o BindingSource, consulte o
mtodo LoadCustomers em Passo-a-Passo: Conectando a dados em Objetos
Para obter um exemplo de como adicionar objetos a uma coleo personalizada, consulte o
mtodo LoadOrders em Passo-a-Passo: Conectando a dados em Objetos.
Observao
O mtodo Add fornecido automaticamente para sua coleo personalizada quando voc herda
do BindingList.
O cdigo a seguir mostra como adicionar objetos a uma coleo tipada em um BindingSource:
C#
Customer currentCustomer = new Customer(); customerBindingSource.Add(currentCustomer);
O cdigo a seguir mostra como adicionar objetos a uma coleo tipada que herda do BindingList:
Observao
Neste exemplo a coleo Orders uma propriedade do objeto Customer.
C#
Order currentOrder = new Order(); currentCustomer.Orders.Add(currentOrder);
Removendo objetos de uma coleo
Visual C# Consolidado 965
Voc remove objetos de uma coleo, chamando o mtodo Remove ou RemoveAt de sua classe de
coleo personalizada ou do BindingSource.
Observao
Os mtodos Remove e RemoveAt so fornecidos automaticamente para sua coleo personalizada
quando voc herda do BindingList.
O cdigo a seguir mostra como localizar e remover objetos da coleo tipada em um
BindingSource com o mtodo RemoveAt:
C#
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Exibindo dados de objeto aos usurios
Para exibir os dados em objetos para usurios, voc cria uma fonte de dados objeto usando o
Assistente para Configurao da Fonte de Dados, e arrasta o objeto inteiro ou propriedades
individuais para seu formulrio a partir da janela Data Sources.
Para obter mais informaes sobre como criar uma fonte de dados objeto, consulte Como se
conectar a dados em um objeto:.
Para obter mais informaes sobre como exibir dados a partir de objetos no Windows Forms,
consulte Exibir dados em formulrios em aplicativos do Windows.
Modificando os dados nos objetos
Para editar dados em objetos personalizados que so vinculados a dados para controles Windows
Forms, basta editar os dados no controle acoplado (ou diretamente nas propriedades do objeto). A
arquitetura de vinculao de dados ir atualizar os dados no objeto.
Se seu aplicativo requerer o rastreamento de alteraes e recuo nas alteraes propostas para
seus valores originais, ento voc deve implementar essa funcionalidade no seu modelo de
objeto. Para exemplos de como tabelas de dados mantm-se informadas das alteraes
propostas, consulte DataRowState, HasChanges, e GetChanges.
Salvando dados em objetos de volta ao banco de dados
Voc salva dados de volta para o banco de dados passando os valores de seu objeto para os
mtodos DBDirect do TableAdapter.
O Visual Studio cria mtodos DBDirect que podem ser executados diretamente no banco de
dados. Esses mtodos no requerem objetos DataSet ou DataTable.
Mtodo DBDirect do
TableAdapter Descrio
TableAdapter.Insert
Adiciona novos registros a um banco de dados, permitindo que voc
passe valores individuais de coluna como parmetros do mtodo.
Visual C# Consolidado 966
TableAdapter.Update
Atualizaes de registros existentes em um banco de dados. O mtodo
Update aceita valores originais e a novos valores de coluna como
parmetros do mtodo. Os valores originais so usados para localizar o
registro original, e os novos valores so usados para atualizar esse
registro.
O mtodo TableAdapter.Update tambm usado para acomodar as
alteraes em um dataset de volta ao banco de dados fazendo o
DataSet, DataTable, DataRow, ou matriz de DataRows como parmetros
do mtodo.
TableAdapter.Delete
Exclui registros existentes do banco de dados com base nos valores
originais da coluna que foram passados como parmetros do mtodo.
Para salvar dados de uma coleo de objetos, percorra a coleo de objetos (por exemplo,
usando um loop for-next) e envie os valores de cada objeto para o banco de dados usando
mtodos DBDirect do TableAdapter.
O exemplo a seguir mostra como usar o mtodo TableAdapter.Insert do DBDirect para adicionar um
novo cliente diretamente ao banco de dados:
C#
private void AddNewCustomers(Customer currentCustomer) { customersTableAdapter.Insert(
currentCustomer.CustomerID, currentCustomer.CompanyName, currentCustomer.ContactName,
currentCustomer.ContactTitle, currentCustomer.Address, currentCustomer.City, currentCustomer.Region,
currentCustomer.PostalCode, currentCustomer.Country, currentCustomer.Phone, currentCustomer.Fax); }
Viso Geral da Edio de dados em DataSets
Editar os dados em um DataSet. o processo de manipular os dados reais nos objetos individuais
DataTable que compem um DataSet Voc editar os dados nas tabelas de dados much ao editar
o dados em uma tabela em qualquer banco de dados o processo pode incluir inserir, atualizar e
excluindo registros na tabela.
Alm de alterar para os dados reais, voc tambm pode consultar um DataTable. Para retornar
linhas especficas de dados, por exemplo, indivduo linhas, verses especficas de (original e
proposta), linhas somente que foram alterados, linhas e linhas com erros
Tarefas tabela dados comuns
A tabela a seguir fornece links para as tarefas comuns associados ao editar e consultar dados de
um DataSet:
Tarefa Descrio
Inserir novos registros em
uma tabela de dados.
Criar uma nova DataRow e adicion-la coleo de linhas da tabela.
For more information, see Como adicionar linhas ao um DataTable.
Atualizar registros
existentes em uma tabela
de dados.
Atribua um valor diretamente para a coluna especfica de uma linha
de dados. For more information, see Como editar linhas de uma
DataTable:.
Excluir registros existentes Chame o Delete mtodo da linha de dados que deseja remover da
Visual C# Consolidado 967
de uma tabela de dados. tabela. For more information, see Como: Excluir linhas em uma
DataTable.
Localize os registros
alterados em uma tabela
de dados.
Chame o GetChanges mtodo de uma tabela de dados. For more
information, see Como: Recuperar Linhas Alteradas.
Acesso verses diferentes
de uma linha em uma
tabela de dados.
Acesso as colunas individuais de uma linha de dados por passagem
em voc DataRowVersion deseja exibir. For more information, see
Como: Obter Verses Especficas de um DataRow.
Localize linhas com erros
em uma tabela de dados.
Verificar a HasErrors propriedade de uma tabela de dados. For more
information, see Como: Localizar linhas com erros:.
Viso geral sobre validao de dados
Validao de dados o processo que confirma que os valores so inseridos em objetos de dados
de acordo com as restries do esquema de um DataSet, bem como as regras estabelecidas pelo
seu aplicativo. Validar dados antes de enviar atualizaes para o banco de dados subjacente
uma boa prtica que reduz erros bem como o nmero potencial de chamadas entre um aplicativo
e o banco de dados. Voc pode confirmar se os dados que esto sendo gravados para um
DataSet so vlidos, criando verificaes de validao para o prprio DataSet. O DataSet pode
verificar se os dados no importando como a atualizao estiver sendo executada se
diretamente pelos controles de um formulrio, de um componente, ou de alguma outra maneira.
Porque o DataSet faz parte do seu aplicativo, ele um local lgico para criar validaes
especficas do aplicativo (diferente de criar as mesma verificaes na camada final do banco de
dados).
Observao
A localidade sugerida para adicionar validao para o aplicativo no arquivo da classe parcial do
DataSet. No Visual Basic ou Visual C# abra o DataSet Designer e clique duas vezes na coluna
ou tabela que voc deseja criar a validao. Esta ao cria automaticamente um manipulador de
eventos ColumnChanging. ou RowChanging. Para obter mais informaes, consulte Como:
Validar Dados Durante Alteraes de Linha ou Como: validar dados durante alteraes em coluna,
Validando dados
Validao em um DataSet pode ser realizada:
Criando sua prpria validao especfica do aplicativo que pode verificar dados durante
alteraes em valores em uma coluna de dados individual. Para obter mais informaes,
consulte Como: validar dados durante alteraes em coluna.
Criando sua prpria validao especfica do aplicativo que pode verificar dados durante
alteraes em valores enquanto um linha de dados inteira est sendo alterada. Para obter mais
informaes, consulte Como: Validar Dados Durante Alteraes de Linha.
Ao criar chaves, restries exclusivas, e assim por diante como parte da definio do
esquema real do DataSet. Para obter mais informaes sobre incorporar validao na
definio de esquema, consulte Como definir uma coluna de dados como a chave primria: e
Como restringir uma coluna de dados contm valores exclusivos para:.
A seleo do controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
A adio de validao para confirmar se a coluna Quantity contm valores maiores que 0.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criar um Novo Windows Application
Para criar o novo projeto Windows Application
1. No menu File, crie um novo projeto.
2. Nomeie o projeto como ValidationWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto ValidationWalkthrough criado e adicionado ao Solution Explorer.
Criando uma Nova Fonte de Dados a partir de seu Banco de Dados
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type, e clique em Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind estiver
disponvel na lista suspensa, selecione-o.
-ou-
o
Selecione New Connection para iniciar a caixa de dilogo Add/Modify
Connection. Para obter mais informaes, consulte Add/Modify Connection Dialog Box
(General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (include sensitive data), e clique em Next.
6. Clique em Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a tabela Order Details, e clique em Finish.
Visual C# Consolidado 971
O NorthwindDataSet adicionado ao seu projeto e a tabela OrderDetails aparece na
janela Data Sources.
Criando Controles ligados a Dados
Para criar controles ligados a dados no formulrio
1. Na janela Data Sources, selecione a tabela Order Details.
2. Escolha Details na lista de controles da tabela.
3. Arraste o n Order Details da janela Data Sources para Form1.
Controles ligados a dados com rtulos descritivos aparecem no formulrio, juntamente com
uma faixa de ferramentas (BindingNavigator) para registros de navegao. Controles
ligados a dados com rtulos descritivos aparecem no formulrio, juntamente com uma faixa
de ferramentas (BindingNavigator) para registros de navegao. Um NorthwindDataSet,
Order_DetailsTableAdapter, BindingSource, e BindingNavigator aparecem na bandeja de
componentes.
Adicionando um Controle ErrorProvider ao Formulrio
Para configurar um controle ErrorProvider
1. Arraste um ErrorProvider da Toolbox para o Form1.
2. Na janela Properties, defina a propriedade DataSource do ErrorProvider como
Order_DetailsBindingSource.
Observao
No defina a propriedade DataMember.
Criando o Manipulador de Eventos ColumnChanging
Para criar os manipuladores de eventos de validao
1. Abra o NorthwindDataSet no Dataset Designer. clicando duas vezes no arquivo
NorthwindDataSet.xsd no Solution Explorer
2. Clique duas vezes na coluna Quantity da tabela OrderDetails para criar o manipulador de
eventos OrderDetailsDataTable_ColumnChanging. (Em C# somente classe parcial da tabela de
dados ser criada.)
Observao
Um clique duplo no nome da tabela (Order Details na barra de ttulo.) cria um manipulador de
eventos para o evento RowChanging.
3. Adicione cdigo para verificar se e.ProposedValue contem valores maiores que 0. Se o valor
proposto for 0 ou menos, marque a coluna para indicar que ela contm um erro.
Cole o cdigo a seguir no manipulador de eventos de alterao da coluna (column-
changing) sob o comentrio Add user code here :
C#
if ((short)e.ProposedValue <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater
than 0"); } else { e.Row.SetColumnError("Quantity", ""); }
Testando o Aplicativo
Para testar o aplicativo
Visual C# Consolidado 972
1. Pressione F5 para executar o aplicativo.
2. Altere o valor na caixa de texto Quantity para 0.
3. Pressione TAB para mover o foco para fora da caixa de texto.
O cone do provedor de erros (error provider) aparecer.
4. Posicione o ponteiro do mouse sobre o provedor de erros para ver a mensagem.
Prximas etapas
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
aps adicionar validao. Alguns aprimoramentos que voc pode fazer a esta explicao passo a
passo incluem:
Adicionar funcionalidade para enviar atualizaes de volta para o banco de dados. Para
obter mais informaes, consulte Passo-a-Passo: Salvando Dados para um Banco de Dados
(Tabela Simples).
Editar o dataset para adicionar ou remover objetos de banco de dados. Para obter mais
informaes, consulte Como editar um DataSet:.
Viso Geral do Salvar dados
Como um dataset efetivamente um cache uma cpia em memria dos dados, o processo
de gravar informaes para a fonte de dados original separado do processo de modificar os
dados no dataset. Voc pode enviar dados atualizados no datasets de volta para o banco de
dados chamando um dos mtodos Update de um TableAdapter ou chamando um dos mtodos
DBDirect do TableAdapter.
Para obter mais informaes sobre o envio das alteraes em um dataset de volta para o banco
de dados, consulte Como: atualizar dados usando um TableAdapter e Como salvar alteraes
DataSet em um banco de dados:.
Para informaes sobre como modificar dados no dataset, consulte Editar dados no seu aplicativo.
Atualizaes de Dois Estgios
Atualizar uma fonte de dados por meio de um dataset um processo de duas etapas. A primeira
etapa atualizar o dataset com novas informaes novos registros, registros alterados ou
registros excludos. Se seu aplicativo est relacionado somente com o dataset por exemplo,
aps atualizar o dataset, voc o envia para outro aplicativo que ir executar mais processamento
do dataset ento voc est terminando a atualizao.
Observao
No Windows Forms, a arquitetura de vinculao de dados cuida do envio de alteraes dos
controles com dados vinculados ao dataset e voc no precisa claramente atualizar o dataset com
seu prprio cdigo. Para obter mais informaes, consulte Windows Forms Data Binding.
Se voc estiver atualizando uma fonte de dados (como um banco de dados), a segunda etapa
enviar as alteraes do dataset para fonte de dados original. Isto , o processo de atualizao o
dataset tambm no grava as alteraes a uma fonte de dados base; voc deve executar essa
segunda etapa explicitamente. Voc normalmente faz isso chamando o mtodo Update do mesmo
TableAdapter (ou adaptador de dados) que voc usou para preencher o dataset, embora tambm
Visual C# Consolidado 973
possa usar adaptadores diferentes, por exemplo, para mover dados de uma fonte de dados para
outra ou para atualizar vrias fontes de dados.
Processo de atualizao de dois estgios e a funo do DataRowVersion em uma
atualizao bem sucedida
Estruturalmente, um dataset torna dados disponveis como conjuntos de colees. Datasets
contm colees de tabelas. Tabelas contm colees de linhas. Tabelas so expostas como uma
coleo do objeto DataSet e registros esto disponveis na coleo Rows de objetos DataTable.
Fazer alteraes dos dados em um dataset por simples manipulao dessas colees usando
mtodos de coleo de base possvel, mas se voc pretende atualizar uma fonte de dados
subjacente voc deve usar os mtodos especificamente projetados para modificao de dataset.
Por exemplo, para remover um registro de uma tabela de dados, voc poderia chamar o Mtodo
RemoveAt da coleo Rows da tabela, que fisicamente exclui o registro do dataset. Se voc
estiver usando o dataset somente como um armazenamento estruturado para dados e no estiver
preocupado em transmitir mudana de informaes para um outro aplicativo, manipular colees
dessa maneira um modo aceitvel de atualizao um dataset.
Entretanto, se voc pretende enviar alteraes para uma fonte de dados ou outro aplicativo, voc
precisar manter informaes de alteraes (isto , metadados) sobre cada atualizao.
Posteriormente, quando voc enviar alteraes para a fonte de dados ou aplicativo, o processo
ter as informaes necessrias para localizar e atualizar os registros adequados. Por exemplo,
se voc excluir um registro no dataset, informaes sobre o registro excludo devem ser mantidas
no dataset. Dessa forma, quando o DeleteCommand do TableAdapter chamado, h informaes
suficientes para localizar o registro original em uma fonte de dados para que este possa ser
excludo. Para obter mais informaes, consulte " Mantendo Informaes Sobre Alteraes "
abaixo.
Mesclando DataSets
Visual C# Consolidado 974
Voc pode atualizar o contedo de um dataset mesclando isto , copiando o contedo de um
dataset (chamado de dataset origem) para o dataset chamado (referido como o dataset destino).
Quando voc mescla datasets, novos registros na fonte do dataset so adicionados para o
dataset destino. Alm disso, colunas extras do dataset fonte so adicionadas ao dataset destino.
Mesclar datasets particularmente til quando voc tiver um dataset local e obter um segundo
dataset de outro aplicativo ou de um componente como um XML Web Services. Tambm til
quando voc precisa integrar dados de vrios datasets.
Quando datasets so mesclados, tambm possvel passar um argumento booleano opcional
(preserveChanges) que informa ao mtodo Merge se deseja manter modificaes existentes no
dataset destino. Como datasets mantm vrias verses de registros, importante ter em mente
que mais de uma verso dos registros est sendo mesclada. A tabela a seguir ilustra um registro
em dois datasets que sero mesclados:
DataRowVersion DataSet destino DataSet origem
Original James Wilson James C. Wilson
Atual Jim Wilson James C. Wilson
Chamar o mtodo Merge na tabela acima com preserveChanges=false
targetDataset.Merge(sourceDataset) resulta no seguinte:
DataRowVersion DataSet destino DataSet origem
Original James C. Wilson James C. Wilson
Atual James C. Wilson James C. Wilson
Chamar o mtodo Merge com preserveChanges = true targetDataset.Merge(sourceDataset, true) resulta
no seguinte:
DataRowVersion DataSet destino DataSet origem
Original James C. Wilson James C. Wilson
Atual Jim Wilson James C. Wilson
Cuidado
No cenrio preserveChanges = true, se o mtodo RejectChanges for chamado em um registro no
dataset destino, ento ele reverter para os dados originais do dataset origem. Isso significa que
se voc tentar atualizar a fonte de dados original com o dataset destino, ele pode no ser capaz
de localizar a linha original para atualizar. Entretanto, voc pode impedir uma violao simultnea
preenchendo outro dataset com os registros atualizados a partir da fonte de dados e, ento,
executar uma mesclagem impedindo uma violao simultnea. (Uma violao simultnea ocorre
quando outro usurio modifica um registro na fonte de dados aps o dataset ter sido preenchido).
Para obter mais informaes, consulte Controle de concorrncia no ADO.NET.
Restries de Atualizao
Para fazer alteraes em um linha de dados existente, voc adiciona ou atualiza dados nas
colunas individuais. Se o dataset contiver restries (como chaves externas ou restries no-
anulveis), possvel que voc atualize um registro aps voc ter terminado de atualizar uma
coluna, mas antes que voc obtenha a prxima o registro pode temporariamente estar em um
estado de erro.
Visual C# Consolidado 975
Para evitar violaes de restrio voc pode temporariamente suspender restries de
atualizao. Isso serve para duas finalidades:
Ela impede que um erro seja jogado quando voc atualiza uma coluna antes de obter a
outra coluna.
Imediatamente aps voc ter carregado informaes para o dataset, como quando voc l
dados da fonte.
Aps enviar alteraes do dataset para a fonte de dados (mas no antes, porque voc
pode perder as informaes necessrias para enviar alteraes para o banco de dados).
Voc pode confirmar as alteraes pendentes para o dataset chamando o mtodo
AcceptChanges. Normalmente, AcceptChanges deve ser chamado nos prximos momentos em
seu aplicativo.
Depois que voc carregou o dataset. Se voc carregar um dataset chamando o mtodo Fill
do TableAdapter, ento o adaptador confirma automaticamente as alteraes para voc.
Entretanto, se voc carregar um dataset, mesclando outro dataset para ele, ento voc ter
que confirmar as alteraes manualmente.
Observao
Voc pode impedir que o adaptador confirme automaticamente as alteraes ao chamar o mtodo
Fill, definindo a propriedade AcceptChangesDuringFill do adaptador para false. Se ele estiver
definido para false, ento o RowState de cada linha inserida durante o preenchimento definido
como Added
Aps voc ter enviado alteraes do dataset para outro processo, como um XML Web
Service.
Cuidado
Confirmar a alterao dessa maneira apaga qualquer mudana da informao. No confirmar
alteraes at depois que voc tiver efetuado quaisquer operaes no qual seu aplicativo
depende em saber quais alteraes foram feitas no dataset.
Esse mtodo realiza o seguinte:
Na camada comercial, adicionando o cdigo a seu aplicativo para validar dados. O dataset
um local que voc pode fazer isso. O dataset fornece algumas das vantagens de validao
back-end como a capacidade para validar alteraes como valores de coluna e linha
alteradas. Para obter mais informaes, consulte Viso geral sobre validao de dados.
No back-end de dados, enviando dados para a fonte de dados por exemplo, o banco de
dados e permitindo que ele aceite ou rejeite os dados. Se voc estiver trabalhando com um
banco de dados que tem recursos sofisticados para validao de dados e fornecimento de
informaes de erro, isso pode ser uma abordagem prtica porque voc pode validar os dados
no importando de onde ele vem. Entretanto, ele pode no acomodar requisitos especficos de
aplicativo de validao. Alm disso, tendo a fonte de dados validada, dados podem resultar em
vrias viagens fonte de dados, dependendo de como seu aplicativo facilita em resolver erros
de validao elevados pelo back-end.
Observao de segurana
Ao usar comandos de dados com uma propriedade CommandType definida como Text,
cuidadosamente verifique informaes que so enviadas de um cliente antes de pass-la para
seu banco de dados. Usurios mal intencionados podem tentar para enviar (inserir) instrues
SQL modificadas ou adicionais em um esforo para obter acesso no autorizado ou danificar o
Visual C# Consolidado 980
banco de dados. Antes de voc transferir a entrada do usurio a um banco de dados, voc deve
verificar se as informaes so vlidas; a melhor prtica para sempre usar consultas
parametrizadas ou procedimentos armazenados quando possvel. Para obter mais informaes,
consulte Viso Geral Sobre Scripts Maliciosos.
Aps terem sido feitas alteraes em um dataset, voc pode transmitir as alteraes em uma
fonte de dados. Mais comumente, faa isso chamando o mtodo Update de um TableAdapter (ou
adaptador de dados). O mtodo loops a cada registro em uma tabela de dados, determina que
tipo de atualizao necessria (atualizar, inserir ou excluir), se houver, e, ento, executa o
comando apropriado.
Como Uma Atualizao Transmitida Fonte de Dados
Como uma ilustrao da como atualizaes so feitas, suponha que o seu aplicativo utilize um
dataset contendo uma nica tabela de dados. O aplicativo busca duas linhas do banco de dados.
Aps a recuperao, a tabela de dados na memria tem esta aparncia:
(RowState) CustomerID Name Status (Unchanged) c200 Robert Lyon Good (Unchanged) c400 Nancy
Buchanan Pending
Seu aplicativo altera o status de Nancy Buchanan para " Preferred ". Como resultado desta
alterao, o valor da propriedade RowState para aquela linha altera de Unchanged para
Modified. O valor da propriedade RowState para a primeira linha permanece Unchanged. A
tabela de dados agora tem esta aparncia:
(RowState) CustomerID Name Status (Unchanged) c200 Robert Lyon Good (Modified) c400 Nancy
Buchanan Preferred
Seu aplicativo agora chama o mtodo Update para transmitir o dataset para o banco de dados. O
mtodo inspeciona cada linha por vez. Para a primeira linha, o mtodo no transmite Instruo
SQL para o banco de dados, porque essa linha no foi alterada desde que foi originalmente
procurada no banco de dados.
Para a segunda linha, no entanto, o mtodo Update automaticamente chama o comando de dados
adequado e o transmite para o banco de dados. A sintaxe especfica da instruo SQL depende
do dialeto do SQL suportado para o armazenamento de dados subjacente. Mas os seguintes
traos gerais de instruo do SQL transmitidos so os que valem a pena observar:
A instruo SQL transmitida uma declarao UPDATE. O adaptador sabe usar uma
propriedade UPDATE, porque o valor da propriedade RowState Modified.
A instruo SQL transmitida inclui uma clusula WHERE indicando que o destino da
declarao UPDATE a linha cujo CustomerID = 'c400'. Esta parte da declarao SELECT
distingue a linha de destino de todas as outras porque CustomerID a chave primria da tabela
de destino. As informaes para a clusula WHERE so derivadas da verso original do
registro (DataRowVersion.Original), no caso de os valores necessitarem identificar a linha que foi
alterada.
A instruo SQL transmitida inclui a clusula SET, para definir os novos valores das
colunas modificadas.
Observao
Se a propriedade UpdateCommand do TableAdapter tiver sido definida com o nome de um
Visual C# Consolidado 981
procedimento armazenado, o adaptador no constri uma instruo SQL. Em vez disso, ele
chama o procedimento armazenado com os parmetros apropriados passados.
Passando Parmetros
Valores de registros a serem atualizados no banco de dados so passados usando parmetros.
Quando o mtodo Update do TableAdapter executa uma declarao UPDATE, ele precisa
preencher os valores de parmetro. Ele obtm esses valores da coleo Parameters para o
comando de dados apropriados neste caso, o objeto UpdateCommand na TableAdapter.
Se voc tiver usado ferramentas do Visual Studio para gerar um adaptador de dados, o objeto
UpdateCommand conter um conjunto de parmetros que corresponde a cada espao reservado
do parmetro na declarao.
A propriedade SqlParameter.SourceColumn de cada parmetro aponta para uma coluna na tabela
de dados. Por exemplo, a propriedade SourceColumn para os parmetros au_id e Original_au_id
estiverem definidos como qualquer coluna na tabela de dados contm o autor do ID. Quando o
adaptador do mtodo Update executa, ele l o autor coluna ID do registro sendo atualizado e
preenche os valores na declarao
Em uma declarao UPDATE, voc precisa especificar os dois novos valores (aqueles que sero
gravados para o registro), bem como os antigos valores (para que o registro a ser atualizado
possa estar localizado no banco de dados). H, portanto, dois parmetros para cada valor: um
para a clusula SET e um cone diferente para a clusula WHERE. Os dois parmetros lem
dados do registro sendo atualizado, mas eles obtm verses diferentes do valor da coluna com
base no parmetro da propriedade SqlParameter.SourceVersion. O parmetro para a clusula
SET obtm a verso atual e o parmetro para a clusula WHERE obtm a verso original.
Observao
Voc tambm pode definir valores na coleo Parameters no cdigo, que normalmente voc deseja
fazer em um manipulador de eventos para o adaptador de dados do evento RowChanging. Para
obter mais informaes, consulte Parmetros de comandos Adapter Data-.
Atualizando Tabelas Relacionadas
Se o dataset contiver vrias tabelas, voc precisa atualiz-las individualmente chamando o
mtodo Update de cada adaptador de dados separadamente. Se as tabelas tm uma relao pai-
filho, provvel que voc ter que enviar atualizaes para o banco de dados em uma ordem
especfica. Um cenrio comum que voc adicionou pai e o filho relacionado gravados para um
dataset por exemplo, um novo registro do cliente e um ou mais registros relacionados. Se o
prprio banco de dados est impondo regras de integridade relacional, ele aumentar erros se
voc enviar o novo registro filho para o banco de dados antes que o registro pai tiver sido criado.
Inversamente, se voc excluir registros relacionados no dataset, geralmente voc ter para que
atualizaes na ordem inversa: tabela filho primeiro, depois tabela pai. Caso contrrio, provvel
que o banco de dados que gere um erro porque as regras de integridade referencial impediro
voc de excluir um registro pai enquanto ainda existem registros filho relacionados.
Uma regra geral para enviar atualizaes para tabelControle de concorrncia no
ADO.NET
Visual C# Consolidado 982
Controle concorrente o processo usado para identificar e resolver atualizaes dos dados que
so feitas por vrios usurios simultaneamente. Os tpicos a seguir explicam mtodos comuns
para controle concorrente, bem como recursos ADO.NET especficos para manipular erros
concorrentes.
as relacionadas a seguir nesta ordem:
1. Tabela filho: excluir registros.
2. Tabela pai: inserir, atualizar e excluir registros.
3. Tabela filho: inserir e atualizar registros.
4. Para obter mais informaes, consulte Passo-a-Passo: salvando dados a um banco de
dados (vrias tabelas).
Controle de Concorrncia
Como datasets so desconectados da fonte de dados, no mantenha bloqueios em registros na
fonte de dados. Portanto, se voc deseja atualizar o banco de dados, e se ele for importante para
seu aplicativo para manter controle de simultaneidade, voc deve reconciliar registros no dataset
com aqueles no banco de dados. Por exemplo, voc pode localizar registros no banco de dados
que foram alterados desde o ltimo preenchimento do dataset. Nesse caso, voc deve executar
aplicao-apropriada lgica para especificar o que acontece com o registro de banco de dados ou
com o registro alterado que voc tem em sua dataset. Para obter mais informaes, consulte
Controle de concorrncia no ADO.NET.
Introduo ao CONCURRENCY dados em ADO.NET
Quando usurios mltiplos tentar para modificar dados ao mesmo tempo, controles precisar ser
estabelecida para impedir modificaes de um usurio de afetar negativamente modificaes de
usurios simultneos. O sistema de manipular o que acontece nessa situao chamado controle
de simultaneidade.
Tipos de controle CONCURRENCY
Em geral, h trs maneiras comuns para gerenciar simultaneidade em um banco de dados:
Controle de simultaneidade pessimista uma linha indisponvel aos usurios a partir da
hora do registro so vasculhados at que ele seja atualizada no banco de dados.
Controle concorrncia otimista Linha indisponvel para outros usurios somente
enquanto os dados est realmente sendo atualizados. A atualizao examina a linha no banco
de dados e determina se qualquer alterao tiver sido feita. Tentativa de atualizar um registro
que j tenha sido alterado resulta em uma violao de concorrncia.
" ltima no WINS " Linha indisponvel para outros usurios somente enquanto os dados
est realmente sendo atualizados. No entanto, nenhum esforo feita para comparar
atualizaes contra o registro original; o registro simplesmente gravado out, potencialmente
sobrescrever qualquer alterao feita por outros usurios desde voc atualizou os registros
pela ltima vez.
CONCURRENCY pessimista
Simultaneidade pessimista normalmente usado para dois motivos. Primeiro, em algumas
situaes, no alta conteno dos mesmos registros. O custo de colocando bloqueios sobre os
dados menor que o custo de reverter alteraes quando ocorrerem conflitos simultaneidade.
Visual C# Consolidado 983
Simultaneidade pessimista tambm til para situaes onde ela seja detrimental para o Registro
para alterar durante o curso de uma transao. Um bom exemplo um aplicativo de estoque.
Considere um representante empresa verificao estoque de um cliente potencial. Normalmente
voc deseja bloquear o registro at que um pedido seja gerada, que deseja sinalizar o item com
um status de ordenada e remov-lo do estoque disponvel Geralmente. Se nenhuma ordem
gerado, o bloqueio seria ser liberado para que outros usurios verificando estoque comear uma
contagem do estoque disponvel precisas.
No entanto, controle de simultaneidade pessimista possvel em uma arquitetura desconectado.
As conexes so abrir somente longo o suficiente para ler os dados ou para atualiz-lo, portanto
bloqueios no pode ser sustained por longos perodos. Alm disso, um aplicativo que contm at
bloqueios por longos perodos no escalonveis.
Observao
Se sua fonte de dados subjacente suportar transaes, voc pode simular simultaneidade
pessimista por atualizar dados em uma transao. For more information, see Features Provided
by System.Transactions.
CONCURRENCY otimista
Em concorrncia otimista, bloqueios so conjunto e mantidos somente enquanto o banco de
dados est sendo acessado. Os bloqueios impede os outros usurios de tentativa de atualizar
registros no mesmo instantneas. Os dados esto sempre disponveis exceto para o momento em
que uma atualizao for local Taking exata. For more information, see Using Optimistic
Concurrency.
Quando uma atualizao tentada, a verso original de uma linha alterada comparado contra a
linha existente no banco de dados. Se as duas forem diferentes, a atualizao falhar com um
erro de simultaneidade. Ele backup a voc nesse ponto para reconciliar as linhas dois, usando
lgica corporativa que voc criar.
ltima no WINS
Com " ltima no WINS, " feita nenhuma verificao dos dados originais e a atualizao
simplesmente gravada no banco de dados. Ele compreendido que o cenrio a seguir podem
ocorrer:
O usurio A modifica o registro ' antigo ' e grava-lo novamente para o banco de dados.
No cenrio acima, as alteraes feitas Usurio B nunca foram vistas pelo usurio a. Certifique-se
que esta situao aceitvel se voc quiser usar a abordagem " ltima no WINS " do controle de
simultaneidade.
Controle de simultaneidade em ADO.NET e Visual Studio
ADO.NET e Visual Studio usar concorrncia otimista, porque a arquitetura de dados for baseada
em dados desconectado. Portanto, voc precisar adicionar lgica corporativa para resolver
problemas com simultaneidade otimista.
Visual C# Consolidado 984
Se voc optar por usar concorrncia otimista, existem duas maneiras geral para determinar se
ocorreram alteraes: a abordagem verso (nmeros de verso True ou carimbos de data e hora)
e a abordagem valores-economia-todos os.
A abordagem nmero verso
Na abordagem nmero verso, o registro a ser atualizado deve ter uma coluna que contm um
carimbo de data e hora ou nmero de verso. O carimbo de data e hora ou um nmero de verso
salva no cliente quando o registro leitura. Esse valor depois feita parte da atualizao.
Uma maneira para manipular simultaneidade para atualizar somente se Valor na clusula
WHERE corresponde ao valor no Registro. A representao SQL dessa abordagem :
UPDATE Table1 SET Column1 = @newvalue1, Column2 = @newvalue2 WHERE DateTimeStamp =
@origDateTimeStamp
Como alternativa, a comparao pode ser feita usando o nmero de verso:
UPDATE Table1 SET Column1 = @newvalue1, Column2 = @newvalue2 WHERE RowVersion =
@origRowVersionValue
Se o carimbos de data e hora ou os nmeros verso coincidirem, o registro no armazenamento de
dados no foi alterado e com segurana podem ser atualizados com os novos valores do DataSet.
Um erro ser retornado se elas no coincidem. Voc pode escrever cdigo para implementar essa
forma de simultaneidade verificao no Visual Studio. Voc tambm ter para gravar cdigo para
responder a qualquer conflitos de atualizao. Para manter o carimbo de data e hora ou nmero
de verso precisa, voc precisar configurar um disparador na tabela para atualiz-lo quando
ocorre uma alterao em uma linha.
A abordagem valores-Saving-tudo
Uma alternativa para usando um nmero ou verso carimbo de data e hora ser para obter cpias
de todos os campos quando o registro leitura. O DataSet objeto no ADO.NET mantm duas
verses de cada registro modificado: uma verso original (que foi ler a partir da fonte de dados)
originalmente e uma verso modificada, que representa as atualizaes de usurio. Ao tentar para
gravar o Registro de volta para a fonte de dados, os valores originais na linha de dados so
comparados com o registro na fonte de dados. Se eles coincidirem, significa registro de banco de
dados que no foi alterado desde que ela foi lida. Nesse caso, os valores alterados a partir do
DataSet com xito so gravados para o banco de dados.
Cada comando adaptador de dados tem uma coleo parmetros para cada um dos seus
comandos quatro (DELETE, INSERT, SELECT, e UPDATE). Cada comando tem parmetros para
tanto os valores originais,, bem como os valores atual (ou modificado).
Observao
Somente a adio de novos registros (o comando INSERT) requer os valores atuais pois nenhum
registro original existe e remover registros (o comando delete) somente requer os valores
originais, para localizar o registro para excluir.
Visual C# Consolidado 985
O exemplo a seguir mostra o texto de comando para um comando DataSet que atualiza uma
tabela comum Customers. O comando foi especificado para SQL Dinmico e simultaneidade
otimista.
UPDATE Customers SET CustomerID = @currCustomerID, CompanyName = @currCompanyName,
ContactName = @currContactName, ContactTitle = currContactTitle, Address = @currAddress, City =
@currCity, PostalCode = @currPostalCode, Phone = @currPhone, Fax = @currFax WHERE (CustomerID =
@origCustomerID) AND (Address = @origAddress OR @origAddress IS NULL AND Address IS NULL) AND
(City = @origCity OR @origCity IS NULL AND City IS NULL) AND (CompanyName = @origCompanyName
OR @origCompanyName IS NULL AND CompanyName IS NULL) AND (ContactName =
@origContactName OR @origContactName IS NULL AND ContactName IS NULL) AND (ContactTitle =
@origContactTitle OR @origContactTitle IS NULL AND ContactTitle IS NULL) AND (Fax = @origFax OR
@origFax IS NULL AND Fax IS NULL) AND (Phone = @origPhone OR @origPhone IS NULL AND Phone IS
NULL) AND (PostalCode = @origPostalCode OR @origPostalCode IS NULL AND PostalCode IS NULL);
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, PostalCode, Phone, Fax
FROM Customers WHERE (CustomerID = @currCustomerID)
Observe que os parmetros instruo SET nove representam os valores atuais que vai ser
gravados para o banco de dados, enquanto a nove WHERE parmetros instruo representam o
original valores que so usados para localizar o registro original.
Os parmetros nove primeiros na instruo SET correspondem aos parmetros nove primeiros na
coleo parmetros. Esses parmetros seria ter sua SourceVersion propriedade definida para
Current.
Os parmetros prxima nove na instruo WHERE so usadas para simultaneidade otimista.
Esses espaos reservados seria correspondem com os parmetros prxima nove na coleo
parmetros, e cada um desses parmetros deve ter sua SourceVersion propriedade definida como
Original.
A instruo SELECT usado para atualizar o DataSet aps a atualizao ter ocorrido. Ele
gerado quando voc definir a Refresh the DataSet opo na caixa Advanced SQL Generations
Options de dilogo.
Observao
A instruo SQL acima usa parmetros nomeados, enquanto OleDbDataAdapter comandos usar
pontos de interrogao (?) como espaos reservados parmetro.
Por padro Visual Studio cria esses parmetros para voc se voc selecionar a Optimistic
Concurrency opo na DataAdapter Configuration Wizard. Ele backup a voc para adicionar
um cdigo para manipular os erros com base em seus prprios requisitos de negcios. Fornece
um DBConcurrencyException objeto que retorna a linha que viola as regras de simultaneidade
ADO.NET. For more information, see Como: identificador erros concorrentes.
Como: identificador erros concorrentes
Voc pode capturar o objeto DBConcurrencyException para ajudar a resolver problemas de
aparecimento de violaes concorrentes. O objeto DBConcurrencyException retorna o linha de
dados que causou o erro. Para obter mais informaes, consulte Membros
DBConcurrencyException.
Visual C# Consolidado 986
As tentativas do exemplo a seguir, atualiza uma fonte de dados com o contedo do
NorthwindDataSet em um bloco try/catch, se um erro for gerado uma mensagem de erro exibida
junto com a primeira coluna da linha de dados afetada.
Observao
O cdigo abaixo uma ilustrao de uma estratgia para tratar um erro de atualizao do banco
de dados. O cdigo pressupe vrias coisas; uma conexo existente para um banco de dados, a
existncia de um dataset, bem como a suposio que o comando de execuo da atualizao
ser gerado numa violao de concorrncia. Para obter mais informaes e um exemplo
completo, consulte Passo a passo: Manipulando uma exceo de concorrncia.
Para resolver uma violao de concorrncia
1. Execute o comando para atualizar o banco de dados de dentro de um bloco try/catch.
2. Se uma exceo gerada, inspecione a declarao catch da propriedade Row para
determinar o que causou a violao.
3. Adicione cdigo para resolver o erro com base nas regras de negcio do aplicativo.
O cdigo a seguir usa o CustomersTableAdapter e o NorthwindDataSet, como exemplos do
adaptador e do dataset em seu aplicativo.
C#
try { customersTableAdapter.Update(northwindDataSet); } catch (DBConcurrencyException ex) {
string customErrorMessage; customErrorMessage = "Concurrency violation\n"; customErrorMessage
+= ex.Row[0].ToString(); // Add business logic code to resolve the concurrency violation... }
Passo a passo: Manipulando uma exceo de concorrncia
As excees concorrentes (DBConcurrencyException) so geradas quando dois usurios tentam
alterar os mesmos dados em um banco de dados ao mesmo tempo. Nesta explicao passo a
passo voc ir criar um aplicativo do Windows que ilustra a captura da linha que causou o erro
DBConcurrencyException e uma estratgia para voc efetuar o tratamento.
Esta explicao passo a passo leva voc atravs do seguinte processo:
1. Criar um novo projeto Windows Application.
2. Crie um novo dataset baseado na tabela Northwind Customers.
3. Criar um formulrio com um DataGridView para exibir os dados.
4. Preencher um dataset com dados da tabela Customers do banco de dados Northwind.
5. Aps preencher o dataset, use o Visual Database Tools no Visual Studio para acessar a
tabela de dados Customers e alterar diretamente um registro.
6. Ento no formulrio, altere o mesmo registro com um valor diferente, atualize o dataset, e
tente gravar as alteraes no banco de dados, que resulta na gerao de um erro
concorrente.
7. Capture o erro, e exiba as diferentes verses do registro, permitindo ao usurio determinar
se deseja continuar e atualizar o banco de dados, ou cancelar a atualizao.
Pr-requisitos
Para concluir esta explicao passo a passo, voc precisa:
Visual C# Consolidado 987
Crie a mensagem, adicionando o seguinte cdigo para o Code Editor. Digite este cdigo
abaixo para o mtodo UpdateDatabase.
C#
private string CreateMessage(NorthwindDataSet.CustomersRow cr) { return "Database: " +
GetRowData(GetCurrentRowInDB(cr), DataRowVersion.Default) + "\n" + "Original: " + GetRowData(cr,
DataRowVersion.Original) + "\n" + "Proposed: " + GetRowData(cr, DataRowVersion.Current) + "\n" +
"Do you still want to update the database with the proposed value?"; } //---------------------------------------
----------------------------------- // This method loads a temporary table with current records from the
database // and returns the current values from the row that caused the exception. //------------------------
-------------------------------------------------- private NorthwindDataSet.CustomersDataTable
tempCustomersDataTable = new NorthwindDataSet.CustomersDataTable(); private
NorthwindDataSet.CustomersRow GetCurrentRowInDB(NorthwindDataSet.CustomersRow
RowWithError) { this.customersTableAdapter.Fill(tempCustomersDataTable);
Visual C# Consolidado 990
NorthwindDataSet.CustomersRow currentRowInDb =
tempCustomersDataTable.FindByCustomerID(RowWithError.CustomerID); return currentRowInDb; }
//-------------------------------------------------------------------------- // This method takes a CustomersRow
and RowVersion // and returns a string of column values to display to the user. //----------------------------
---------------------------------------------- private string GetRowData(NorthwindDataSet.CustomersRow
custRow, DataRowVersion RowVersion) { string rowData = ""; for (int i = 0; i <
custRow.ItemArray.Length ; i++ ) { rowData = rowData + custRow.Item(i, RowVersion).ToString() + " ";
} return rowData; }
Processando resposta do usurio
Voc tambm precisar codificar para processar a resposta do usurio caixa de mensagem. As
opes so tanto sobrescrever o registro atual no banco de dados com a alterao proposta ou
abandonar as alteraes locais e atualizar a tabela de dados com o registro corrente no banco de
dados. Se o usurio escolher Sim, o mtodo Merge chamado com o argumento
preserveChanges definido como true. Isso far com que a tentativa de atualizao ser bem
sucedida, porque agora a verso original do registro coincide com o registro no banco de dados.
Para processar a entrada de usurio na caixa de mensagem
Selecione o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criar um formulrio vinculado a dados, arrastando itens da janela Data Sources para o
formulrio.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
A primeira etapa para criar um Windows Application.
Para criar o novo projeto Windows
1. No Visual Studio, a partir do menu File, criar um novo Project.
2. Nome do projeto TableAdapterDbDirectMethodsWalkthrough.
3. Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto TableAdapterDbDirectMethodsWalkthrough criado e adicionado ao Solution
Explorer.
Criar uma fonte de dados do seu banco de dados
Visual C# Consolidado 992
Os passos usados no Data Source Configuration Wizard para criar uma fonte de dados com
base na tabela Region, no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco
de dados de exemplo Northwind para criar a conexo. Para informaes sobre como configurar
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
Para criar a fonte de dados
1. No menu Data, clique em Show Data Sources.
2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
3. Selecione Database na pgina Choose a Data Source Type, e clique Next.
4. Na pgina Choose your Data Connection siga um destes procedimentos:
o
Se uma conexo de dados para o banco de dados de exemplo Northwind est
disponvel na lista suspensa, selecione-a.
Ou-
o
Selecione New Connection para iniciar a caixa Add/Modify Connection. Para
obter mais informaes, consulte Add/Modify Connection Dialog Box (General).
5. Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6. Clique Next na pgina Save connection string to the Application Configuration file.
7. Expanda o n Tables na pgina Choose your Database Objects.
8. Selecione a tabela Region, e clique Finish.
O NorthwindDataSet adicionado ao seu projeto e a tabela Region aparece na janela Data
Sources.
Adicionar controles ao formulrio para exibir os dados
Criar os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
Para criar dados ligados a controles no Windows Form
Class
Enumerao
Interface
Classe abstrata
Estrutura
Delegado
Clicar em qualquer clula editvel permite que voc editar o contedo da clula. Suas
alteraes so refletidas em todos os locais que dados so armazenados ou exibido, incluindo
na janela Propriedades do e no cdigo fonte.
Clicar em qualquer clula de uma linha faz a janela Propriedades para exibir as
propriedades para o elemento representados por aquela linha.
Para alterar a largura de uma coluna, arraste o limite no lado direito do cabealho da
coluna at que a coluna esteja da largura desejada.
A janela Detalhes de classe oferece vrios botes para criar novos membros da classe
atual e para navegar entre os membros dos compartimentos na grade da janela Detalhes
classe. Para obter mais informaes, consulte botes janela Detalhes classe.
Usando o teclado
Observao
Os acoplamentos de teclas a seguir foram escolhidos para especificamente para imitar a
experincia de digitar cdigo.
Use estas teclas para navegar a janela Detalhes classe:
Chave Resultado
(vrgula) Se o cursor estiver em uma linha de parmetro, digitar uma vrgula Move o
cursor para o campo Nome do parmetro prximo. If the cursor is in the last
parameter row of a method, it moves the cursor to the <add parameter> field,
which you can use to create a new parameter.
Literalmente se o cursor est em outro lugar na janela Detalhes classe, digitar
uma vrgula adicionar uma vrgula no campo atual.
(ponto-e-
vrgula)
Ou
Parntese de
fechamento ())
Mova o cursor para o campo Nome da prxima linha na grade da janela
Detalhes classe Membro.
Tab
Move o cursor para o campo prximo, primeiro mover da esquerda para direita e
ento superior para baixo. Se o cursor est movendo de um campo em que
voc digitou texto, janela Detalhes classe processa esse texto e o armazena se
ele no produz um erro.
If the cursor is on an empty field such as <add parameter>, Tab moves it to the
first field of the next row.
< espao > Move o cursor para o campo prximo, primeiro mover da esquerda para direita e
ento superior para baixo. If the cursor is on an empty field such as <add
parameter>, it moves to the first field of the next row. Note that <space>
typed immediately after a comma is ignored.
Se o cursor for no campo Resumo, digitar um espao adicionar um caractere
de espao.
Se o cursor est na coluna de uma linha determinada, ocultar digitar um espao
alternar o valor na caixa de seleo Ocultar.
CTRL + TAB Alterna para outra janela do documento. Por exemplo, alterne da janela
Detalhes classe para um arquivo de cdigo aberto.
ESC (ESCAPE) Se voc tiver comeado digitar texto em um campo, pressionando ESC atua
Visual C# Consolidado 1009
como uma chave de desfazer, revertendo o contedo do campo para o valor
anterior. Se a janela Detalhes classe tem foco geral, mas nenhuma clula
especfica tiver foco, pressionar ESC move o foco fora da janela Detalhes
classe.
Seta superiores
e inferiores seta
Essas chaves mova o cursor de linha para outra verticalmente na grade da
janela Detalhes classe.
Seta
esquerda
Se o cursor for na coluna Nome, pressionar a seta esquerda recolhe o n atual
na hierarquia (se ele estiver aberto).
Seta direita Quando o cursor est na coluna Nome, pressionando na SETA PARA DIREITA
expande o n atual na hierarquia (se ele estiver recolhido).
Observaes teis sobre a janela Class Details
Observe as seguintes dicas para usar a janela Detalhes classe.
Clulas editveis e no-editveis
Todas as clulas na janela Detalhes classe so editveis com algumas excees:
O tipo inteiro somente leitura, quando, por exemplo, ele reside em um conjunto de
referncia (consulte Exibio de informaes somente leitura.) Quando voc seleciona a forma
no Class Designer, a janela Detalhes classe exibe seus detalhes em um estado somente
leitura.
Todos os generics ter parmetros somente leitura na janela Detalhes classe. Para alterar
um parmetro genrico, edite o cdigo fonte.
Quando cdigo Um do tipo interrompido (no analisvel), janela Detalhes classe exibe
contedo do tipo como somente leitura.
O cdigo janela Detalhes classe e fonte
Voc pode exibir cdigo fonte clicando com o boto direito do mouse uma forma na janela
Detalhes classe (ou o Class Designer) e, em seguida, clicando em Exibir cdigo. O arquivo de
cdigo de fonte abre e rola para o elemento selecionado.
Quando cdigo Um do tipo interrompido (no analisvel), janela Detalhes classe exibe
contedo do tipo como somente leitura.
Funcionalidade da rea de transferncia na janela Detalhes classe
Voc pode copiar ou recortar campos ou linhas na janela Detalhes classe e col-los em outro tipo.
Voc pode diminuir uma linha somente se ele for no somente para leitura. Quando voc cola a
linha, janela Detalhes classe atribui um novo nome (derivado do nome da linha copiada) para
evitar um conflito.
Visual C# Consolidado 1010
Exibio de informaes somente leitura
Class Designer e a janela Detalhes classe pode exibir o tipos (e membros de tipos) para o
seguinte:
Member Icon
Cada tipo de membro representado por seu prprio cone. Apontando o mouse para o cone
membro exibe o membro assinatura. Clicando no cone membro ou em espao em branco
para a esquerda do cone membro seleciona a linha.
Member Name
A Name coluna em uma linha membro exibe o nome do membro. Este nome tambm exibido
na propriedade Name na janela Propriedades. Voc pode usar essa clula para alterar o nome
de qualquer membro com permisses somente leitura.
Apontando o mouse para o nome do membro exibe o nome do membro se a Name coluna
muito estreita para mostrar o nome completo.
Member Type
A Member Type clula usa IntelliSense (exceto em J#), que permite que voc escolha em uma
lista de todos os tipos disponveis no projeto atual ou projetos referenciados.
Member Modifier
Nesta coluna, voc pode alterar o Modificador de visibilidade de um membro a um Public
(public. (private (internal, Private), Friend ou Default (protected (protected internal),
Protected Friend,) Protected))
<add member>
A ltima linha na janela Detalhes classe contm o texto <add member> na clula Name.
Clicando nesta clula permite que voc criar um novo membro. Para obter mais informaes,
consulte: COMO: Criar um membro.
Member properties in the Properties window
Visual C# Consolidado 1012
A janela Detalhes classe exibe um subconjunto das propriedades membro que so exibidos na
janela Propriedades. Alterar uma propriedade em um local atualiza o valor da propriedade
globalmente, incluindo a exibio de seu valor em outro local.
Summary
A Summary clula expe um resumo das informaes sobre o membro. Clicando na elipse na
clula Summary permite que voc se exibir ou editar informaes sobre o Summary, Return
Type., e Remarks para o membro
Hide
Quando a caixa de seleo Ocultar marcada, o membro no exibido no tipo.
Linhas de parmetro
Parmetros de um membro so agrupados juntos nas linhas imediatamente sob o membro ao
qual eles se aplicam. Linhas parmetro conter os seguintes itens:
Parameter Icon
Trs tipos de cones aparecem esquerda de linhas de parmetro:
o
An opening parenthesis '(' indicates the first parameter of a member.
o
Um parntese de fechamento ') '. indica a linha aps o ltimo parmetro do membro
Esta linha contm as palavras <add parameter>.
o
Um separador de parmetro (. ', ') aparece esquerda de cada parmetro aps a
primeira que uma vrgula,
Parameter Name
A Name coluna em uma linha de parmetro exibe o nome do parmetro. Este nome tambm
exibido na propriedade Name na janela Propriedades. Voc pode usar essa clula para alterar
o nome de qualquer parmetro com permisses somente leitura.
Apontando para o nome do parmetro exibe o nome do parmetro se a Name coluna muito
estreita para mostrar o nome completo.
Parameter Type
A Parameter Type clula usa IntelliSense, que permite que voc escolha em uma lista de
todos os tipos disponveis no projeto atual ou projetos referenciados.
Parameter Modifier
A Modifier clula em uma linha de parmetro aceita e exibe o novo modificador do parmetro.
Para usar a caixa de listagem drop-down para selecionar In, In/Out, insira um novo modificador
de parmetro, e Out.
<add parameter>
A ltima linha de parmetro de um membro contm o texto <add parameter> na clula Name.
Permite que voc criar um novo parmetro clicando nesta clula. Para obter mais informaes,
consulte COMO: Adicionar um parmetro a um mtodo.
Parameter properties in the Properties window
A janela Propriedades exibe as mesmas propriedades de parmetro exibidas na janela
Detalhes classe: Modifier., Name e Type Alterar uma propriedade em um local atualiza o valor
da propriedade globalmente, incluindo a exibio de seu valor em outro local.
COMO: Herdar de um Tipo Genrico
Voc pode usar Class Designer para criar um tipo herdeira de um tipo genrico.
Visual C# Consolidado 1013
Observao
Usando Class Designer, voc pode visualizar existentes tipos genricos, mas voc pode criar
novos tipos genricos. Voc tambm no pode modificar parmetros tipo em existentes tipos
genricos.
Para herdar de um tipo genrico
1. Na Toolbox, selecione a Inheritance linha.
2. Na diagrama de classe, desenhe uma linha de herana do tipo derivado para o tipo base.
(Neste procedimento, o tipo base um tipo genrico.)
Uma linha de herana do tipo derivado apontando para o tipo base ser exibida na
superfcie do design. A Linha de Herana obtm foco e sua exibio propriedades na janela
Propriedades.
A Type Arguments propriedade na janela Properties exibe valores padro para a linha de
herana. Alterar o valor da propriedade Type Arguments para coincidir com os tipos
desejados para o tipo derivado.
COMO: Definir herana entre tipos
Em Class Designer, voc pode definir uma relao de herana entre dois tipos em um diagrama
de classe.
Para definir herana entre dois tipos
1. A partir do projeto no Solution Explorer, abra o arquivo diagrama de classe (.CD).
2. Na caixa de ferramentas Class Designer, clique na Inheritance ferramenta.
3. Mova o ponteiro para o diagrama de classe.
O ponteiro se transformar em um cursor de herana.
4. No diagrama de classe, arraste uma linha a partir da forma que representa o tipo derivado
para a forma que representa o tipo base.
Dica
O cursor de herana mudar para um cursor conectado quando voc pode criar uma relao de
herana. O cursor de herana mudar para um cursor soltar no-quando voc no pode criar uma
relao de herana.
5. Uma linha de herana com uma seta apontando para o tipo base do tipo derivado aparece
entre as duas formas no diagrama. A forma a tipo do tipo derivado tambm exibe o nome do
tipo base.
6. Observe que se a classe pai uma classe abstrata e contm pelo menos um membro
abstract, esses participantes ser automaticamente implementadas em classes abstratas
no-inheriting. Para obter mais informaes, consulte COMO: Implementar uma classe
abstrata.
COMO: Definir associaes entre tipos
Linhas de associao em Class Designer mostrar como classes em um diagrama esto
relacionadas. Uma linha de associao representa uma classe que o tipo de uma propriedade
Visual C# Consolidado 1014
ou campo de outra classe no projeto. Linhas de associao geralmente so usadas para ilustrar
os relacionamentos entre classes no seu projeto mais importantes.
Enquanto voc poderia exibir todos os campos e propriedades como associaes, faz mais
sentido para mostrar somente os membros importantes como associaes, dependendo do que
voc pretende enfatizar no diagrama. (Voc pode mostrar membros menos importantes membros
como normais ou ocult-las totalmente.)
Observao
Class Designer oferece suporte somente associaes unidirecionais.
Para definir um linha de associao no diagrama de classe
1. Na caixa de ferramentas, selecione o Association item.
2. Desenhar uma linha entre as duas formas voc deseja vincular com uma associao.
Uma nova propriedade criada na primeira classe. Essa propriedade exibe como um linha
de associao (no como uma propriedade em um compartimento na forma) com um nome
padro. Seu tipo a forma para o qual a linha de associao aponta.
Para alterar o nome de uma associao
No diagrama de classe, clique com o boto direito do mouse no nome membro e escolha
Hide.
Deixa o membro visvel no compartimento.
Voc tambm pode ocultar um membro usando a Class Details janela, marcando a Hide caixa de
seleo para o membro. Para obter mais informaes, consulte COMO: Abrir a janela Class
Details.
COMO: Adicionar diagramas de classes a projetos
Voc pode comear criando, editando, e classes refactoring e outros tipos em um projeto do
Visual Studio usando Class Designer adicionando um diagrama de classe para o projeto. Voc
pode adicionar a seu projeto, Diagramas de classe em branco ou voc pode criar diagramas de
tipos existentes no seu projeto. Cada projeto pode conter vrios diagramas de classe, til para
visualizar cdigo diferentes reas de projeto.
Para adicionar um diagrama de classe a um projeto
1. No Solution Explorer, clique com o boto direito do mouse no nome do projeto e execute
uma das opes a seguir:
o
Clique em Add New Item.
o
Aponte para Add, e clique em New Item.
A Add New Item caixa de dilogo ser exibida.
2. No painel Modelos da caixa Add New Item de dilogo, execute uma das opes a seguir:
o
Para criar um diagrama de classe com o nome padro, clique duas vezes Class
Diagram.
o
Para criar um diagrama de classe com outro nome, clique em Class Diagram,
alterar o nome na caixa Name, e clique em Add.
O diagrama de classe aberta no Class Designer e aparece como um arquivo com uma
extenso.CD no Solution Explorer dentro da hierarquia do projeto. Caixa de ferramentas
Class Designer aparece e contm formas e linhas voc pode arrastar para o diagrama.
3. Para adicionar vrios diagramas de classe, repita as etapas no procedimento.
Observao que voc tambm pode criar um diagrama de classe para sua soluo,
clicando no Class Diagram boto no Solution Explorer, ou escolhendo View Class
Visual C# Consolidado 1021
Diagram dos menus de contexto de Class e Project Ns de Solution Explorer e
Namespace. e Type Ns de Class View
COMO: Exibir tipos existentes
Em Class Designer, para exibir a estrutura de um tipo existente em um projeto do Visual Studio,
exibindo sua forma correspondente em um diagrama de classe. A forma contm compartimentos
que exibir os membros pertencentes ao tipo.
Voc pode exibir tipos local e referncia. Um tipo local existe em um projeto aberto no momento e
leitura / gravao. Um tipo de referncia existe em outro projeto ou em um conjunto de
referncia e somente leitura.
Para criar novos tipos em diagramas de classe, consulte COMO: Criar Tipos em Diagramas de
Classe.
Para exibir tipos em um projeto em um diagrama de classe
1. Do n de projeto em Solution Explorer, abrir um arquivo diagrama de classe (.CD).
Dica
Se nenhum diagrama de classe existir, adicionar um diagrama de classe ao projeto. Para obter
mais informaes, consulte COMO: Adicionar diagramas de classes a projetos.
2. No n de projeto em Solution Explorer, arraste um arquivo cdigo fonte para o diagrama de
classe.
Formas que representam os tipos definidos no arquivo de cdigo de origem aparecem no
diagrama na posio onde voc arrastado o arquivo.
Tambm pode exibir tipos no projeto, arrastando um ou mais tipos do n de projeto em Class View
para o diagrama de classe.
Dica
Se no estiver aberto, Exibir Classe Abrir exibir classe no menu View. Para obter mais
informaes sobre modo classe, consulte Exibir classes e seus membros.
Para exibir tipos nos locais padro no diagrama, selecione um ou mais tipos no modo de classe,
clique com o boto direito do mouse os tipos selecionados, e escolha View Class Diagram.
Observao
Se um diagrama de classe fechado contendo o tipo j existe no projeto, o diagrama de classe
abrir para exibir a forma tipo. No entanto, se nenhum diagrama de classe contendo o tipo existir
no projeto, Class Designer cria um novo diagrama de classe no projeto e abre o arquivo para
exibir o tipo.
Visual C# Consolidado 1022
Quando voc primeiro exibir um tipo no diagrama, sua forma aparece recolhida por padro. Voc
pode expandir a forma para ver o respectivo contedo. Para obter mais informaes, consulte
COMO: Exibir compartimentos em formas de tipo.
Para exibir um projeto ou espao para nome em um diagrama de classe
No Solution Explorer (para projetos) ou exibio classe (para espaos para nome) clique
com o boto direito do mouse no projeto ou espao para nome e escolha Exibir no diagrama.
Um diagrama classe populated auto- criado.
Ententendo um cdigo que voc no escreveu
Voc pode usar o Class Designer como uma ferramenta para ajud-lo a entender classes e tipos
escritos por outras pessoas. A ferramenta exibe uma representao grfica do cdigo. Voc pode
personalizar esta exibio para atender s suas preferncias; por exemplo, voc pode mostrar
mais detalhes ou menos, grupo e filtrar membros de tipos, explicitamente ocultar membros, e
exibir linhas que indicam relacionamentos, como a herana.
Tambm pode optar por visualizar o mesmo projeto de maneiras diferentes. Para fazer isso, crie
vrios diagramas de classe no projeto e ento personalizar cada uma para enfocar detalhes
diferentes. Para obter mais informaes, consulte COMO: Adicionar diagramas de classes a
projetos.
COMO: Agrupar membros de tipo
Em Class Designer, voc pode agrupar membros tipo em seus compartimentos no diagrama de
classe por seu modificador de acesso, tipo, como Public ou Private. ou alfabeticamente
Para membros de grupo de um tipo
1. No projeto no Solution Explorer, abra o diagrama de classe para o tipo.
2. No menu Class Diagram, escolha a ordem de grupo que voc deseja.
Todas as formas no diagrama atual Atualizar seus compartimentos para refletir a ordem
selecionada.
Voc tambm pode definir a ordem de grupo clicando com o boto direito do mouse um local em
branco no diagrama e selecionando uma ordem de grupo a partir do menu de atalho, definindo a
Group By propriedade para o diagrama na janela Propriedades, ou na barra de ferramentas Class
Designer.
COMO: Adicionar comentrios a diagramas de classe
Voc pode usar formas de comentrio para anotar diagramas de classe. Um forma de comentrio
possui uma propriedade, Text,. no qual voc pode digitar texto Formas comentrio existem
apenas na superfcie do diagrama e no no cdigo.
Um comentrio reside em modo de exibio diagrama de classe em Class Designer; Se voc
abrir uma segunda diagrama de classe at o mesmo projeto, comentrios voc criou no primeiro
modo so no visveis. Se voc excluir um diagrama, todos os comentrios continha tambm
sero excludos.
Voc pode redimensionar um forma de comentrio mas no pode alterar outros aspectos da sua
aparncia, como seu tamanho cor, fonte, ou fonte de plano de fundo.
Visual C# Consolidado 1023
Para adicionar um comentrio
1. Arraste um comentrio de at o diagrama de classe. o Class Designer Toolbox
2. Clique no novo forma de comentrio no diagrama e digite o texto desejado.
Personalizando diagramas de classe
Voc pode alterar a maneira que diagramas de classe exiba informaes sobre o projeto. Por
exemplo, voc pode alterar tamanho aparente todo o diagrama clicando na barra de ferramentas
Class Designer. e Zoom Out botes (ou por clicando uma quantidade Zoom na caixa de listagem)
a Zoom In Definir o zoom no afeta como um diagrama de classe impresso.
Observao
No possvel alterar a terminologia exibida para tipos do o projeto na superfcie do diagrama.
Terminologia dependente sobre a linguagem do projeto.
Os mtodos disponveis para alterar diagramas so resumidos na lista a seguir:
Ocultar linha de associao. Com o boto direito do mouse uma linha de associao exibe
um menu de contexto. Em seguida, se voc clicar em Show as Property, a linha removida
do diagrama, mas a associao aparecer como uma propriedade em uma forma. Consulte
COMO: Alternar entre notao de membro e notao de associao.
Mostrar e ocultar formas. Para ocultar forma um tipo, clique com o boto direito do
mouse em sua rea de cabealho e clique em Remove from Diagram. Para mostr-la
novamente, arraste-a para o diagrama de Class View.
Mostrar e ocultar membros tipo. Usando o Class Designer ou janela Detalhes classe, voc
pode mostrar membros um tipo ou ocult-las Para obter mais informaes, consulte COMO:
Exibir membros de tipo.
Expandir e recolher formas. Para recolher uma forma, clique com boto direito mouse sua
rea de cabealho e clique em Collapse. Isso oculta todos os compartimentos a forma. Para
expandir a forma, clique com o boto direito do mouse e clique em Expand.
Agrupar e classificar membros. Voc pode agrupar membros um tipo de vrias maneiras.
Para obter mais informaes, consulte COMO: Agrupar membros de tipo.
Visual C# Consolidado 1024
COMO: Copiar elementos de diagrama de classe para um
documento do Microsoft Office
Voc pode copiar um, vrios ou todos as formas de um diagrama de classe em outros
documentos. Se a operao de cpia duplica a imagem visual da forma ou seu cdigo subjacente
de depende do tipo de documento no qual col-lo.
Para copiar um nico elemento
O mtodo base seja substitudo deve ser virtual, abstract, ou substituir. (Ele no pode ser
no-virtual ou esttico.)
Para substituir um membro
1. No diagrama de classe, clique com o boto direito do mouse em uma forma de classe, e
escolha Intellisense DEPOIS Override Members.
Ser exibida uma caixa de dilogo Exibir membros substituvel.
2. Na lista, escolha um membro.
Um membro com o mesmo nome, modificador de acesso, valor de retorno, e assinatura
aparecer como selecionado na classe, e sua Override propriedade definida como True.
COMO: Renomear tipos e membros de tipo
Em Class Designer, voc pode renomear um tipo ou um membro de um tipo no diagrama de
classe ou na janela Propriedades do. Na janela Detalhes classe, voc pode editar o nome do
membro mas no um tipo. Renomear um tipo ou membro tipo propaga para todas as janelas e
locais de cdigo onde o nome antigo apareceu.
Para renomear um nome no Class Designer
1. No diagrama de classe, selecione o tipo ou membro.
O nome do membro se tornar editvel.
2. Digite o novo nome para o tipo ou membro tipo
Para renomear um nome na janela Detalhes classe
1. Para exibir a janela Detalhes classe, clique com o boto direito do mouse no tipo ou
membro Tipo e escolha Class Details.
A janela Detalhes classe aparece.
2. Na coluna Name, edite o nome do membro do tipo
3. Para mover o foco fora da clula, pressione a tecla Enter ou clique na clula fora do.
Observao
Na janela Detalhes classe, voc pode editar o nome do membro mas no um tipo.
Para renomear um nome na janela Propriedades
1. No diagrama de classe ou na janela Detalhes classe, clique com o boto direito do mouse
no tipo ou membro e escolha Properties.
A janela Propriedades aparece e exibe propriedades para o tipo ou membro tipo.
2. Na propriedade Name, alterar o nome do tipo ou membro tipo.
O novo nome propaga para todas as janelas e locais de cdigo no projeto atual onde o
nome antigo apareceu.
Visual C# Consolidado 1026
COMO: Mover um membro de tipo de um tipo para outro
Usando Class Designer, pode mover um membro Tipo de um tipo para outro tipo, se ambas
estiverem visveis no diagrama de classe atual.
Para mover um membro Tipo de um tipo para outro
1. Em um tipo que esteja visvel na superfcie de design, clique com o boto direito do mouse
no membro voc deseja mova para outro tipo, e clique Cut.
2. Clique com o boto direito do mouse no tipo de destino e clique em Paste.
A propriedade ser removido do tipo de fonte e aparece em Tipo de destino.
COMO: Implementar uma interface
Em Class Designer, voc pode implementar uma interface no diagrama de classe conectando-lo a
uma classe que fornece cdigo para os mtodos de interface. Class Designer gera um
implementao de interface e exibe a relao entre a interface e a classe como uma relao de
herana. Voc pode implementar uma interface desenhando uma Linha de Herana entre a
interface e a classe ou arrastando a interface da exibio classe.
Dica
Voc pode criar interfaces da mesma maneira que criar outros tipos. Se a interface existe mas no
exibido no diagrama de classe, em seguida, primeiro exiba-o. Para obter mais informaes,
consulte COMO: Criar Tipos em Diagramas de Classe e COMO: Exibir tipos existentes.
Para implementar uma interface desenhando uma Linha de Herana
1. Na diagrama de classe, exibir a interface e a classe ser que implementam a interface.
2. Desenhe uma linha de herana da classe e a interface.
Um pirulito aparece anexado classe e um rtulo com o nome da interface identifica a
relao de herana. O Visual Studio gera stubs para todos os membros de interface.
Para obter mais informaes, consulte COMO: Definir herana entre tipos.
Para implementar uma interface a partir da janela Exibir Classe
1. Na diagrama de classe, exibir a classe que voc deseja que implementam a interface.
2. Abra Exibir Classe e localize a interface.
Dica
Se no estiver aberto, Exibir Classe Abrir exibir classe no menu View. Para obter mais
informaes sobre modo classe, consulte Exibir classes e seus membros.
3. Arraste o n interface at a forma de classe no diagrama.
Um pirulito aparece anexado classe e um rtulo com o nome da interface identifica a
relao de herana. O Visual Studio gera stubs para todos os membros de interface; neste
momento, a interface implementada.
Visual C# Consolidado 1027
COMO: Implementar uma classe abstrata
Voc pode usar Class Designer para implementar uma classe abstrata.
O seguinte para este procedimento, ser adotado:
A classe abstrata a classe base em uma relao de herana com outra classe. (A classe
derivada no precisa ser uma classe abstrata.)
Implementar uma classe abstrato
Clique com o boto direito a classe derivada em seguida, escolha Intellisense, escolha
Implement Abstract Class. Todos os membros da classe base abstratos so implementados
na classe derivada.
COMO: Extrair para interface (C# somente)
Voc pode extrair um ou mais membros pblicos de um tipo em uma nova interface.
Para extrair membros para uma nova interface
1. Na Class Designer, clique com o boto direito do mouse o tipo que contm o membro ou
membros voc deseja extrair, aponte para Refactor, e clique em Extract Interface.
A caixa de dilogo extrair interface exibe valores padro para o nome da interface e o nome
do arquivo de cdigo no qual ela vai ser declarada. Aceite os valores padro ou alter-las.
2. No painel Select public members to form interface, marque ou desmarque a caixa de
seleo ao lado os membros que voc deseja extrair para a nova interface, e clique em OK.
Uma nova interface criado, e o arquivo que abriga ele adicionado ao projeto.
COMO: Reordenar parmetros (C# somente)
Na Class Designer, voc pode alterar a ordem dos parmetros de mtodo em tipos
Para alterar a ordem dos parmetros
1. No diagrama de classe, expanda a forma tipo e o Methods compartimento.
2. No Methods compartimento, clique com o boto direito do mouse com os parmetros voc
deseja, aponte para Refactor, e escolha Reorder Parameters o mtodo.
A Reorder Parameters caixa de dilogo ser exibida.
3. Na caixa Reorder Parameters de dilogo, mova os parmetros para a ordem voc deseja,
e clique em OK.
As alteraes ordem de parmetro no cdigo e na forma no diagrama de classe.
COMO: Criar um membro
Voc pode criar um membro usando qualquer uma das seguintes ferramentas:
Projeto de Classes
Inicializa uma instncia da classe DemoControl quando ele criado pelo Toolbox.
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using
System.Drawing.Design; using System.Data; using System.Reflection; using System.Runtime.Serialization;
using System.Text; using System.Windows.Forms; using System.Windows.Forms.Design; using
System.Windows.Forms.Design.Behavior; public class Form1 : Form { private DemoControl demoControl1;
private System.ComponentModel.IContainer components = null; public Form1() { InitializeComponent(); }
Visual C# Consolidado 1031
protected override void Dispose(bool disposing) { if (disposing && (components != null)) {
components.Dispose(); } base.Dispose(disposing); } [STAThread] static void Main() {
Application.EnableVisualStyles(); Application.Run(new Form1()); } #region Windows Form Designer
generated code private void InitializeComponent() { this.demoControl1 = new DemoControl();
this.SuspendLayout(); // // demoControl1 // this.demoControl1.AutoSize = true;
this.demoControl1.BackColor = System.Drawing.Color.Chartreuse; this.demoControl1.Location = new
System.Drawing.Point(0, 0); this.demoControl1.Name = "demoControl1"; this.demoControl1.Size = new
System.Drawing.Size(232, 14); this.demoControl1.TabIndex = 0; this.demoControl1.Text = "This text was set
by CreateComponentsCore."; // // Form1 // this.ClientSize = new System.Drawing.Size(492, 482);
this.Controls.Add(this.demoControl1); this.Name = "Form1"; this.Text = "r"; this.ResumeLayout(false);
this.PerformLayout(); } #endregion } // This control is derived from UserControl, with only a little // added
logic for the Toolbox interaction. // // All of the custom designer code is implemented in the //
DemoControlDesigner class. [DesignerAttribute(typeof(DemoControlDesigner))]
[ToolboxItem(typeof(DemoToolboxItem))] public class DemoControl : Label { private
System.ComponentModel.IContainer components = null; public DemoControl() { InitializeComponent();
MessageBox.Show("DemoControl", "Constructor"); } protected override void Dispose(bool disposing) { if
(disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void
InitializeComponent() { // // DemoControl // this.Name = "DemoControl"; } // Toolbox items must be
serializable. [Serializable]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Inheritan
ceDemand, Name="FullTrust")]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDem
and, Name="FullTrust")] class DemoToolboxItem : ToolboxItem { // The add components dialog in VS looks
for a public // ctor that takes a type. public DemoToolboxItem(Type toolType) : base(toolType) { } // And
you must provide this special constructor for serialization. // If you add additional data to MyToolboxItem
that you // want to serialize, you may override Deserialize and // Serialize methods to add that data.
DemoToolboxItem(SerializationInfo info, StreamingContext context) { Deserialize(info, context); } // This
implementation sets the new control's Text and // AutoSize properties. protected override IComponent[]
CreateComponentsCore( IDesignerHost host, IDictionary defaultValues) { IComponent[] comps =
base.CreateComponentsCore(host, defaultValues); // The returned IComponent array contains a single //
component, which is an instance of DemoControl. ((DemoControl)comps[0]).Text = "This text was set by
CreateComponentsCore."; ((DemoControl)comps[0]).AutoSize = true; return comps; } } } // This class
demonstrates a designer that attaches to various // services and changes the properties exposed by the
control // being designed.
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name =
"FullTrust")] public class DemoControlDesigner : ControlDesigner { // This member backs the Locked
property. private bool lockedValue = false; // This is the collection of DesignerActionLists that // defines the
smart tags offered on the control. private DesignerActionListCollection actionLists = null; // This Timer is
created when you select the Create Timer // smart tag item. private Timer createdTimer = null; // These are
the services which DemoControlDesigner will use. private DesignerActionService actionService = null;
private DesignerActionUIService actionUiService = null; private IComponentChangeService changeService =
null; private IDesignerEventService eventService = null; private IDesignerHost host = null; private
IDesignerOptionService optionService = null; private IEventBindingService eventBindingService = null;
private IExtenderListService listService = null; private IReferenceService referenceService = null; private
ISelectionService selectionService = null; private ITypeResolutionService typeResService = null; private
IComponentDiscoveryService componentDiscoveryService = null; private IToolboxService toolboxService =
Visual C# Consolidado 1032
null; private UndoEngine undoEng = null; public DemoControlDesigner() {
MessageBox.Show("DemoControlDesigner", "Constructor"); } // The Dispose method override is
implemented so event handlers // can be removed. This prevents objects from lingering in // memory
beyond the desired lifespan. protected override void Dispose(bool disposing) { if (disposing) { if
(this.changeService != null) { // Unhook event handlers. this.changeService.ComponentChanged -= new
ComponentChangedEventHandler( ChangeService_ComponentChanged);
this.changeService.ComponentAdded -= new ComponentEventHandler( ChangeService_ComponentAdded);
this.changeService.ComponentRemoved -= new ComponentEventHandler(
changeService_ComponentRemoved); } if (this.eventService != null) {
this.eventService.ActiveDesignerChanged -= new ActiveDesignerEventHandler(
eventService_ActiveDesignerChanged); } if (this.selectionService != null) {
this.selectionService.SelectionChanged -= new EventHandler( selectionService_SelectionChanged); } }
base.Dispose(disposing); } // This method initializes the designer. public override void
Initialize(IComponent component) { base.Initialize(component); // Connect to various designer services.
InitializeServices(); // Set up the BackColor value that will be serialized. // This is the shadowed property on
the designer. this.BackColor = Color.Chartreuse; // Set up the BackColor value that will be displayed.
this.Control.BackColor = Color.AliceBlue; } // This method creates the DesignerActionList on demand,
causing // smart tags to appear on the control being designed. public override DesignerActionListCollection
ActionLists { get { if (null == actionLists) { actionLists = new DesignerActionListCollection();
actionLists.Add( new DemoActionList(this.Component)); } return actionLists; } } // This utility method
connects the designer to various // services it will use. private void InitializeServices() { // Acquire a
reference to DesignerActionService. this.actionService = GetService(typeof(DesignerActionService)) as
DesignerActionService; // Acquire a reference to DesignerActionUIService. this.actionUiService =
GetService(typeof(DesignerActionUIService)) as DesignerActionUIService; // Acquire a reference to
IComponentChangeService. this.changeService = GetService(typeof(IComponentChangeService)) as
IComponentChangeService; // Hook the IComponentChangeService events. if (this.changeService != null) {
this.changeService.ComponentChanged += new ComponentChangedEventHandler(
ChangeService_ComponentChanged); this.changeService.ComponentAdded += new
ComponentEventHandler( ChangeService_ComponentAdded); this.changeService.ComponentRemoved +=
new ComponentEventHandler( changeService_ComponentRemoved); } // Acquire a reference to
ISelectionService. this.selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // Hook
the SelectionChanged event. if (this.selectionService != null) { this.selectionService.SelectionChanged +=
new EventHandler(selectionService_SelectionChanged); } // Acquire a reference to IDesignerEventService.
this.eventService = GetService(typeof(IDesignerEventService)) as IDesignerEventService; if
(this.eventService != null) { this.eventService.ActiveDesignerChanged += new ActiveDesignerEventHandler(
eventService_ActiveDesignerChanged); } // Acquire a reference to IDesignerHost. this.host =
GetService(typeof(IDesignerHost)) as IDesignerHost; // Acquire a reference to IDesignerOptionService.
this.optionService = GetService(typeof(IDesignerOptionService)) as IDesignerOptionService; // Acquire a
reference to IEventBindingService. this.eventBindingService = GetService(typeof(IEventBindingService)) as
IEventBindingService; // Acquire a reference to IExtenderListService. this.listService =
GetService(typeof(IExtenderListService)) as IExtenderListService; // Acquire a reference to
IReferenceService. this.referenceService = GetService(typeof(IReferenceService)) as IReferenceService; //
Acquire a reference to ITypeResolutionService. this.typeResService =
GetService(typeof(ITypeResolutionService)) as ITypeResolutionService; // Acquire a reference to
IComponentDiscoveryService. this.componentDiscoveryService =
GetService(typeof(IComponentDiscoveryService)) as IComponentDiscoveryService; // Acquire a reference to
Visual C# Consolidado 1033
IToolboxService. this.toolboxService = GetService(typeof(IToolboxService)) as IToolboxService; // Acquire a
reference to UndoEngine. this.undoEng = GetService(typeof(UndoEngine)) as UndoEngine; if (this.undoEng
!= null) { MessageBox.Show("UndoEngine"); } } // This is the shadowed property on the designer. // This
value will be serialized instead of the // value of the control's property. public Color BackColor { get { return
(Color)ShadowProperties["BackColor"]; } set { if (this.changeService != null) { PropertyDescriptor
backColorDesc = TypeDescriptor.GetProperties(this.Control)["BackColor"];
this.changeService.OnComponentChanging( this.Control, backColorDesc);
this.ShadowProperties["BackColor"] = value; this.changeService.OnComponentChanged( this.Control,
backColorDesc, null, null); } } } // This is the property added by the designer in the // PreFilterProperties
method. private bool Locked { get { return lockedValue; } set { lockedValue = value; } } // The
PreFilterProperties method is where you can add or remove // properties from the component being
designed. // // In this implementation, the Visible property is removed, // the BackColor property is
shadowed by the designer, and // the a new property, called Locked, is added. protected override void
PreFilterProperties(IDictionary properties) { // Always call the base PreFilterProperties implementation //
before you modify the properties collection. base.PreFilterProperties(properties); // Remove the visible
property. properties.Remove("Visible"); // Shadow the BackColor property. PropertyDescriptor
propertyDesc = TypeDescriptor.CreateProperty( typeof(DemoControlDesigner),
(PropertyDescriptor)properties["BackColor"], new Attribute[0]); properties["BackColor"] = propertyDesc; //
Create the Locked property. properties["Locked"] = TypeDescriptor.CreateProperty(
typeof(DemoControlDesigner), "Locked", typeof(bool), CategoryAttribute.Design, DesignOnlyAttribute.Yes);
} // The PostFilterProperties method is where you modify existing // properties. You must only use this
method to modify existing // items. Do not add or remove items here. Also, be sure to // call
base.PostFilterProperties(properties) after your filtering // logic. // // In this implementation, the Enabled
property is hidden from // any PropertyGrid or Properties window. This is done by // creating a copy of the
existing PropertyDescriptor and // attaching two new Attributes: Browsable and EditorBrowsable. protected
override void PostFilterProperties(IDictionary properties) { PropertyDescriptor pd = properties["Enabled"]
as PropertyDescriptor; pd = TypeDescriptor.CreateProperty( pd.ComponentType, pd, new Attribute[2] { new
BrowsableAttribute(false), new EditorBrowsableAttribute(EditorBrowsableState.Never)});
properties[pd.Name] = pd; // Always call the base PostFilterProperties implementation // after you modify
the properties collection. base.PostFilterProperties(properties); } #region Event Handlers void
eventService_ActiveDesignerChanged( object sender, ActiveDesignerEventArgs e) { if (e.NewDesigner !=
null) { MessageBox.Show( e.NewDesigner.ToString(), "ActiveDesignerChanged"); } } void
ChangeService_ComponentChanged( object sender, ComponentChangedEventArgs e) { string msg =
String.Format( "{0}, {1}", e.Component, e.Member); MessageBox.Show(msg, "ComponentChanged"); } void
ChangeService_ComponentAdded( object sender, ComponentEventArgs e) { MessageBox.Show(
e.Component.ToString(), "ComponentAdded"); } void changeService_ComponentRemoved( object sender,
ComponentEventArgs e) { MessageBox.Show( e.Component.ToString(), "ComponentRemoved"); } void
selectionService_SelectionChanged( object sender, EventArgs e) { if (this.selectionService != null) { if
(this.selectionService.PrimarySelection == this.Control) { MessageBox.Show( this.Control.ToString(),
"SelectionChanged"); } } } #endregion // This class defines the smart tags that appear on the control // that
is being designed. internal class DemoActionList : System.ComponentModel.Design.DesignerActionList { //
Cache a reference to the designer host. private IDesignerHost host = null; // Cache a reference to the control.
private DemoControl relatedControl = null; // Cache a reference to the designer. private
DemoControlDesigner relatedDesigner = null; //The constructor associates the control //with the smart tag
list. public DemoActionList(IComponent component) : base(component) { this.relatedControl = component
as DemoControl; this.host = this.Component.Site.GetService(typeof(IDesignerHost)) as IDesignerHost;
Visual C# Consolidado 1034
IDesigner dcd = host.GetDesigner(this.Component); this.relatedDesigner = dcd as DemoControlDesigner; }
// This method creates and populates the // DesignerActionItemCollection which is used to // display smart
tag items. public override DesignerActionItemCollection GetSortedActionItems() {
DesignerActionItemCollection items = new DesignerActionItemCollection(); // If the Timer component has
not been created, show the // "Create Timer" DesignerAction item. // // If the Timer component exists, show
the timer-related // options. if (this.relatedDesigner.createdTimer == null) { items.Add(new
DesignerActionMethodItem( this, "CreateTimer", "Create Timer", true)); } else { items.Add(new
DesignerActionMethodItem( this, "ShowEventHandlerCode", "Show Event Handler Code", true));
items.Add(new DesignerActionMethodItem( this, "RemoveTimer", "Remove Timer", true)); } items.Add(new
DesignerActionMethodItem( this, "GetExtenderProviders", "Get Extender Providers", true)); items.Add(new
DesignerActionMethodItem( this, "GetDemoControlReferences", "Get DemoControl References", true));
items.Add(new DesignerActionMethodItem( this, "GetPathOfAssembly", "Get Path of Executing Assembly",
true)); items.Add(new DesignerActionMethodItem( this, "GetComponentTypes", "Get ScrollableControl
Types", true)); items.Add(new DesignerActionMethodItem( this, "GetToolboxCategories", "Get Toolbox
Categories", true)); items.Add(new DesignerActionMethodItem( this, "SetBackColor", "Set Back Color",
true)); return items; } // This method creates a Timer component using the //
IDesignerHost.CreateComponent method. It also // creates an event handler for the Timer component's //
tick event. private void CreateTimer() { if (this.host != null) { if (this.relatedDesigner.createdTimer == null) {
// Create and configure the Timer object. this.relatedDesigner.createdTimer =
this.host.CreateComponent(typeof(Timer)) as Timer; Timer t = this.relatedDesigner.createdTimer; t.Interval
= 1000; t.Enabled = true; EventDescriptorCollection eventColl = TypeDescriptor.GetEvents(t, new
Attribute[0]); if (eventColl != null) { EventDescriptor ed = eventColl["Tick"] as EventDescriptor; if (ed !=
null) { PropertyDescriptor epd = this.relatedDesigner.eventBindingService.GetEventProperty(ed);
epd.SetValue(t, "timer_Tick"); } } this.relatedDesigner.actionUiService.Refresh(this.relatedControl); } } } //
This method uses the IEventBindingService.ShowCode // method to start the Code Editor. It places the caret
// in the timer_tick method created by the CreateTimer method. private void ShowEventHandlerCode() {
Timer t = this.relatedDesigner.createdTimer; if (t != null) { EventDescriptorCollection eventColl =
TypeDescriptor.GetEvents(t, new Attribute[0]); if (eventColl != null) { EventDescriptor ed =
eventColl["Tick"] as EventDescriptor; if (ed != null) { this.relatedDesigner.eventBindingService.ShowCode(t,
ed); } } } } // This method uses the IDesignerHost.DestroyComponent method // to remove the Timer
component from the design environment. private void RemoveTimer() { if (this.host != null) { if
(this.relatedDesigner.createdTimer != null) { this.host.DestroyComponent(
this.relatedDesigner.createdTimer); this.relatedDesigner.createdTimer = null;
this.relatedDesigner.actionUiService.Refresh( this.relatedControl); } } } // This method uses
IExtenderListService.GetExtenderProviders // to enumerate all the extender providers and display them //
in a MessageBox. private void GetExtenderProviders() { if (this.relatedDesigner.listService != null) {
StringBuilder sb = new StringBuilder(); IExtenderProvider[] providers =
this.relatedDesigner.listService.GetExtenderProviders(); for (int i = 0; i < providers.Length; i++) {
sb.Append(providers[i].ToString()); sb.Append("\r\n"); } MessageBox.Show( sb.ToString(), "Extender
Providers"); } } // This method uses the IReferenceService.GetReferences method // to enumerate all the
instances of DemoControl on the // design surface. private void GetDemoControlReferences() { if
(this.relatedDesigner.referenceService != null) { StringBuilder sb = new StringBuilder(); object[] refs =
this.relatedDesigner.referenceService.GetReferences(typeof(DemoControl)); for (int i = 0; i < refs.Length;
i++) { sb.Append(refs[i].ToString()); sb.Append("\r\n"); } MessageBox.Show( sb.ToString(), "DemoControl
References"); } } // This method uses the ITypeResolutionService.GetPathOfAssembly // method to display
the path of the executing assembly. private void GetPathOfAssembly() { if
Visual C# Consolidado 1035
(this.relatedDesigner.typeResService != null) { System.Reflection.AssemblyName name =
System.Reflection.Assembly.GetExecutingAssembly().GetName(); MessageBox.Show(
this.relatedDesigner.typeResService.GetPathOfAssembly(name), "Path of executing assembly"); } } // This
method uses the IComponentDiscoveryService.GetComponentTypes // method to find all the types that
derive from // ScrollableControl. private void GetComponentTypes() { if
(this.relatedDesigner.componentDiscoveryService != null) { ICollection components =
this.relatedDesigner.componentDiscoveryService.GetComponentTypes(host, typeof(ScrollableControl)); if
(components != null) { if (components.Count > 0) { StringBuilder sb = new StringBuilder(); IEnumerator e =
components.GetEnumerator(); while (e.MoveNext()) { sb.Append(e.Current.ToString()); sb.Append("\r\n");
} MessageBox.Show( sb.ToString(), "Controls derived from ScrollableControl"); } } } } // This method uses
the IToolboxService.CategoryNames // method to enumerate all the categories that appear // in the Toolbox.
private void GetToolboxCategories() { if (this.relatedDesigner.toolboxService != null) { StringBuilder sb =
new StringBuilder(); CategoryNameCollection names = this.relatedDesigner.toolboxService.CategoryNames;
foreach (string name in names) { sb.Append(name.ToString()); sb.Append("\r\n"); }
MessageBox.Show(sb.ToString(), "Toolbox Categories"); } } // This method sets the shadowed BackColor
property on the // designer. This is the value that is serialized by the // design environment. private void
SetBackColor() { ColorDialog d = new ColorDialog(); if (d.ShowDialog() == DialogResult.OK) {
this.relatedDesigner.BackColor = d.Color; } } } }
Voc pode criar e configurar um componente, solicitando uma instncia do ambiente de
desenvolvimento e definindo suas propriedades. Voc tambm pode configurar um componente
quando ela criada da Toolbox.
Criando e configurando um componente programaticamente
O exemplo de cdigo a seguir chama o CreateComponent mtodo para criar um Timer
componente. O Timer componente inicializado, definindo e Enabled Propriedades. seu Interval
Este exemplo tambm usa o GetEventProperty mtodo para anexar um manipulador de eventos.
C#
// This method creates a Timer component using the // IDesignerHost.CreateComponent method. It also //
creates an event handler for the Timer component's // tick event. private void CreateTimer() { if (this.host !=
null) { if (this.relatedDesigner.createdTimer == null) { // Create and configure the Timer object.
this.relatedDesigner.createdTimer = this.host.CreateComponent(typeof(Timer)) as Timer; Timer t =
this.relatedDesigner.createdTimer; t.Interval = 1000; t.Enabled = true; EventDescriptorCollection eventColl
= TypeDescriptor.GetEvents(t, new Attribute[0]); if (eventColl != null) { EventDescriptor ed =
eventColl["Tick"] as EventDescriptor; if (ed != null) { PropertyDescriptor epd =
this.relatedDesigner.eventBindingService.GetEventProperty(ed); epd.SetValue(t, "timer_Tick"); } }
this.relatedDesigner.actionUiService.Refresh(this.relatedControl); } } }
Remover um componente programaticamente
O exemplo de cdigo a seguir chama o DestroyComponent mtodo para remover um Timer
componente do ambiente de design.
C#
// This method uses the IDesignerHost.DestroyComponent method // to remove the Timer component from
the design environment. private void RemoveTimer() { if (this.host != null) { if
Visual C# Consolidado 1036
(this.relatedDesigner.createdTimer != null) { this.host.DestroyComponent(
this.relatedDesigner.createdTimer); this.relatedDesigner.createdTimer = null;
this.relatedDesigner.actionUiService.Refresh( this.relatedControl); } } }
Inicializar um componente criado por caixa de ferramentas
Voc tambm pode configurar componentes quando eles so criados pela Toolbox. Voc
implementar um personalizado ToolboxItem e substituir o CreateComponentsCore mtodo.
C#
// Toolbox items must be serializable. [Serializable]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Inheritan
ceDemand, Name="FullTrust")]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDem
and, Name="FullTrust")] class DemoToolboxItem : ToolboxItem { // The add components dialog in VS looks
for a public // ctor that takes a type. public DemoToolboxItem(Type toolType) : base(toolType) { } // And
you must provide this special constructor for serialization. // If you add additional data to MyToolboxItem
that you // want to serialize, you may override Deserialize and // Serialize methods to add that data.
DemoToolboxItem(SerializationInfo info, StreamingContext context) { Deserialize(info, context); } // This
implementation sets the new control's Text and // AutoSize properties. protected override IComponent[]
CreateComponentsCore( IDesignerHost host, IDictionary defaultValues) { IComponent[] comps =
base.CreateComponentsCore(host, defaultValues); // The returned IComponent array contains a single //
component, which is an instance of DemoControl. ((DemoControl)comps[0]).Text = "This text was set by
CreateComponentsCore."; ((DemoControl)comps[0]).AutoSize = true; return comps; } }
Anexar o componente a sua ToolboxItem Classe usando ToolboxItemAttribute.
C#
[DesignerAttribute(typeof(DemoControlDesigner))] [ToolboxItem(typeof(DemoToolboxItem))] public class
DemoControl : Label {
Compilando o cdigo
Quando voc faz alteraes aos aspectos em tempo de criao de um componente, voc
precisar recriar o projeto de controle. Alm disso, se no houver outro projeto Windows Forms
que aberto e usa esse componente, voc provavelmente precisar atualizar o projeto para ver
as alteraes. Normalmente, voc precisar fechar e reabrir a janela de design que contm o
componente.
Como: Acessar suporte em tempo de design no Windows
Forms
Componentes personalizados e controles so designable, que significa tm configuraes que os
usurios podem configurar com uma interface grfica do usurio (UI) em tempo de design. Essas
configuraes geralmente afetam instncias do componente em tempo de execuo.
Se sua classe implementa a IComponent interface, ele pode participar de um ambiente de criao
como Visual Studio.
Visual C# Consolidado 1037
Para acessar o suporte em tempo de criao fornecido pelo .NET Framework, voc precisa
concluir as etapas a seguir.
Para acessar suporte Design-time
1. Adicione uma referncia ao conjunto System.Design.
2. Se voc estiver implementando ou PropertyGrid controle, importar espao para nome
System.Drawing.Design. ou se o componente est interagindo com um UITypeEditor um
Toolbox
C#
using System.Drawing.Design;
1. Se voc estiver implementando uma experincia em tempo de design personalizada para o
componente, importar espao para nome System.ComponentModel.Design.
C#
using System.ComponentModel.Design;
1. Se voc estiver implementando uma experincia em tempo de design personalizada para o
controle Windows Forms, importar espao para nome System.Windows.Forms.Design. Voc
pode criar marcas inteligentes ou um designer personalizado para o componente COM tipos
no espao para esse nome.
C#
using System.Windows.Forms.Design;
Consulte tambm
COMO: Implementar um provedor Extender HelpLabel
Um Provedor Extender um componente que fornece propriedades para outros componentes.
Por exemplo, o ToolTip controle implementado como um provedor Extender. Quando voc
adiciona um ToolTip controle para a Form, todos. outros controles na Form ter uma ToolTip
propriedade adicionada sua lista Propriedades
O exemplo a seguir demonstra como criar um provedor Extender ao criar o HelpLabel controle. Ela
mostra a implementao de mtodo CanExtend e a HelpText propriedade. O CanExtend mtodo
usado pelo Windows Forms Designer para determinar se deve estender essa propriedade para
um determinado controle. O HelpLabel controle estende a HelpText propriedade para uso com os
controles em um formulrio. O texto de ajuda para um controle exibido em um painel quando o
controle tem foco.
O exemplo inclui um designer aninhada que descrita em COMO: Implementar um designer para
um controle.
O exemplo demonstra os seguintes itens:
O CanExtend mtodo retorna true para qualquer controle exceto HelpLabel, porque ele
no significativo para estender uma propriedade no prprio.
Visual C# Consolidado 1038
tem HelpLabel um mtodo denominado GetHelpText que obtm a propriedade que HelpLabel
torna disponvel para outros controles. O SetHelpText mtodo define o valor da propriedade.
Exemplo
A HostApp classe usa o HelpLabel controle em um formulrio.
C#
namespace Microsoft.Samples.WinForms.Cs.HelpLabel { using System; using System.Collections; using
System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using
System.Windows.Forms; using System.Windows.Forms.Design; // // <doc> // <desc> // Help Label offers
an extender property called // "HelpText". It monitors the active control // and displays the help text for the
active control. // </desc> // </doc> // [ ProvideProperty("HelpText",typeof(Control)),
Designer(typeof(HelpLabel.HelpLabelDesigner)) ] public class HelpLabel : Control,
System.ComponentModel.IExtenderProvider { /// <summary> /// Required designer variable. ///
</summary> private System.ComponentModel.Container components; private Hashtable helpTexts; private
System.Windows.Forms.Control activeControl; // // <doc> // <desc> // Creates a new help label object. //
</desc> // </doc> // public HelpLabel() { // // Required for Windows Form Designer support //
InitializeComponent(); helpTexts = new Hashtable(); } /// <summary> /// Clean up any resources being
used. /// </summary> protected override void Dispose(bool disposing) { if (disposing) {
components.Dispose(); } base.Dispose(disposing); } /// <summary> /// Required method for Designer
support - do not modify /// the contents of this method with the code editor. /// </summary> private void
InitializeComponent() { this.components = new System.ComponentModel.Container (); this.BackColor =
System.Drawing.SystemColors.Info; this.ForeColor = System.Drawing.SystemColors.InfoText; this.TabStop
= false; } // // <doc> // <desc> // Overrides the text property of Control. This label ignores // the text
property, so we add additional attributes here so the // property does not show up in the properties window
and is not // persisted. // </desc> // </doc> // [ Browsable(false),
EditorBrowsable(EditorBrowsableState.Never),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public override string Text { get {
return base.Text; } set { base.Text = value; } } // // <doc> // <desc> // This implements the
IExtenderProvider.CanExtend method. The // help label provides an extender property, and the design time
// framework will call this method once for each component to determine // if we are interested in providing
our extended properties for the // component. We return true here if the object is a control and is // not a
HelpLabel (since it would be silly to add this property to // ourselves). // </desc> // </doc> // bool
IExtenderProvider.CanExtend(object target) { if (target is Control && !(target is HelpLabel)) { return true; }
return false; } // // <doc> // <desc> // This is the extended property for the HelpText property. Extended //
properties are actual methods because they take an additional parameter // that is the object or control to
provide the property for. // </desc> // </doc> // [ DefaultValue(""), ] public string GetHelpText(Control
control) { string text = (string)helpTexts[control]; if (text == null) { text = string.Empty; } return text; } // //
<doc> // <desc> // This is an event handler that responds to the OnControlEnter // event. We attach this to
each control we are providing help // text for. // </desc> // </doc> // private void OnControlEnter(object
sender, EventArgs e) { activeControl = (Control)sender; Invalidate(); } // // <doc> // <desc> // This is an
event handler that responds to the OnControlLeave // event. We attach this to each control we are providing
help // text for. // </desc> // </doc> // private void OnControlLeave(object sender, EventArgs e) { if
(sender == activeControl) { activeControl = null; Invalidate(); } } // // <doc> // <desc> // This is the
extended property for the HelpText property. // </desc> // </doc> // public void SetHelpText(Control
control, string value) { if (value == null) { value = string.Empty; } if (value.Length == 0) {
Visual C# Consolidado 1039
helpTexts.Remove(control); control.Enter -= new EventHandler(OnControlEnter); control.Leave -= new
EventHandler(OnControlLeave); } else { helpTexts[control] = value; control.Enter += new
EventHandler(OnControlEnter); control.Leave += new EventHandler(OnControlLeave); } if (control ==
activeControl) { Invalidate(); } } // // <doc> // <desc> // Overrides Control.OnPaint. Here we draw our //
label. // </desc> // </doc> // protected override void OnPaint(PaintEventArgs pe) { // Let the base draw.
This will cover our back // color and set any image that the user may have // provided. // base.OnPaint(pe);
// Draw a rectangle around our control. // Rectangle rect = ClientRectangle; Pen borderPen = new
Pen(ForeColor); pe.Graphics.DrawRectangle(borderPen, rect); borderPen.Dispose(); // Finally, draw the
text over the top of the // rectangle. // if (activeControl != null) { string text =
(string)helpTexts[activeControl]; if (text != null && text.Length > 0) { rect.Inflate(-2, -2); Brush brush = new
SolidBrush(ForeColor); pe.Graphics.DrawString(text, Font, brush, rect); brush.Dispose(); } } } // <doc> //
<desc> // Returns true if the backColor should be persisted in code gen. We // override this because we
change the default back color. // </desc> // <retvalue> // true if the backColor should be persisted. //
</retvalue> // </doc> // public bool ShouldSerializeBackColor() {
return(!BackColor.Equals(SystemColors.Info)); } // <doc> // <desc> // Returns true if the foreColor should
be persisted in code gen. We // override this because we change the default foreground color. // </desc> //
<retvalue> // true if the foreColor should be persisted. // </retvalue> // </doc> // public bool
ShouldSerializeForeColor() { return(!ForeColor.Equals(SystemColors.InfoText)); } // // <doc> // <desc> //
This is a designer for the HelpLabel. This designer provides // design time feedback for the label. The help
label responds // to changes in the active control, but these events do not // occur at design time. In order to
provide some usable feedback // that the control is working the right way, this designer listens // to selection
change events and uses those events to trigger active // control changes. // </desc> // </doc> //
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name =
"FullTrust")] public class HelpLabelDesigner : System.Windows.Forms.Design.ControlDesigner { private
bool trackSelection = true; /// <summary> /// This property is added to the control's set of properties in the
method /// PreFilterProperties below. Note that on designers, properties that are /// explictly declared by
TypeDescriptor.CreateProperty can be declared as /// private on the designer. This helps to keep the
designer's publi /// object model clean. /// </summary> private bool TrackSelection { get { return
trackSelection; } set { trackSelection = value; if (trackSelection) { ISelectionService ss =
(ISelectionService)GetService(typeof(ISelectionService)); if (ss != null) { UpdateHelpLabelSelection(ss); } }
else { HelpLabel helpLabel = (HelpLabel)Control; if (helpLabel.activeControl != null) {
helpLabel.activeControl = null; helpLabel.Invalidate(); } } } } public override DesignerVerbCollection Verbs {
get { DesignerVerb[] verbs = new DesignerVerb[] { new DesignerVerb("Sample Verb", new
EventHandler(OnSampleVerb)) }; return new DesignerVerbCollection(verbs); } } // // <doc> // <desc> //
Overrides Dispose. Here we remove our handler for the selection changed // event. With designers, it is
critical that they clean up any events they // have attached. Otherwise, during the course of an editing
session many // designers may get created and never destroyed. // </desc> // </doc> // protected override
void Dispose(bool disposing) { if (disposing) { ISelectionService ss =
(ISelectionService)GetService(typeof(ISelectionService)); if (ss != null) { ss.SelectionChanged -= new
EventHandler(OnSelectionChanged); } } base.Dispose(disposing); } // // <doc> // <desc> // Overrides
initialize. Here we add an event handler to the selection service. // Notice that we are very careful not to
assume that the selection service is // available. It is entirely optional that a service is available and you
should // always degrade gracefully if a service could not be found. // </desc> // </doc> // public override
void Initialize(IComponent component) { base.Initialize(component); ISelectionService ss =
(ISelectionService)GetService(typeof(ISelectionService)); if (ss != null) { ss.SelectionChanged += new
EventHandler(OnSelectionChanged); } } private void OnSampleVerb(object sender, EventArgs e) {
Visual C# Consolidado 1040
MessageBox.Show("You have just invoked a sample verb. Normally, this would do something interesting."); }
// // <doc> // <desc> // Our handler for the selection change event. Here we update the active control
within // the help label. // </desc> // </doc> // private void OnSelectionChanged(object sender, EventArgs
e) { if (trackSelection) { ISelectionService ss = (ISelectionService)sender; UpdateHelpLabelSelection(ss); } }
protected override void PreFilterProperties(IDictionary properties) { // Always call base first in PreFilter*
methods, and last in PostFilter* // methods. base.PreFilterProperties(properties); // We add a design-time
property called "TrackSelection" that is used to track // the active selection. If the user sets this to true (the
default), then // we will listen to selection change events and update the control's active // control to point to
the current primary selection. properties["TrackSelection"] = TypeDescriptor.CreateProperty(
this.GetType(), // the type this property is defined on "TrackSelection", // the name of the property
typeof(bool), // the type of the property new Attribute[] {CategoryAttribute.Design}); // attributes } ///
<summary> /// This is a helper method that, given a selection service, will update the active control /// of
our help label with the currently active selection. /// </summary> /// <param name="ss"></param>
private void UpdateHelpLabelSelection(ISelectionService ss) { Control c = ss.PrimarySelection as Control;
HelpLabel helpLabel = (HelpLabel)Control; if (c != null) { helpLabel.activeControl = c;
helpLabel.Invalidate(); } else { if (helpLabel.activeControl != null) { helpLabel.activeControl = null;
helpLabel.Invalidate(); } } } } } }
C#
namespace Microsoft.Samples.WinForms.Cs.HostApp { using System; using System.ComponentModel;
using System.Drawing; using System.Windows.Forms; using Microsoft.Samples.WinForms.Cs.HelpLabel;
public class HostApp : System.Windows.Forms.Form { /// <summary> /// Required designer variable. ///
</summary> private System.ComponentModel.Container components; private
System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; private
System.Windows.Forms.Button button1; private Microsoft.Samples.WinForms.Cs.HelpLabel.HelpLabel
helpLabel1; public HostApp() { // // Required for Windows Form Designer support //
InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected
override void Dispose(bool disposing) { if (disposing) { components.Dispose(); } base.Dispose(disposing); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method
with the code editor. /// </summary> private void InitializeComponent() { this.components = new
System.ComponentModel.Container(); this.label1 = new System.Windows.Forms.Label(); this.button1 = new
System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.helpLabel1 =
new Microsoft.Samples.WinForms.Cs.HelpLabel.HelpLabel(); label1.Location = new
System.Drawing.Point(16, 16); label1.Text = "Name:"; label1.Size = new System.Drawing.Size(56, 24);
label1.TabIndex = 3; helpLabel1.Dock = System.Windows.Forms.DockStyle.Bottom; helpLabel1.Size = new
System.Drawing.Size(448, 40); helpLabel1.TabIndex = 0; helpLabel1.Location = new
System.Drawing.Point(0, 117); button1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; button1.Size =
new System.Drawing.Size(104, 40); button1.TabIndex = 1; helpLabel1.SetHelpText(button1, "This is the Save
Button. Press the Save Button to save your work."); button1.Text = "&Save"; button1.Location = new
System.Drawing.Point(336, 56); this.Text = "Control Example"; this.ClientSize = new
System.Drawing.Size(448, 157); textBox1.Anchor = AnchorStyles.Left| AnchorStyles.Right |
AnchorStyles.Top; textBox1.Location = new System.Drawing.Point(80, 16); textBox1.Text = "<Name>";
helpLabel1.SetHelpText(textBox1, "This is the name field. Please enter your name here."); textBox1.TabIndex
= 2; textBox1.Size = new System.Drawing.Size(360, 20); this.Controls.Add(label1);
this.Controls.Add(textBox1); this.Controls.Add(button1); this.Controls.Add(helpLabel1); } /// <summary>
Visual C# Consolidado 1041
/// The main entry point for the application. /// </summary> [STAThread] public static void Main(string[]
args) { Application.Run(new HostApp()); } } }
COMO: Acessar servios em tempo de criao
O exemplo de cdigo a seguir descreve como para obter acesso ao conjunto de servios .NET
Framework Rich para que possa integrar a componentes e controles ao ambiente de
desenvolvimento.
Exemplo
Este exemplo de cdigo demonstra como acessar servios no seu designer personalizado. Uma
classe chamada DemoControlDesigner Designer est conectado a uma DemoControl classe e
executa as seguintes operaes:
Do Code Editor usa o ShowCode mtodo para iniciar e exibir um manipulador de eventos
que criado quando o Timer componente criado.
PreFilterAttributes
PostFilterAttributes
PreFilterEvents
PostFilterEvents
PreFilterProperties
PostFilterProperties
O exemplo de cdigo a seguir demonstra como substituir o PreFilterProperties e
Mtodos PostFilterProperties para alterar as propriedades e atributos de classe DemoControl.
C#
// The PreFilterProperties method is where you can add or remove // properties from the component being
designed. // // In this implementation, the Visible property is removed, // the BackColor property is
shadowed by the designer, and // the a new property, called Locked, is added. protected override void
PreFilterProperties(IDictionary properties) { // Always call the base PreFilterProperties implementation //
before you modify the properties collection. base.PreFilterProperties(properties); // Remove the visible
property. properties.Remove("Visible"); // Shadow the BackColor property. PropertyDescriptor
propertyDesc = TypeDescriptor.CreateProperty( typeof(DemoControlDesigner),
(PropertyDescriptor)properties["BackColor"], new Attribute[0]); properties["BackColor"] = propertyDesc; //
Create the Locked property. properties["Locked"] = TypeDescriptor.CreateProperty(
typeof(DemoControlDesigner), "Locked", typeof(bool), CategoryAttribute.Design, DesignOnlyAttribute.Yes);
}
C#
Visual C# Consolidado 1079
// The PostFilterProperties method is where you modify existing // properties. You must only use this
method to modify existing // items. Do not add or remove items here. Also, be sure to // call
base.PostFilterProperties(properties) after your filtering // logic. // // In this implementation, the Enabled
property is hidden from // any PropertyGrid or Properties window. This is done by // creating a copy of the
existing PropertyDescriptor and // attaching two new Attributes: Browsable and EditorBrowsable. protected
override void PostFilterProperties(IDictionary properties) { PropertyDescriptor pd = properties["Enabled"]
as PropertyDescriptor; pd = TypeDescriptor.CreateProperty( pd.ComponentType, pd, new Attribute[2] { new
BrowsableAttribute(false), new EditorBrowsableAttribute(EditorBrowsableState.Never)});
properties[pd.Name] = pd; // Always call the base PostFilterProperties implementation // after you modify
the properties collection. base.PostFilterProperties(properties); }
Compilando o cdigo
Quando voc faz alteraes aos aspectos em tempo de criao de um componente, voc
precisar recriar o projeto de controle. Alm disso, se no houver outro projeto Windows Forms
que aberto e usa esse componente, voc provavelmente precisar atualizar o projeto para ver
as alteraes. Normalmente, voc precisar fechar e reabrir a janela de design que contm o
componente.
Visual C# Consolidado 1080
Programao do Office (Como Fazer em C#)
Esta pgina fornece referncia a ajuda sobre tarefas amplamente executadas de programao do
Office. Para exibir outras categorias de tarefas populares abordados na Ajuda Como Fazer em C#.
Como: Atualizar solues das Ferramentas do Visual Studio
para o Office
Aps a atualizao para Microsoft Visual Studio 2005 Tools for the Microsoft Office System, voc
pode abrir e executar seus projetos existentes no Visual Studio e eles sero atualizados para
funcionam da mesma forma que eles tinham ao usar Visual Studio Tools for Office, Verso 2003.
No entanto, para concluir a atualizao para que voc pode tirar proveito do novo sistema do
projeto e ferramentas, voc deve executar algumas etapas atualizao manualmente. Para obter
mais informaes, consulte Atualizando Overview solues do Office.
Para atualizar um Ferramentas do Visual Studio para soluo Office
12. Abra uma soluo existente no Visual Studio com Visual Studio 2005 Tools for Office
instalado.
O Visual Studio Conversion Wizard aparece.
13. Leia as informaes e avisos na primeira tela, e clique em Next.
14. Se voc desejar criar um backup de sua soluo, selecione Yes, create a backup before
converting e especifique um local para os arquivos de backup. Se voc no faa desejar
criar um backup, selecione No.
15. Clique em Next.
16. Clique em Finish se tudo na pgina de resumo est correto.
Uma caixa de dilogo aparece com informaes sobre propriedades padro para
depurao do projeto.
17. Clique Yes para atualizar para o novo projeto depurao propriedades padro. O projeto
se voc clicar em No, no ser compilado at que voc faa alteraes manualmente.
18. Clique no link para o relatrio de converso para ver detalhes sobre o status de converso,
ou ento clique em Close.
A soluo abre com o novo sistema do projeto visvel no Solution Explorer, mais os
arquivos da verso antiga da soluo.
19. Mover o cdigo do arquivo classe principal antigo para o novo ThisDocument,
ThisWorkbook,. e Sheet Classes
20. Excluir o arquivo classe principal antigo aps remover todo o cdigo.
21. Atualizar qualquer referncia no qualificada para aplicativos com espao para nome
System.Windows.Forms.Application totalmente qualificado. Para obter mais informaes,
consulte " Atualizando O cdigo " no Atualizando Overview solues do Office.
22. Substituir todos os controles ActiveX no documento ou pasta de trabalho por controles
gerenciados do Visual Studio Toolbox.
Visual C# Consolidado 1081
O Excel Usando Explicaes Passo-a-passo
Walkthroughs fornecem instrues passo a passo para cenrios comuns e so um bom lugar para
comear aprendendo sobre Microsoft Visual Studio 2005 Tools for the Microsoft Office System.
Orientaes as seguir demonstram vrios tipos bsicos de tarefas: automatizar o Microsoft Office
Excel 2003, executar anlise de dados, trabalhar com controles, solues, implantao e definindo
a segurana.
Coleta de dados usando um formulrio do Windows
Walkthrough:
Essa explicao passo a passo demonstra como abrir um formulrio Windows de um planilha do
Microsoft Office Excel 2003, coletar informaes do usurio, e gravar essas informaes em uma
clula da planilha.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Excel
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de aplicativos do Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome WinFormInput. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o
WinFormInput projeto para Solution Explorer.
Adicionar um controle NamedRange para a planilha
Para adicionar um intervalo nomeado para Sheet1
4. Selecione a clula A1 no Sheet1.
5. Na caixa Name, digite formInput.
A Name caixa est localizada esquerda da barra de frmulas, logo acima coluna A da
planilha.
6. Pressione ENTER.
Visual C# Consolidado 1082
Um NamedRange controle adicionado clula A1. No h nenhuma indicao visvel na
planilha, mas formInput aparece na caixa Name (logo acima a planilha no lado esquerdo).
e na Properties janela quando a clula A1 selecionada
Adicionar um formulrio do Windows ao projeto
Criar um formulrio do Windows para o usurio fornea informaes prompt.
Para adicionar um formulrio do Windows
6. Selecione o projeto WinFormInput no Solution Explorer.
7. No menu Project, clique em Add Windows Form.
8. Nome do formulrio GetInputString.vb ou GetInputString.cs. e, em seguida clique em
Add
O novo formulrio aberto no designer.
9. Adicionar um TextBox e um Button. para o formulrio
10. Selecione o boto, localizar a propriedade Text na janela Properties, e alterar o texto OK.
Em seguida, adicione cdigo para ThisWorkbook.vb ou ThisWorkbook.cs para coletar informaes
do usurio.
Exibindo o formulrio do Windows e coletando informaes
Criar uma instncia do formulrio GetInputString Windows e exibi-lo, e em seguida, escrever as
informaes do usurio em uma clula na planilha.
Para exibir o formulrio e coletar informaes
4. Clique com o boto direito do mouse ThisWorkbook.vb ou ThisWorkbook.cs em
Solution Explorer e selecione View Code.
5. No manipulador Open de eventos de ThisWorkbook, adicione o seguinte cdigo para
declarar uma varivel para o formulrio GetInputString e depois exibir o formulrio:
Observao
Em C#, voc deve adicionar um manipulador de eventos como mostrado no Startup evento
abaixo. Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
6. C#
private void ThisWorkbook_Startup(object sender, System.EventArgs e) { this.Open += new
Microsoft.Office.Interop.Excel.WorkbookEvents_OpenEventHandler(ThisWorkbook_Open); } private
void ThisWorkbook_Open() { GetInputString inputForm = new GetInputString(); inputForm.Show(); }
7. Criar um mtodo chamado WriteStringToCell que grave texto em um intervalo nomeado.
Esse mtodo chamado do formulrio, e entrado sero passadas para o NamedRange
controle, formInput o usurio,. na clula A1
C#
public void WriteStringToCell(string formData) { Globals.Sheet1.formInput.Value2 = formData; }
Prxima adicionar cdigo ao formulrio para lidar com clique o boto na evento.
Visual C# Consolidado 1083
Enviar informaes para a planilha
Para enviar informaes para a planilha
4. Clique com o boto direito do mouse GetInputString em Solution Explorer, e selecione
View Designer.
5. Clique duas vezes no boto para abrir o arquivo de cdigo com manipulador de eventos do
boto Click adicionado.
6. Adicione cdigo ao manipulador de eventos para levar a entrada da caixa de texto, envi-lo
para a funo WriteStringToCell, e depois feche o formulrio.
C#
Globals.ThisWorkbook.WriteStringToCell(this.textBox1.Text); this.Dispose();
Testando
Agora voc pode testar sua pasta de trabalho para certificar-se de que o formulrio Windows
aparecer, e se a entrada aparece nesta planilha.
Para testar sua pasta de trabalho
5. Pressione F5 para executar o projeto.
6. Confirme se o formulrio Windows aparece.
7. Digite Hello World na caixa de texto e clique em OK.
8. Confirme que Hello World aparece na clula A1 da planilha.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do mostrando um Windows Form
e dados passagem para uma planilha. Outras tarefas pode desejar executar incluem:
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Alterando planilha formatao usando controles CheckBox
Walkthrough:
Essa explicao passo a passo mostra os fundamentos bsicos do uso caixas de seleo em um
planilha do Microsoft Office Excel 2003 para alterar a formatao. Voc usar Microsoft Visual
Studio 2005 Tools for the Microsoft Office System para criar e adicionar cdigo ao seu projeto.
Para ver o resultado como uma amostra completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em uma planilha usando um boto
Walkthrough:.
Exibindo texto em uma caixa de texto em uma planilha usando
um boto Walkthrough:
Essa explicao passo a passo mostra os fundamentos bsicos do uso botes e caixas de texto
em planilhas Microsoft Office Excel 2003, e como criar projetos Excel usando Microsoft Visual
Studio 2005 Tools for the Microsoft Office System. Para ver o resultado como uma amostra
completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Visual C# Consolidado 1087
Excel.
Criando o projeto
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome My Excel Button. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Excel
Button projeto para Solution Explorer.
Adicionar controles a planilha
Para essa explicao passo a passo, ser necessrio um boto e uma caixa de texto na primeira
planilha.
Para adicionar um boto e uma caixa de texto
6. Verifique se a My Excel Button.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
7. Na guia Common Controls da caixa de ferramentas, arraste para Sheet1. um TextBox
8. No menu View, selecione Properties Window.
9. Certifique-que TextBox1 est visvel na caixa Properties drop-down janela e alterar a
Name propriedade da caixa de texto para displayText.
10. Arraste um Button controle at Sheet1 e alterar as seguintes propriedades:
Propriedade Value (Valor)
Name insertText
Visual C# Consolidado 1088
Text Inserir texto
Agora Escreva o cdigo a ser executado quando o boto clicado.
Preencher a caixa de texto quando o boto Clicked
Sempre que o usurio clica no boto, Hello World! acrescentada caixa de texto.
Para escrever para a caixa de texto quando o boto clicado
4. Na Solution Explorer, clique com o boto direito do mouse Sheet1 e, em seguida clique
View Code no menu de atalho.
5. Adicione o seguinte cdigo ao manipulador Click de eventos do boto:
C#
private void insertText_Click(object sender, EventArgs e) { this.displayText.Text += "Hello World! ";
}
6. Em C#, adicione um manipulador de eventos para o Startup evento como mostrado abaixo.
Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.insertText.Click += new EventHandler(insertText_Click);
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que a mensagem Hello World!
aparece na caixa de texto quando voc clica no boto.
Para testar sua pasta de trabalho
4. Pressione F5 para executar o projeto.
5. Clique no boto.
6. Confirme que Hello World! aparece na caixa de texto.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do uso botes e caixas de texto
em planilhas do Excel. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Usar caixas de seleo para alterar a formatao. Para obter mais informaes, consulte
Alterando planilha formatao usando controles CheckBox Walkthrough:.
Programao contra eventos de um controle NamedRange
Walkthrough:
Essa explicao passo a passo demonstra como adicionar um NamedRange controle a um
planilha do Microsoft Office Excel 2003 e programa contra seus eventos usando Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
Visual C# Consolidado 1089
Durante este explicao passo a passo, voc aprender como:
Criar um projeto de pasta de trabalho do Excel com o nome My Named Range Events.
Verifique que Create a new document est selecionada. Para obter mais informaes,
consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Named
Range Events projeto para Solution Explorer.
Adicionar texto e pipes intervalos para a planilha
Porque controles host so estendidos objetos do Office, voc poder adicion-los para o
documento em da mesma maneira, voc adicionar o objeto nativo. Por exemplo, voc pode
adicionar um controle Excel NamedRange a uma planilha ao abrir o Insert menu apontando para
Name, e escolher Define. Voc tambm pode adicionar um NamedRange controle, arrastando-a
partir para a planilha. o Toolbox
Nesta etapa, voc ir adicionar dois controles Intervalo Nomeado da planilha usando a e adicione
texto para a planilha. o Toolbox,
Para adicionar um intervalo para a planilha
8. Verifique se a My Named Range Events.xls pasta de trabalho aberta no designer visual
studio, com Sheet1 exibido.
9. Na guia Excel Controls da caixa de ferramentas, arraste um NamedRange controle
clula A1 no Sheet1.
A Add NamedRange Control caixa de dilogo ser exibida.
Visual C# Consolidado 1090
10. Verificar que $A$1 aparece na caixa de texto editvel, e essa clula A1 estiver
selecionada. Se no estiver, clique em Clula A1 para selecion-lo.
11. Clique em OK.
Clula A1 se torna um intervalo nomeado namedRange1. No h nenhuma indicao visvel
na planilha, mas namedRange1 aparece na caixa Name (localizada logo acima da planilha no
lado esquerdo). Quando Clula A1 estiver selecionada
12. Adicionar um outro NamedRange controle a clula B3.
13. Verificar que $B$3 aparece na caixa de texto editvel, e essa clula B3 estiver
selecionada. Se no estiver, clique em Clula B3 para selecion-lo.
14. Clique em OK.
Clula B3 se torna um intervalo nomeado namedRange2.
Para adicionar texto a sua planilha
3. Na clula A1, digite o seguinte texto:
Este um exemplo de um controle NamedRange.
4. Na clula A3 (para a esquerda de namedRange2), digite o seguinte texto:
Eventos:
Voc nas sees a seguir, ser escrever cdigo que insere texto em namedRange2 e modifica
propriedades do controle namedRange2 em resposta BeforeDoubleClick, Change., e
SelectionChange eventos de namedRange1
Adicionar cdigo para responder ao evento BeforeDoubleClick
Para inserir texto em NamedRange2 com base no Evento BeforeDoubleClick
4. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs. e
selecione View Code
5. Adicione cdigo para o namedRange1_BeforeDoubleClick manipulador de eventos
semelhante ao seguinte:
C#
private void namedRange1_BeforeDoubleClick( Microsoft.Office.Interop.Excel.Range Target, ref bool
Cancel) { this.namedRange2.Value2 = "The BeforeDoubleClick event occurred.";
this.namedRange2.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
this.namedRange2.Font.Italic = true; }
6. Em C#, voc deve adicionar manipuladores de eventos para o intervalo nomeado como
mostrado no Startup evento abaixo. Para obter informaes sobre como criar
manipuladores de eventos, consulte Como criar manipuladores de eventos em Ferramentas
do Visual Studio do Office:.
C#
this.namedRange1.BeforeDoubleClick += new Microsoft.Office.Interop.Excel.
DocEvents_BeforeDoubleClickEventHandler(namedRange1_BeforeDoubleClick);
this.namedRange1.Change += new Microsoft.Office.Interop.Excel.
DocEvents_ChangeEventHandler(namedRange1_Change); this.namedRange1.SelectionChange
+=new Microsoft.Office.Interop.Excel.
DocEvents_SelectionChangeEventHandler(namedRange1_SelectionChange);
Visual C# Consolidado 1091
Adicionar cdigo para responder ao evento de alterao
Para inserir texto em namedRange2 com base no evento Change
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Programao contra eventos dos XMLNode controles modo. Para obter mais informaes,
consulte Alterando o painel de aes de acordo com contexto do usurio Walkthrough:.
Passo-a-passo: Concedendo e removendo permisses para uma soluo do Office
Essa explicao passo a passo demonstra as noes bsicas de segurana no Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
Durante este explicao passo a passo, voc aprender como:
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Para adicionar uma caixa de mensagem a um evento de inicializao
Visual C# Consolidado 1093
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
15. No menu File, clique em Save All.
16. Na caixa Save Project de dilogo, digite C:\Walkthroughs na caixa Location.
17. Clique em Save.
18. Pressione F5 para executar o projeto.
O Excel iniciado e aparecer a caixa de mensagem.
19. Fechar a caixa de mensagem.
20. Feche o Excel.
21. No designer do Visual Studio, localize e selecione na guia para My Security Test.xls.
22. Feche My Security Test.xls (a superfcie do design de planilha Excel) no designer do
Visual Studio.
Feche todos os instncias do Excel antes de alterar a diretiva de segurana.
Quando voc criado o projeto de pasta de trabalho do Excel, o assistente adicionado um novo
grupo de cdigo de segurana e um grupo de cdigos filho diretiva de segurana Runtime no
nvel do usurio.
Em seguida, voc remover o grupo de cdigos que criou o assistente.
Remover o grupo de cdigos padro
Localize e remova o grupo de cdigo padro que foi criado.
Para remover um grupo de cdigos
9. No Painel de Controle, abra Administrative Tools.
10. Executar Microsoft .NET Framework 2.0 Configuration.
11. No modo de exibio de rvore no lado esquerdo, expanda .NET Framework 2.0
Configuration,, expandir Runtime Security Policy, expandir User, expandir Code
Groups, Expandido All_Code e My Computer expanda VSTOProjects.
No um GUID para cada projeto tenha criado. Expanda cada GUID para ver o caminho
para o documento associado.
12. Clique com o boto direito do mouse o GUID de C:\Walkthroughs\My Security Test\My
Security Test\bin\My Security Test.xls grupo de cdigos, e, em seguida clique Delete no
menu de atalho.
Ser exibida uma caixa de dilogo perguntando se voc tiver certeza que deseja excluir
este grupo de cdigos.
13. Clique em Yes.
Visual C# Consolidado 1094
14. Voltar para Visual Studio, e pressione F5 para executar o projeto meu teste de segurana.
Ser exibida informando a atual poltica de segurana .NET permite que no no que a
personalizao para executar uma mensagem de erro.
15. Clique em OK.
16. Feche o Excel.
O conjunto no pode ser executado se ele no tiver permisso explcita na Diretiva de Segurana
Microsoft .NET.
Em seguida, conceda permisso para o conjunto usando um nome forte em vez de uma URL para
prova.
Dando um nome de alta segurana para o conjunto
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Para criar um nome forte
9. No menu Project no Visual Studio, clique em My Security Test Properties.
10. Clique na Signing guia.
11. Selecione Sign the assembly.
12. No, o Choose a strong name key file list clique New.
13. Na caixa Create Strong Name Key de dilogo, digite SecurityTestKey na caixa Key file
name.
14. Desmarque a Protect my key file with a password caixa de seleo.
15. Clique em OK.
O arquivo SecurityTestKey.snk de chave aparece no Solution Explorer.
16. No menu Build, clique em Build Solution Para criar o conjunto contra o par de chaves
nome forte.
Conceder confiana com base no nome de alta segurana
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Para conceder confiana com base em nome forte
10. Abra Microsoft .NET Framework 2.0 Configuration novamente.
11. Clique com o boto direito do mouse no VSTOProjects n e clique New no menu de
atalho
12. Digite o nome Security Test Strong Name para o novo grupo de cdigos, e clique em
Next.
13. Na lista Choose the condition type for this code group, clique Strong Name.
14. Clique em Import.
15. Procure C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana Test\bin\My
para Visual Basic ou C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana
Test\bin\debug\My no C#, e clique em Open.
Visual C# Consolidado 1095
16. Clique em Next.
17. Clique Next para aceitar o FullTrust conjunto de permisses e clique em Finish.
18. Fechar Microsoft .NET Framework 2.0 Configuration.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
Para testar sua pasta de trabalho
3. Pressione F5 para executar o projeto.
4. Confirme se a caixa de mensagem aparece.
Passo-a-passo: Ligando uma clula de planilha a um campo de banco de dados
Essa explicao passo a passo demonstra noes bsicas de vinculao um nico campo de
dados em um banco de dados do SQL Server a um intervalo nomeado no Microsoft Office Excel
2003. Ele inclui adicionar controles que permitem que voc para percorrer todos os registros da
tabela.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto de pasta de trabalho do Excel com o nome My Simple Data Binding,
usando o Visual Basic ou C#. Verifique que Create a new document est selecionada. Para
obter mais informaes, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Simple Data
Binding projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
Para criar o DataSet
9. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources clique dentro a pasta de trabalho do Excel e depois verificar novamente.
no estiver disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Aps uma conexo foi selecionado ou criado, clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado da Customers tabela.
17. Clique em Finish.
O assistente adicionar a Customers tabela para a Data Sources janela. Ele tambm adiciona
um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Adicionar controles a planilha
Para essa explicao passo a passo, voc precisa de dois intervalos nomeados e quatro botes
na primeira planilha. Primeiro, adicione os dois intervalos nomeados a partir da Data Sources
janela para que automaticamente eles so vinculados fonte de dados. Em seguida, adicione os
botes da Toolbox.
Para adicionar dois intervalos nomeados
8. Verifique se a My Simple Data Binding.xls pasta de trabalho aberta no designer visual
studio, com Sheet1 exibido.
9. Abra a Data Sources janela e expanda o Customers n.
10. Selecione a CompanyName coluna, e clique na seta suspensa que aparece.
11. Selecione NamedRange na lista drop-down, e arraste a CompanyName coluna clula
A1.
Visual C# Consolidado 1097
Um NamedRange controle denominado companyNameNamedRange criado na clula A1. Ao
mesmo tempo, nomeado customersBindingSource, um adaptador de tabela, e uma DataSet
instncia so adicionados ao projeto. um BindingSource O controle acoplado que por sua
vez est vinculado a DataSet instncia. o BindingSource,
12. Selecione a CustomerID coluna na janela Data Sources, e clique na seta suspensa que
aparece.
13. Clique NamedRange na lista drop-down, e arraste a CustomerID coluna clula B1.
14. criado na clula B1, e vinculado a outro NamedRange controle chamado
customerIDNamedRange o BindingSource.
Para adicionar quatro botes
3. Na guia Common Controls Da adicionar um Button controle a clula A3 da planilha. o
Toolbox,
nome Button1 este boto.
4. Adicionar mais trs botes s seguintes clulas nesta ordem, para que os nomes so
conforme mostrado:
Clula (Nome)
B3 Button2
C3 Button3
D3 Button4
A prxima etapa para adicionar texto para os botes, e em C# Adicionar manipuladores de
eventos.
Inicializando as controles
Definir o texto do boto e adicionar manipuladores de eventos durante o Startup evento.
Para inicializar os controles
4. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
5. Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para cada
boto.
C#
this.button1.Text = "|<"; this.button2.Text = "<"; this.button3.Text = ">"; this.button4.Text = ">|";
6. Para C# s, adicionar manipuladores de eventos para o boto clique eventos para o
Sheet1_Startup mtodo.
C#
this.button1.Click += new EventHandler(button1_Click); this.button2.Click += new
EventHandler(button2_Click); this.button3.Click += new EventHandler(button3_Click);
this.button4.Click += new EventHandler(button4_Click);
Visual C# Consolidado 1098
Agora, adicione cdigo para manipular os Click eventos dos botes para que o usurio pode
procurar pelos registros.
Adicionar cdigo para ativar rolagem atravs dos registros
Adicione cdigo ao manipulador Click de eventos de cada boto para percorrer os registros.
Para mover para o primeiro registro
Cache os dados para que ele possa ser usado off-line. Para obter mais informaes,
consulte Como dados de cache para uso off-line ou em um servidor:.
Vincular clulas para vrias colunas em uma tabela, em vez da um campo. Para obter
mais informaes, consulte Walkthrough: vinculao clulas para vrias colunas em uma
tabela.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto de pasta de trabalho do Excel com o nome My Complex Data Binding,
usando o Visual Basic ou C#. Verifique que Create a new document est selecionada. Para
obter mais informaes, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Complex
Data Binding projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
Para criar o DataSet
9. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources clique dentro a pasta de trabalho do Excel e depois verificar novamente.
no estiver disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Aps uma conexo foi selecionado ou criado, clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado da Employees tabela.
17. Clique em Finish.
O assistente adicionar a Employees tabela para a Data Sources janela. Ele tambm adiciona
um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Adicionar controles a planilha
Para essa explicao passo a passo, voc precisa um ListObject controle e um Button controle na
primeira planilha. Primeiro, adicione o ListObject controle a partir da Data Sources janela para
que ela est vinculada automaticamente fonte de dados. Em seguida, adicione o Button
controle da Toolbox.
Para adicionar um ListObject
5. Verifique se a My Complex Data Binding.xls pasta de trabalho aberta no designer
visual studio, com Sheet1 exibido.
6. Abra a Data Sources janela e selecione o Employees n.
7. Clique na seta suspensa que aparece.
8. Selecione ListObject na lista drop-down, e arraste a Employees tabela clula A6.
Um ListObject controle denominado EmployeesListObject criado na clula A6. Ao mesmo
tempo, nomeado EmployeesBindingSource, um adaptador de tabela, e uma DataSet instncia
Visual C# Consolidado 1101
so adicionados ao projeto. um BindingSource O controle acoplado que por sua vez est
vinculado a DataSet instncia. o BindingSource,
Para adicionar um boto
Pressione F5.
Verifique que quando abrir a pasta de trabalho, o objeto lista preenchido com dados da
tabela Employees.
Para modificar dados
3. Clique em Clula B7, que deve conter o nome Davolio.
4. Digite o nome Anderson, e pressione ENTER.
Para modificar um cabealho de coluna
3. Clique na clula que contm no cabealho LastName da coluna.
4. Digitar Last Name, incluindo um espao entre as duas palavras, e pressione ENTER.
Para salvar dados
5. Clique Save na planilha.
6. Feche a pasta de trabalho. Clique em No Quando solicitado a salvar as alteraes feitas.
7. Pressione F5 para executar o projeto novamente.
O objeto lista preenchido com dados da tabela Employees.
8. Observe que o nome na clula B7 ainda Anderson, que a alterao de dados que
voc feitas e salvas volta para o banco de dados. No cabealho LastName da coluna foi
alterado para seu formato original sem nenhum espao, porque no cabealho da coluna
no est vinculado ao banco de dados e voc no foi salvar as alteraes feitas para a
planilha.
Para adicionar novas linhas
3. Selecione uma clula dentro do objeto lista.
Uma nova linha aparece na parte inferior da lista, com um asterisco (*.) na primeira clula
da nova linha
4. Adicionar as informaes a seguir na linha vazia:
CdigoDoFuncionrio Sobrenome FirstName Ttulo
10 ITO Shu Gerenciador de vendas
Para excluir linhas
3. Selecionar linha 16, que deve conter a nova linha que voc adicionou, clicando no nmero
16 no lado esquerdo da planilha.
4. No menu Edit, clique em Delete.
Para classificar as linhas na lista
4. Selecione uma clula dentro da lista.
Botes de seta aparecem em cada cabealho de coluna.
5. Clique no boto SETA no cabealho da Last Name coluna.
Visual C# Consolidado 1103
6. Clique em Sort Ascending.
As linhas so classificadas em ordem alfabtica por sobrenome.
Para filtrar informaes
6. Selecione uma clula dentro da lista.
7. Clique no boto SETA no cabealho da Title coluna.
8. Clique em Sales Representative.
A lista mostra somente as linhas que tm Sales Representative na coluna Title.
9. Clique no boto SETA no cabealho da Title coluna novamente.
10. Clique em (All).
Filtragem removida e todas as linhas aparecem.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do vinculando uma tabela em um
banco de dados a um objeto de lista. Aqui esto algumas tarefas que podem vie em seguida:
Cache os dados para que ele possa ser usado off-line. Para obter mais informaes,
consulte Como dados de cache para uso off-line ou em um servidor:.
Implantar a soluo. Para obter mais informaes, consulte Como implantar solues do
Office:.
Criar uma relao mestre / detalhes entre um campo e uma tabela. Para obter mais
informaes, consulte Criando uma relao mestre / detalhes usando um DataSet em cache
Walkthrough:.
Criando uma relao mestre / detalhes usando um DataSet em
cache Walkthrough:
Essa explicao passo a passo demonstra criar uma relao mestre / detalhes em uma planilha, e
cache os dados para que a soluo pode ser usada off-line.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Acesso ao exemplo de SQL Server do Northwind. O banco de dados pode ser no seu
computador de desenvolvimento ou em um servidor.
Implantar a soluo. Para obter mais informaes, consulte Como implantar solues do
Office:.
Recuperar dados de cache para outro projeto. Para obter mais informaes, consulte
Como recuperar dados de uma pasta de trabalho em um servidor em cache:.
Walkthrough: atualizando um grfico em uma planilha usando botes de opo
Essa explicao passo a passo mostra os fundamentos bsicos do alterando estilos do grfico
usando botes de opo em um planilha do Microsoft Office Excel 2003. Para ver o resultado
como uma amostra completa, consulte Exemplo do Excel de controles.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em uma planilha usando um boto
Walkthrough:.
Alterar a formatao em uma planilha usando caixas de seleo. Para obter mais
informaes, consulte Alterando planilha formatao usando controles CheckBox
Walkthrough:.
Vinculao de Dados para controles em um painel Aes do Excel
Walkthrough:
Essa explicao passo a passo demonstra vinculao de dados a controles em um painel Aes
no Microsoft Office Excel 2003. Os controles demonstram uma Relao mestre / detalhes entre
tabelas em um banco de dados do SQL Server.
Durante este explicao passo a passo, voc aprender como:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto de pasta de trabalho do Excel com o nome My Excel Actions Pane.
Verifique que Create a new document est selecionada. Para obter mais informaes,
consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Excel
Actions Pane projeto para Solution Explorer.
Adicionar uma nova fonte de dados ao projeto
Para adicionar uma nova fonte de dados para o projeto
10. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources clique dentro na planilha do Excel e depois verificar novamente. no
estiver disponvel,
11. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
12. Selecione Database e, em seguida clique em Next.
13. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
14. Clique em Next.
15. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
16. Expanda o Tables n na janela Database objects.
17. Marque a caixa de seleo ao lado da Suppliers tabela.
18. Expandir a Products tabela e selecione ProductName, SupplierID, QuantityPerUnit. e
UnitPrice
19. Clique em Finish.
O assistente adiciona a Suppliers tabela e Products Tabela janela Data Sources. Ele tambm
adiciona um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Visual C# Consolidado 1114
Adicionar controles a planilha
Em seguida, adicione um NamedRange controle e um ListObject controle primeira planilha.
Para adicionar um NamedRange e um controle ListObject
8. Verifique se a My Excel Actions Pane.xls pasta de trabalho aberta no designer visual
studio, com Sheet1 exibido.
9. Na janela Data Sources , expanda a Suppliers tabela.
10. Clique na seta suspensa no n Company Name, e selecione NamedRange.
11. Arraste Company Name a partir da Data Sources janela para na Sheet1 Clula A2.
Um NamedRange controle denominado CompanyNameNamedRange criado, e o
<CompanyName> de texto aparece na clula A2. Ao mesmo tempo, nomeado
suppliersBindingSource, um adaptador de tabela, e um DataSet so adicionados ao projeto.
um BindingSource O controle acoplado que por sua vez est vinculado a DataSet
instncia. o BindingSource,
12. Na janela Data Sources, role para baixo aps as colunas que esto sob a Suppliers
tabela. Na parte inferior da lista a Products tabela; ele aqui porque ele um filho da
Suppliers tabela. Selecionar esta Products Tabela, no a um que seja no mesmo nvel
como a Suppliers Tabela, e clique a seta suspensa que aparece.
13. Clique ListObject na lista drop-down, e arraste a Products tabela para clulas A6 em
Sheet1.
Um ListObject controle denominado ProductNameListObject criado na clula A6. Ao
mesmo tempo, e um adaptador de tabela so adicionados ao projeto. nomeado
productsBindingSource, um BindingSource O controle acoplado que por sua vez est
vinculado a DataSet instncia. o BindingSource,
14. No C# somente, selecione suppliersBindingSource No bandeja de componentes, e
alterar a Modifiers propriedade para Internal na janela Properties.
Adicionar controles ao painel de aes
Em seguida, voc precisa um controle painel Aes que contenha uma caixa de combinao.
Para adicionar um controle painel Aes
4. Selecione o My Excel Actions Pane projeto no Solution Explorer.
5. No menu Project, selecione Add New Item.
6. Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl e clique em Add
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes
4. Das Common Controls guias da Toolbox, arraste um ComboBox controle para o controle
painel Aes.
5. Alterar a Size propriedade para 171, 21.
6. Redimensionar o controle de usurio para ajustar os controles.
Vinculando o controle no painel Aes a dados
Neste seo, voc ser definir a fonte de dados de mesma fonte de dados como o
NamedRange controle em uma planilha.. com a mesma fonte de dados que o NamedRange
controle em uma planilha o ComboBox o ComboBox
Visual C# Consolidado 1115
Para definir propriedades de vinculao de dados do controle
4. Clique com o boto direito do mouse no controle painel Aes e selecione View Code a
partir do menu de atalho
5. Adicione o seguinte cdigo ao evento Load do controle painel Aes:
C#
private void ActionsControl_Load(object sender, EventArgs e) { this.comboBox1.DataSource =
Globals.Sheet1.suppliersBindingSource; this.comboBox1.DisplayMember = "CompanyName"; }
6. Em C#, voc deve criar um manipulador de eventos para o ActionsControl. Voc pode
colocar este cdigo no construtor ActionsControl como mostrado abaixo. Para obter mais
informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
public ActionsControl() { InitializeComponent(); this.Load += new
EventHandler(ActionsControl_Load); }
Mostrando o Painel de Aes
Voc nesta seo, vai escrever cdigo para mostrar o painel Aes. O painel Actions ficar visvel
depois controles so adicionados a ele.
Para mostrar o painel Aes
3. Clique com o boto direito do mouse ThisWorkbook.vb no Solution Explorer, ou
ThisWorkbook.cs,. e, em seguida clique View Code no menu de atalho
4. Criar uma nova instncia do controle do usurio na classe ThisWorkbook, da seguinte
maneira:
C#
ActionsControl actions = new ActionsControl();
5. No manipulador Startup de eventos de ThisWorkbook, adicione cdigo de forma que ele
tenha como no exemplo a seguir:
C#
private void ThisWorkbook_Startup(object sender, System.EventArgs e) {
this.ActionsPane.Controls.Add(actions); }
Testar o aplicativo
Agora voc pode testar seu documento para verificar o painel Aes que aberto quando o
documento for aberto. Voc testar para a relao mestre / detalhes entre os controles no painel
de aes e os controles da planilha.
Para testar seu documento
5. Pressione F5 para executar o projeto.
6. Confirme se o painel Actions est visvel.
7. Selecione uma empresa na caixa Lista. Verifique se o nome da empresa est listado no
controle NamedRange e se os detalhes do produto esto listados no ListObject controle.
8. Selecione vrias empresas para verificar o nome da empresa e Detalhes do Produto altere
conforme apropriado.
Prximas etapas
Visual C# Consolidado 1116
Essa explicao passo a passo mostra as noes bsicas de vinculao de dados a controles em
um painel Aes no Excel. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Word. Para obter mais informaes, consulte Vinculao
de Dados para controles em um painel Aes do Word Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Implantando um Word ou Solution do Excel usando um manifesto
Deployment Walkthrough:
Essa explicao passo a passo demonstra como implantar uma soluo o Microsoft Office Excel
ou Microsoft Office Word em um compartilhamento de rede em um servidor. Ser posicionado no
final do explicao passo a passo, o possvel para executar a soluo no servidor do seu
computador de desenvolvimento.
Em um ambiente de produo, uma Microsoft Visual Studio 2005 Tools for the Microsoft Office
System soluo geralmente publicada primeiro a um servidor de teste, e depois ele
reimplantado em um servidor de produo depois que o departamento de TI aprovar-. Voc nessa
explicao passo a passo, ser emular esse processo, publicando uma soluo em um local
temporrio no seu computador de desenvolvimento, e ento redeploying a soluo do local de
publicao para um servidor. Para obter mais informaes sobre as opes para implantar a
soluo, consulte Modelos de implantao.
Durante este explicao passo a passo, voc aprender como:
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Criar um projeto de instalao que voc pode usar para criar um arquivo do Windows
Installer.
Modifique o projeto de instalao para que o arquivo Windows Installer instala sua
Microsoft Visual Studio 2005 Tools for the Microsoft Office System soluo.
Adicionar uma etapa para o projeto de instalao para que Arquivo do Windows Installer
edita o manifesto do aplicativo incorporados no Visual Studio Tools for Office documento de
soluo.
Essa explicao passo a passo pressupe que o computador de destino j tiver os pr-requisitos
instalados para executar Visual Studio Tools for Office solues. Voc cria o arquivo Windows
Installer no o verificar ou instalar esses pr-requisitos. Para obter mais informaes sobre os pr-
requisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Para adicionar uma caixa de mensagem a um evento de inicializao
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
15. No menu File, clique em Save All.
16. Na caixa Save Project de dilogo, digite C:\Walkthroughs na caixa Location.
17. Clique em Save.
Visual C# Consolidado 1127
18. Pressione F5 para executar o projeto.
O Excel iniciado e aparecer a caixa de mensagem.
19. Fechar a caixa de mensagem.
20. Feche o Excel.
21. No designer do Visual Studio, localize e selecione na guia para My Security Test.xls.
22. Feche My Security Test.xls (a superfcie do design de planilha Excel) no designer do
Visual Studio.
Feche todos os instncias do Excel antes de alterar a diretiva de segurana.
Quando voc criado o projeto de pasta de trabalho do Excel, o assistente adicionado um novo
grupo de cdigo de segurana e um grupo de cdigos filho diretiva de segurana Runtime no
nvel do usurio.
Em seguida, voc remover o grupo de cdigos que criou o assistente.
Remover o grupo de cdigos padro
Localize e remova o grupo de cdigo padro que foi criado.
Para remover um grupo de cdigos
9. No Painel de Controle, abra Administrative Tools.
10. Executar Microsoft .NET Framework 2.0 Configuration.
11. No modo de exibio de rvore no lado esquerdo, expanda .NET Framework 2.0
Configuration,, expandir Runtime Security Policy, expandir User, expandir Code
Groups, Expandido All_Code e My Computer expanda VSTOProjects.
No um GUID para cada projeto tenha criado. Expanda cada GUID para ver o caminho
para o documento associado.
12. Clique com o boto direito do mouse o GUID de C:\Walkthroughs\My Security Test\My
Security Test\bin\My Security Test.xls grupo de cdigos, e, em seguida clique Delete no
menu de atalho.
Ser exibida uma caixa de dilogo perguntando se voc tiver certeza que deseja excluir
este grupo de cdigos.
13. Clique em Yes.
14. Voltar para Visual Studio, e pressione F5 para executar o projeto meu teste de segurana.
Ser exibida informando a atual poltica de segurana .NET permite que no no que a
personalizao para executar uma mensagem de erro.
15. Clique em OK.
16. Feche o Excel.
O conjunto no pode ser executado se ele no tiver permisso explcita na Diretiva de Segurana
Microsoft .NET.
Em seguida, conceda permisso para o conjunto usando um nome forte em vez de uma URL para
prova.
Dando um nome de alta segurana para o conjunto
Visual C# Consolidado 1128
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Para criar um nome forte
9. No menu Project no Visual Studio, clique em My Security Test Properties.
10. Clique na Signing guia.
11. Selecione Sign the assembly.
12. No, o Choose a strong name key file list clique New.
13. Na caixa Create Strong Name Key de dilogo, digite SecurityTestKey na caixa Key file
name.
14. Desmarque a Protect my key file with a password caixa de seleo.
15. Clique em OK.
O arquivo SecurityTestKey.snk de chave aparece no Solution Explorer.
16. No menu Build, clique em Build Solution Para criar o conjunto contra o par de chaves
nome forte.
Conceder confiana com base no nome de alta segurana
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Para conceder confiana com base em nome forte
10. Abra Microsoft .NET Framework 2.0 Configuration novamente.
11. Clique com o boto direito do mouse no VSTOProjects n e clique New no menu de
atalho
12. Digite o nome Security Test Strong Name para o novo grupo de cdigos, e clique em
Next.
13. Na lista Choose the condition type for this code group, clique Strong Name.
14. Clique em Import.
15. Procure C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana Test\bin\My
para Visual Basic ou C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana
Test\bin\debug\My no C#, e clique em Open.
16. Clique em Next.
17. Clique Next para aceitar o FullTrust conjunto de permisses e clique em Finish.
18. Fechar Microsoft .NET Framework 2.0 Configuration.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
Para testar sua pasta de trabalho
3. Pressione F5 para executar o projeto.
4. Confirme se a caixa de mensagem aparece.
Visual C# Consolidado 1129
O Word Usando Explicaes Passo-a-passo
Walkthroughs fornecem instrues passo a passo para cenrios comuns e so um bom lugar para
comear aprendendo sobre Microsoft Visual Studio 2005 Tools for the Microsoft Office System.
As orientaes a seguir demonstram formas voc pode usar as ferramentas do Microsoft Office
2003 para automatizar projetos Microsoft Office Word 2003, para implantar suas solues, e para
definir a segurana.
Walkthrough: Changing Document formatao usando
controles CheckBox
Essa explicao passo a passo demonstra os fundamentos bsicos do uso controles em um
documento do Microsoft Office Word 2003 para alterar a formatao de texto. Voc usar
Microsoft Visual Studio 2005 Tools for the Microsoft Office System para criar e adicionar cdigo ao
seu projeto. Para ver o resultado como uma amostra completa, consulte Exemplo de controles do
Word.
Durante este explicao passo a passo, voc aprender como:
Criar um projeto Documento do Word com o nome My Word Formatting. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Word Formatting projeto para
Solution Explorer o Visual Studio.
Adicionar texto e controles ao documento do Word
Visual C# Consolidado 1130
Para essa explicao passo a passo, voc precisar trs caixas de seleo e algum texto em um
Bookmark controle no documento do Word.
Para adicionar trs caixas de seleo
10. Verifique se o documento est aberto no designer visual studio.
11. Na Common Controls guia e arraste-o para o documento. da Toolbox, arraste um
CheckBox
12. No menu View, selecione Properties Window.
13. Certifique-se de que que Checkbox1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e altere as propriedades a seguir:
Propriedade Value (Valor)
Name applyBoldFont
Text Negrito
14. Pressione Enter para mover o ponto de insero abaixo da primeira caixa de seleo.
15. Adicionar uma segunda caixa de seleo para o documento abaixo da ApplyBoldFont caixa
de seleo e alterar as propriedades a seguir:
Propriedade Value (Valor)
Name applyItalicFont
Text Itlico
16. Pressione Enter para mover o ponto de insero abaixo da segunda caixa de seleo.
17. Adicionar uma caixa de seleo terceira para o documento abaixo da ApplyItalicFont caixa
de seleo e alterar as propriedades a seguir:
Propriedade Value (Valor)
Name applyUnderlineFont
Text Sublinhado
18. Voc em seguida, ser arrastar o Bookmark controle para o documento.
Observao
Voc tambm pode adicionar o Bookmark controle usando a Bookmark caixa de dilogo,
encontrada no menu Insert.
Para adicionar texto e um controle indicador
5. Mover o ponto de insero abaixo os controles caixa de seleo e digite o seguinte texto
no documento:
Visual C# Consolidado 1131
Clique em uma caixa de seleo para alterar a formatao de texto.
6. Na guia Word Controls na Toolbox, arraste um Bookmark controle para o documento.
A Add Bookmark Control caixa de dilogo ser exibida.
7. Selecione o texto adicionado ao documento e clique em OK.
Um Bookmark controle denominado Bookmark1 adicionado ao texto selecionado no
documento.
8. Certifique-se de que que Bookmark1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e alterar a propriedade Nome para fontText.
Em seguida, escreva o cdigo para formatar o texto quando uma caixa de seleo marcada ou
desmarcada.
Formatao a caixa de texto quando a verificao checked ou Cleared
Quando o usurio seleciona uma opo de formatao, alterar o formato do texto no documento.
Para alterar a formatao quando uma caixa de seleo marcada
7. Clique com o boto direito do mouse ThisDocument no Solution Explorer, e, em seguida
clique View Code no menu de atalho.
8. No C# somente, adicionar as constantes a seguir para a ThisDocument classe:
C#
const int WordTrue = -1; const int WordFalse = 0;
9. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyBoldFont de
seleo:
C#
private void applyBoldFont_Click(object sender, System.EventArgs e) { if
(this.applyBoldFont.Checked == true) { this.fontText.Bold = WordTrue; } else { this.fontText.Bold =
WordFalse; } }
10. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyItalicFont de
seleo:
C#
private void applyItalicFont_Click(object sender, System.EventArgs e) { if
(this.applyItalicFont.Checked == true) { this.fontText.Italic = WordTrue; } else { this.fontText.Italic =
WordFalse; } }
11. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyUnderlineFont
de seleo:
C#
private void applyUnderlineFont_Click(object sender, System.EventArgs e) { if
(this.applyUnderlineFont.Checked == true) { this.fontText.Underline =
Word.WdUnderline.wdUnderlineSingle; } else { this.fontText.Underline =
Word.WdUnderline.wdUnderlineNone; } }
12. Em C#, adicione manipuladores de eventos para as caixas de texto para o Startup evento
como mostrado abaixo. Para obter informaes sobre como criar manipuladores de
Visual C# Consolidado 1132
eventos, consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio
do Office:.
C#
this.applyBoldFont.Click += new EventHandler(applyBoldFont_Click); this.applyItalicFont.Click +=
new EventHandler(applyItalicFont_Click); this.applyUnderlineFont.Click += new
EventHandler(applyUnderlineFont_Click);
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que o texto est formatado corretamente
quando voc marca ou desmarca uma caixa de seleo.
Para testar seu documento
4. Pressione F5 para executar o projeto.
5. Marque ou desmarque uma caixa de seleo.
6. Confirme que o texto est formatado corretamente.
Prximas etapas
Essa explicao passo a passo mostra as noes bsicas de usando caixas de seleo e
programaticamente alterar texto formatao em documentos do Word. Aqui esto algumas tarefas
que podem vie em seguida:
Implantao do projeto. Para obter mais informaes, consulte Como: Implantar arquivos
de soluo usando o Publish Wizard.
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Exibindo texto em uma caixa de texto em um documento
usando um boto Walkthrough:
Essa explicao passo a passo demonstra noes bsicas de usando botes e caixas de texto em
documentos do Microsoft Office Word 2003,, bem como usar Microsoft Visual Studio 2005 Tools
for the Microsoft Office System para criar um projeto. Durante este explicao passo a passo,
voc aprender como:
Criar um projeto Documento do Word com o nome My Word Button. Verifique que Create
a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Word Button projeto para
Solution Explorer o Visual Studio.
Adicionar controles ao documento do Word
Nesta seo, voc adicionar um boto e uma caixa de texto para o documento Word.
Para adicionar um boto e uma caixa de texto
6. Verifique se o documento est aberto no designer visual studio.
7. Na guia Common Controls da Toolbox, arraste um TextBox controle para o documento.
Observao
No Word, controles so ignorados na linha com texto por padro. Voc pode modificar, controles
forma, bem como objetos forma, so inseridos na guia Edit da caixa Options de dilogo.
8. No menu View, selecione Properties Window.
9. Certifique-que TextBox1 est visvel na caixa Properties drop-down janela e alterar a
Name propriedade da caixa de texto para displayText.
10. Arraste um Button controle para o documento e alterar as seguintes propriedades:
Propriedade Value (Valor)
Name insertText
Text Inserir texto
Agora Escreva o cdigo a ser executado quando o boto clicado.
Preencher a caixa de texto quando o boto Clicked
Sempre que o usurio clica no boto, Hello World! acrescentada caixa de texto.
Para escrever para a caixa de texto quando o boto clicado
4. Na Solution Explorer, clique com o boto direito do mouse ThisDocument e, em seguida
clique View Code no menu de atalho.
5. Adicione o seguinte cdigo ao manipulador Click de eventos do boto:
C#
Visual C# Consolidado 1134
private void insertText_Click(object sender, EventArgs e) { this.displayText.Text += "Hello World!"; }
6. Em C#, adicione um manipulador de eventos para o boto para o Startup evento como
mostrado abaixo. Para obter informaes sobre como criar manipuladores de eventos,
consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.insertText.Click += new EventHandler(insertText_Click);
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que a mensagem Hello World! aparece
na caixa de texto quando voc clica no boto.
Para testar seu documento
4. Pressione F5 para executar o projeto.
5. Clique no boto.
6. Confirme que Hello World! aparece na caixa de texto.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do uso botes e caixas de texto
em documentos do Word. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como: Implantar arquivos de
soluo usando o Publish Wizard.
Usando uma caixa de combinao para alterar a formatao. Para obter mais informaes,
consulte Walkthrough: Changing Document formatao usando controles CheckBox.
Walkthrough: Criando menus de atalho para indicadores
Essa explicao passo a passo demonstra a criao de menus de atalho para Bookmark
controles. Voc ir escrever cdigo no evento BeforeRightClick do indicador para que quando o
usurio clica com o boto direito do mouse o texto dentro do indicador, um menu de atalho
contendo itens de menu para formatar o texto aparea.
Durante este explicao passo a passo, voc aprender como:
Escrever cdigo para responder a com o boto direito do mouse texto em um indicador.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Escrever cdigo para responder a eventos de controles host no Excel. Para obter mais
informaes, consulte Programao contra eventos de um controle NamedRange
Walkthrough:.
Use uma caixa de seleo para alterar formatao em um indicador. Para obter mais
informaes, consulte Walkthrough: Changing Document formatao usando controles
CheckBox.
Walkthrough: atualizando um grfico em um documento
usando botes de opo
Essa explicao passo a passo demonstra os fundamentos bsicos do alterando estilos do grfico
usando botes de opo em um documento do Microsoft Office Word 2003. Voc usar Microsoft
Visual Studio 2005 Tools for the Microsoft Office System para criar e adicionar cdigo ao seu
projeto. Para ver o resultado como uma amostra completa, consulte Exemplo de controles do
Word.
Durante este explicao passo a passo, voc aprender como:
Criar um projeto Documento do Word com o nome My Chart Options. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Chart Options projeto para
Solution Explorer o Visual Studio.
Adicionar um grfico ao documento
Em seguida, adicione um grfico para o documento.
Para adicionar um grfico
6. No menu Insert, clique em Object.
A Object caixa de dilogo ser aberta.
Observao
Se o Insert menu no estiver visvel, voc dever primeiro clicar em dentro do documento para
que ele foco. Para obter mais informaes consulte, Menus do Office no ambiente do Visual
Studio.
7. Na lista Object type da guia Create New, selecione Microsoft Graph Chart e clique em
OK
Um grfico adicionado ao documento no ponto de insero, e a Datasheet janela
exibida com alguns dados padro.
8. Feche a Datasheet janela para aceite os valores padro no grfico e clique dentro do
documento para mover foco fora do grfico.
9. Clique com o boto direito do mouse no grfico e selecione Format Object.
10. Na guia Layout da caixa de dilogo, selecione Square e Format Object Clique em OK.
Visual C# Consolidado 1139
Adicionar um controle de usurio ao projeto
Para adicionar um controle de usurio
4. Selecione o My Chart Options projeto no Solution Explorer.
5. No menu Project, clique em Add New Item.
6. Na caixa Add New Item de dilogo, clique User Control, nome do controle ChartOptions,
e clique em Add
Para adicionar controles Windows Form ao controle de usurio
6. Se o controle de usurio estiver no visvel no designer, clique duas vezes em
ChartOptions no Solution Explorer.
7. Na guia Common Controls Da arraste um Radio Button controle para o controle de
usurio, e alterar as seguintes propriedades: o Toolbox,
Propriedade Value (Valor)
Name columnChart
Text Grfico de coluna
8. Adicionar um segundo Radio Button ao controle de usurio, e alterar as seguintes
propriedades:
Propriedade Value (Valor)
Name barChart
Text Grfico de barras
9. Adicionar um terceiro Radio Button ao controle de usurio, e alterar as seguintes
propriedades:
Propriedade Value (Valor)
Name lineChart
Text Grfico de linha
10. Adicionar um quarto Radio Button ao controle de usurio, e alterar as seguintes
propriedades:
Propriedade Value (Valor)
Name areaBlockChart
Text Grfico bloquear de rea
Adicionar Referncias
Visual C# Consolidado 1140
Para acessar o grfico do controle de usurio em um documento, voc deve ter uma referncia
11.0 biblioteca objeto do Graph Microsoft no seu projeto.
Para adicionar uma referncia 11.0 biblioteca objeto do Graph Microsoft
4. No menu Project, clique em Add Reference.
A Add Reference caixa de dilogo ser exibida.
5. Clique na COM guia.
6. Selecione Microsoft Graph 11.0 Object Library na lista Component Name e clique em
OK
Alterar o estilo grfico quando o boto de opo selecionada
Nesta seo, voc ser criar um evento pblico sobre o controle de usurio, adicionar uma
propriedade para definir o tipo de seleo, e criar um procedimento para o CheckedChanged evento
de cada um dos botes de opo.
Para criar um evento e propriedade em um controle de usurio
3. No Solution Explorer, clique com o boto direito do mouse no controle de usurio e
selecione View Code.
4. Adicione cdigo para criar um SelectionChanged evento e a Selection propriedade para a
ChartOptions classe:
C#
public event EventHandler SelectionChanged; private Microsoft.Office.Interop.Graph.XlChartType
selectedType = Microsoft.Office.Interop.Graph.XlChartType.xlColumnClustered; public
Microsoft.Office.Interop.Graph.XlChartType Selection { get { return this.selectedType; } set {
this.selectedType = value; } }
Para manipular o evento CheckedChange dos botes de opo
6. Definir o tipo de grfico no manipulador CheckedChanged de eventos de boto areaBlockChart
de opo e depois gerar o evento.
C#
private void areaBlockChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Graph.XlChartType.xlAreaStacked; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
7. Definir o tipo de grfico no manipulador CheckedChanged de eventos do boto barChart de
opo.
C#
private void barChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Graph.XlChartType.xlBarClustered; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
8. Definir o tipo de grfico no manipulador CheckedChanged de eventos do boto columnChart
de opo.
C#
Visual C# Consolidado 1141
private void columnChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Graph.XlChartType.xlColumnClustered; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
9. Definir o tipo de grfico no manipulador CheckedChanged de eventos do boto lineChart de
opo.
C#
private void lineChart_CheckedChanged(object sender, EventArgs e) { if
(((RadioButton)sender).Checked) { this.selectedType =
Microsoft.Office.Interop.Graph.XlChartType.xlLineMarkers; if (this.SelectionChanged != null) {
this.SelectionChanged(this, EventArgs.Empty); } } }
10. Em C#, voc deve adicionar manipuladores de eventos para os botes de opo. Adicione
o cdigo para o ChartOptions Construtor, sob a chamada para InitializeComponent, conforme
mostrado abaixo. Para obter informaes sobre como criar manipuladores de eventos,
consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
public ChartOptions() { InitializeComponent(); areaBlockChart.CheckedChanged += new
EventHandler(areaBlockChart_CheckedChanged); barChart.CheckedChanged += new
EventHandler(barChart_CheckedChanged); columnChart.CheckedChanged += new
EventHandler(columnChart_CheckedChanged); lineChart.CheckedChanged += new
EventHandler(lineChart_CheckedChanged); }
Adicionando o controle de usurio ao documento
Quando voc cria a soluo, o novo controle de usurio automaticamente adicionado
Toolbox. Do Toolbox Voc pode, ento, arrastar o controle de ao seu documento.
Para adicionar o controle de usurio do documento
4. No menu Build, clique em Build Solution.
O ChartOptions controle de usurio adicionado Toolbox.
5. Clique com o boto direito do mouse ThisDocument.vb no Solution Explorer, ou
ThisDocument.cs. e selecione View Designer
6. Do Toolbox arraste o ChartOptions controle de para o documento.
Um novo controle chamado ChartOptions1 adicionado ao seu projeto.
Alterar o tipo de grfico
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
Para alterar o tipo de grfico que exibido no documento
3. Adicionar o manipulador de eventos a seguir para a ThisDocument classe.
C#
private void ChartOptions1_SelectionChanged(object sender, EventArgs e) { try { //first object is the
runtime storage control object index = 2; Word.Shape shape = this.Shapes.get_Item(ref index);
//Activate the shape shape.Activate(); Microsoft.Office.Interop.Graph.Chart dataChart =
(Microsoft.Office.Interop.Graph.Chart)shape.OLEFormat.Object; dataChart.ChartType =
Visual C# Consolidado 1142
this.ChartOptions1.Selection; //Deactivate the shape this.ChartOptions1.Select(); } catch (Exception
ex) { MessageBox.Show(ex.Message); } }
4. Em C#, adicione um manipulador de eventos para o controle de usurio para o Startup
evento como mostrado abaixo. Para obter informaes sobre como criar manipuladores de
eventos, consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio
do Office:.
C#
this.ChartOptions1.SelectionChanged += new EventHandler(ChartOptions1_SelectionChanged);
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que o estilo do grfico atualizado
corretamente quando voc seleciona um boto de opo.
Para testar seu documento
4. Pressione F5 para executar o projeto.
5. Selecione vrios botes de opo.
6. Confirme que o estilo do grfico altera para correspondem seleo.
Prximas etapas
Essa explicao passo a passo mostra noes bsicas de usando botes de opo e
programaticamente alterando estilos do grfico em documentos do Word 2003. Aqui esto
algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Use uma Relao mestre / detalhes quando exibir dados nos controles.
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto Documento do Word com o nome My Word Actions Pane. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Word Actions Pane projeto
para Solution Explorer o Visual Studio.
Adicionar controles ao painel de aes
Para essa explicao passo a passo, necessrio um controle painel Aes que contm controles
ligados a dados Windows Forms. Adicionar uma fonte de dados para o projeto, e arraste os
controles a partir da Data Sources janela para o controle painel Aes.
Para adicionar um controle painel Aes
4. Selecione o My Word Actions Pane projeto no Solution Explorer.
5. No menu Project, selecione Add New Item.
6. Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl, e clique em Add
Para adicionar uma nova fonte de dados para o projeto
9. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources Clique dentro do documento do Word e marque novamente. no estiver
disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
Visual C# Consolidado 1144
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado e Products tabelas. o Suppliers
17. Clique em Finish.
O assistente adiciona a Suppliers tabela e Products Tabela janela Data Sources. Ele tambm
adiciona um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes
13. Na janela Data Sources, expanda a Suppliers tabela.
14. Clique na seta suspensa no n Company Name, e selecione ComboBox.
15. Arraste CompanyName da janela Data Sources para o controle painel Aes.
Um ComboBox controle criado no controle painel Aes. Ao mesmo tempo, nomeado
SuppliersBindingSource, um adaptador de tabela, e um DataSet so adicionados ao projeto
no bandeja de componentes. um BindingSource
Observao
Um navegador de ligao tambm adicionado para o bandeja de componentes e para o topo do
controle painel Aes. Voc remover esse controle posteriormente no explicao passo a passo
o.
16. Mover a caixa de combinao para que ele seja sob o rtulo e alterar a Size propriedade
171, 21.
17. Expandir a Products tabela na janela Data Sources.
18. Clique na seta suspensa no n ProductName, e selecione ListBox.
19. Arraste ProductName para o controle painel Aes.
Um ListBox controle criado no controle painel Aes. Ao mesmo tempo, chamado
ProductBindingSource e um adaptador de tabela so adicionados para o projeto no bandeja
de componentes. um BindingSource
20. Do SuppliersBindingNavigator Selecione na bandeja e Component pressione DELETE.
Observao
Excluindo o SuppliersBindingNavigator faz no remover todos os o cdigo que foi gerado para ele.
Voc pode remover este cdigo.
21. Mover a caixa de listagem para que ele seja sob o rtulo e alterar a Size propriedade
171,95.
22. Arraste controlar e coloc-lo a caixa de listagem abaixo. de para o painel Aes um Button
o Toolbox
23. Clique com o boto direito do mouse clique Properties no menu de atalho, e altere as
seguintes propriedades: o Button,
Visual C# Consolidado 1145
Propriedade Value (Valor)
Name Inserir
Text Inserir
24. Redimensionar o controle de usurio para ajustar os controles.
Configurando a fonte de dados
Nesta seo, voc adicionar cdigo ao Load Evento do controle painel Aes para preencher o
controle com dados da DataTable. Do DataSource voc ir ento definir e DataMember
propriedades para cada controle.
Para carregar o controle com dados
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Excel. Para obter mais informaes, Vinculao de Dados
para controles em um painel Aes do Excel Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Walkthrough: criar uma marca inteligente que converte
Temperatures de Fahrenheit para Celsius
Essa explicao passo a passo demonstra criar uma marca inteligente que reconhece Fahrenheit
seqncias de temperatura. A marca inteligente inclui uma ao que converte o valor de
temperatura em Celsius, e substitui o texto reconhecido por um Celsius formatado Seqncia de
temperatura.
Durante este explicao passo a passo, voc aprender como:
Criar uma ao que recupera dados da marca inteligente e modifica o texto de reconhecido
marca inteligente.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto Documento do Word com o nome My Smart Tag, usando o Visual Basic
ou C#. Verifique que Create a new document est selecionada. Para obter mais informaes,
consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Smart Tag projeto para Solution
Explorer o Visual Studio.
Configurando o projeto
Para esta etapa, voc ir configurar o projeto para executar o cdigo fornecido nessa explicao
passo a passo.
Para configurar seu projeto
5. No menu Project, clique em Add Reference.
6. Na guia COM, selecione biblioteca tipo 2.0 marcas inteligentes Microsoft e clique em OK.
7. No Solution Explorer, clique com o boto direito do mouse ThisDocument.vb (em Visual
Basic) ou ThisDocument.cs (em C#) e clique em View Code.
8. Adicione a seguinte linha de cdigo para o topo do arquivo:
Visual C# Consolidado 1149
C#
using System.Text.RegularExpressions;
Criando a marca inteligente
Nesta etapa, voc ser criar uma Visual Studio Tools for Office marca inteligente e adicion-lo
para o documento. Tambm ir adicionar uma expresso regular para a lista de termos que
reconhece a marca inteligente, e criar uma ao que estar disponvel quando o usurio clica a
marca inteligente.
Para criar a marca inteligente
4. Substituir manipulador ThisDocument_Startup de eventos na classe ThisDocument pelo
cdigo a seguir. Este cdigo cria uma SmartTag que representa a Visual Studio Tools for
Office marca inteligente, e adiciona uma expresso regular para a lista de termos que
reconhece a marca inteligente.
C#
private Microsoft.Office.Tools.Word.Action action1; private void ThisDocument_Startup(object
sender, System.EventArgs e) { Microsoft.Office.Tools.Word.SmartTag smartTag1 = new
Microsoft.Office.Tools.Word.SmartTag( "www.microsoft.com/Demo#DemoSmartTag",
"Demonstration Smart Tag"); smartTag1.Expressions.Add(new Regex( @"(?'number'[+-]?\b[0-
9]+)?\s?(F|f)\b"));
5. Criar uma nova Action e adicion-lo para a Actions propriedade da marca inteligente. A
Action representa um item que o usurio pode clicar no menu de marcas inteligentes.
C#
action1 = new Microsoft.Office.Tools.Word.Action( "Convert to Celsius"); smartTag1.Actions = new
Microsoft.Office.Tools.Word.Action[] {action1};
6. Do SmartTag anexar a marca inteligente para o documento, adicionando propriedade
VSTOSmartTags. Na C#, anexar um manipulador de eventos para o Click evento da ao.
C#
this.VstoSmartTags.Add(smartTag1); action1.Click += new
Microsoft.Office.Tools.Word.ActionClickEventHandler( action1_Click); }
Criar um manipulador de eventos para a ao
Nesta etapa, voc ir adicionar um manipulador de eventos para o Click evento da ao. O
manipulador de eventos recupera o Fahrenheit valor de temperatura da chave number, que est
no conjunto de propriedades da marca inteligente. O manipulador de eventos converte o
Fahrenheit valor de temperatura para Celsius,. e substitui a seqncia reconhecido Neste
exemplo, a chave number identifica um grupo capturado da expresso regular atribudo a marca
inteligente. Para obter mais informaes sobre propriedade Sacos e expresses regulares em
Visual Studio Tools for Office marcas inteligentes, consulte Arquitetura marcas inteligentes.
Para criar o manipulador de eventos
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual C# Consolidado 1151
Criar um projeto de instalao que voc pode usar para criar um arquivo do Windows
Installer.
Modifique o projeto de instalao para que o arquivo Windows Installer instala sua
Microsoft Visual Studio 2005 Tools for the Microsoft Office System soluo.
Adicionar uma etapa para o projeto de instalao para que Arquivo do Windows Installer
edita o manifesto do aplicativo incorporados no Visual Studio Tools for Office documento de
soluo.
Essa explicao passo a passo pressupe que o computador de destino j tiver os pr-requisitos
instalados para executar Visual Studio Tools for Office solues. Voc cria o arquivo Windows
Installer no o verificar ou instalar esses pr-requisitos. Para obter mais informaes sobre os pr-
requisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Para adicionar uma caixa de mensagem a um evento de inicializao
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
15. No menu File, clique em Save All.
16. Na caixa Save Project de dilogo, digite C:\Walkthroughs na caixa Location.
17. Clique em Save.
18. Pressione F5 para executar o projeto.
Visual C# Consolidado 1161
O Excel iniciado e aparecer a caixa de mensagem.
19. Fechar a caixa de mensagem.
20. Feche o Excel.
21. No designer do Visual Studio, localize e selecione na guia para My Security Test.xls.
22. Feche My Security Test.xls (a superfcie do design de planilha Excel) no designer do
Visual Studio.
Feche todos os instncias do Excel antes de alterar a diretiva de segurana.
Quando voc criado o projeto de pasta de trabalho do Excel, o assistente adicionado um novo
grupo de cdigo de segurana e um grupo de cdigos filho diretiva de segurana Runtime no
nvel do usurio.
Em seguida, voc remover o grupo de cdigos que criou o assistente.
Remover o grupo de cdigos padro
Localize e remova o grupo de cdigo padro que foi criado.
Para remover um grupo de cdigos
9. No Painel de Controle, abra Administrative Tools.
10. Executar Microsoft .NET Framework 2.0 Configuration.
11. No modo de exibio de rvore no lado esquerdo, expanda .NET Framework 2.0
Configuration,, expandir Runtime Security Policy, expandir User, expandir Code
Groups, Expandido All_Code e My Computer expanda VSTOProjects.
No um GUID para cada projeto tenha criado. Expanda cada GUID para ver o caminho
para o documento associado.
12. Clique com o boto direito do mouse o GUID de C:\Walkthroughs\My Security Test\My
Security Test\bin\My Security Test.xls grupo de cdigos, e, em seguida clique Delete no
menu de atalho.
Ser exibida uma caixa de dilogo perguntando se voc tiver certeza que deseja excluir
este grupo de cdigos.
13. Clique em Yes.
14. Voltar para Visual Studio, e pressione F5 para executar o projeto meu teste de segurana.
Ser exibida informando a atual poltica de segurana .NET permite que no no que a
personalizao para executar uma mensagem de erro.
15. Clique em OK.
16. Feche o Excel.
O conjunto no pode ser executado se ele no tiver permisso explcita na Diretiva de Segurana
Microsoft .NET.
Em seguida, conceda permisso para o conjunto usando um nome forte em vez de uma URL para
prova.
Dando um nome de alta segurana para o conjunto
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Visual C# Consolidado 1162
Para criar um nome forte
9. No menu Project no Visual Studio, clique em My Security Test Properties.
10. Clique na Signing guia.
11. Selecione Sign the assembly.
12. No, o Choose a strong name key file list clique New.
13. Na caixa Create Strong Name Key de dilogo, digite SecurityTestKey na caixa Key file
name.
14. Desmarque a Protect my key file with a password caixa de seleo.
15. Clique em OK.
O arquivo SecurityTestKey.snk de chave aparece no Solution Explorer.
16. No menu Build, clique em Build Solution Para criar o conjunto contra o par de chaves
nome forte.
Conceder confiana com base no nome de alta segurana
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Para conceder confiana com base em nome forte
10. Abra Microsoft .NET Framework 2.0 Configuration novamente.
11. Clique com o boto direito do mouse no VSTOProjects n e clique New no menu de
atalho
12. Digite o nome Security Test Strong Name para o novo grupo de cdigos, e clique em
Next.
13. Na lista Choose the condition type for this code group, clique Strong Name.
14. Clique em Import.
15. Procure C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana Test\bin\My
para Visual Basic ou C:\Walkthroughs\My segurana Test\My segurana Test.dll segurana
Test\bin\debug\My no C#, e clique em Open.
16. Clique em Next.
17. Clique Next para aceitar o FullTrust conjunto de permisses e clique em Finish.
18. Fechar Microsoft .NET Framework 2.0 Configuration.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
Para testar sua pasta de trabalho
3. Pressione F5 para executar o projeto.
4. Confirme se a caixa de mensagem aparece.
COMO: Adicionar Controles a Documentos do Office
Um controle um componente no documento usado para exibir informaes ou aceitar entrada do
usurio. Voc pode adicionar controles Windows Forms para o Microsoft Office Excel 2003 e
Visual C# Consolidado 1163
Microsoft Office Word 2003 documentos em tempo de criao ou em tempo de execuo. Por
exemplo, voc pode adicionar um ComboBox controle a sua planilha para que os usurios possa
selecionar em uma lista de opes. Voc tambm pode adicionar controles host, como controles
Bookmark e NamedRange controles, para documentos do Office. Para obter mais informaes,
consulte Controles host do Word e Controles host do Excel.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Adicionando controles em tempo de design
Para arrastar um Windows Forms controle para o documento
3. Crie ou abra um projeto de pasta de trabalho do Excel ou projeto Documento do Word no
Visual Studio para que o documento fique visvel no designer. Para obter informaes sobre
como criar projetos, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
4. Na guia Common Controls Da Clique no controle que voc deseja adicionar e arraste-o
para o documento. o Toolbox,
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED(" WinForms.Control.Host" ," " )
no Formula Bar. Este texto necessrio e no devem ser excludos.
Para desenhar um Windows Forms controle sobre o documento
4. Crie ou abra um projeto de pasta de trabalho do Excel ou projeto Documento do Word no
Visual Studio para que o documento fique visvel no designer. Para obter informaes sobre
como criar projetos, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
5. Na guia Common Controls da caixa de ferramentas, clique no controle voc deseja
adicionar.
6. No documento, clique no local em que a extremidade superior esquerda do controle para
ser localizado, e arraste para onde voc deseja o canto inferior-direito do controle seja
localizado.
O controle adicionado para o documento com o local especificado e tamanho.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED(" WinForms.Control.Host" ," " )
no Formula Bar. Este texto necessrio e no devem ser excludos.
Visual C# Consolidado 1164
Para adicionar um controle Windows Forms para o documento clicando uma nica vez
sobre o controle
4. Crie ou abra um projeto de pasta de trabalho do Excel ou projeto Documento do Word no
Visual Studio para que o documento fique visvel no designer. Para obter informaes sobre
como criar projetos, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
5. Na guia Common Controls Da clique Toolbox, o controle voc deseja adicionar
6. Um documento, clique onde desejar o controle a ser adicionado.
O controle adicionado ao documento com o tamanho padro.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED(" WinForms.Control.Host" ," " )
no Formula Bar. Este texto necessrio e no devem ser excludos.
Para adicionar um controle Windows Forms para o documento clicando duas vezes no
controle
3. Crie ou abra um projeto de pasta de trabalho do Excel ou projeto Documento do Word no
Visual Studio para que o documento fique visvel no designer. Para obter informaes sobre
como criar projetos, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
4. Na guia Common Controls Controle voc deseja para adicionar de clique duplo no
Toolbox.
O controle adicionado para o documento no centralizar do documento ou painel ativo.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED(" WinForms.Control.Host" ," " )
no Formula Bar. Este texto necessrio e no devem ser excludos.
Para adicionar um controle Windows Forms para o documento, pressionando a tecla
ENTER
3. Crie ou abra um projeto de pasta de trabalho do Excel ou projeto Documento do Word no
Visual Studio para que o documento fique visvel no designer. Para obter informaes sobre
como criar projetos, consulte Como criar Ferramentas do Visual Studio para projetos do
Office:.
4. Na guia Common Controls Da Clique no controle que voc deseja adicionar e pressione a
tecla ENTER. o Toolbox,
O controle adicionado para o documento no centralizar do documento ou painel ativo.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED(" WinForms.Control.Host" ," " )
no Formula Bar. Este texto necessrio e no devem ser excludos.
Visual C# Consolidado 1165
Voc tambm pode adicionar controles Windows Forms dinamicamente a um documento em
tempo de execuo usando os mtodos auxiliar fornecidos pelo Microsoft Visual Studio 2005
Tools for the Microsoft Office System. No exemplo abaixo, clula A1 de um projeto de aplicativo
Excel. adicionado um Button Para obter informaes sobre como adicionar outros controles
Windows Forms, consulte Adicionar controles a documentos do Office em tempo de execuo.
Adicionando controles em tempo de execuo
Para adicionar um Windows Forms controlar programaticamente
Este cdigo deve ser colocado em uma classe folha, no na classe ThisWorkbook.
Visual C# Consolidado 1166
Como: Criar menus do Office programaticamente
Este exemplo cria um menu chamado New Menu na barra de menus do Microsoft Office Excel
2003. O novo menu colocado esquerda do menu Help. Ele contm um comando de menu.
Quando o comando de menu for clicado, texto ser inserido em uma clula na Sheet1.
Para obter um exemplo de personalizao interface de usurio no Microsoft Office Word 2003,
consulte COMO: Criar Barras de Ferramentas do Office por Programao e Walkthrough: Criando
menus de atalho para indicadores.
Adicione o seguinte cdigo classe ThisWorkbook.
Observao
Defina a Tag propriedade nos controles quando voc adiciona manipuladores de eventos. Office
usa a Tag propriedade para manter controle de manipuladores de eventos para um especfico
CommandBarControl. Se a Tag propriedade estiver em branco, os eventos no so tratados
corretamente.
Observao
Declarar o variveis menu no nvel de classe INSTEAD OF dentro o mtodo onde eles so
chamados. Isso garante que as variveis menu permanecer no escopo, desde que o aplicativo
est sendo executado. Caso contrrio, o item ser removido do coleta de lixo em algum momento
indeterminado, e seu cdigo do manipulador de eventos pra de funcionar.
Exemplo
C#
// Declare the menu variable at the class level. private Office.CommandBarButton menuCommand; private
string menuTag = "A unique tag"; // Call AddMenu from the Startup event of ThisWorkbook. private void
ThisWorkbook_Startup(object sender, System.EventArgs e) { CheckIfMenuBarExists(); AddMenuBar(); } //
If the menu already exists, remove it. private void CheckIfMenuBarExists() { try { Office.CommandBarPopup
foundMenu = (Office.CommandBarPopup) this.Application.CommandBars.ActiveMenuBar.FindControl(
Office.MsoControlType.msoControlPopup, System.Type.Missing, menuTag, true, true); if (foundMenu !=
null) { foundMenu.Delete(true); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // Create the
menu, if it does not exist. private void AddMenuBar() { try { Office.CommandBarPopup cmdBarControl =
null; Office.CommandBar menubar = (Office.CommandBar)Application.CommandBars.ActiveMenuBar; int
controlCount = menubar.Controls.Count; string menuCaption = "&New Menu"; // Add the menu.
cmdBarControl = (Office.CommandBarPopup)menubar.Controls.Add(
Office.MsoControlType.msoControlPopup, missing, missing, controlCount, true); if (cmdBarControl != null)
{ cmdBarControl.Caption = menuCaption; // Add the menu command. menuCommand =
(Office.CommandBarButton)cmdBarControl.Controls.Add( Office.MsoControlType.msoControlButton,
missing, missing, missing, true); menuCommand.Caption = "&New Menu Command"; menuCommand.Tag
= "NewMenuCommand"; menuCommand.FaceId = 65; menuCommand.Click += new
Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler( menuCommand_Click); } } catch
(Exception e) { MessageBox.Show(e.Message); } } // Add text to cell A1 when the menu is clicked. private
Visual C# Consolidado 1167
void menuCommand_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) {
Globals.Sheet1.Range["A1", missing].Value2 = "The menu command was clicked."; }
COMO: Criar Barras de Ferramentas do Office por
Programao
Este exemplo cria uma barra de ferramentas denominada Teste no Microsoft Office Word 2003.
Ele aparece perto no meio do documento e contm dois botes. Quando um boto clicado, uma
caixa de mensagem aparece. Para obter um exemplo de personalizao a interface do usurio do
Office no Microsoft Office Excel 2003, consulte Como: Criar menus do Office programaticamente.
Adicione o seguinte cdigo classe ThisDocument.
Observao
Declarar o variveis barra de comando no nvel de classe INSTEAD OF dentro o mtodo onde
eles so chamados. Isso garante que as variveis barra comando permanecer no escopo, desde
que o aplicativo est sendo executado. Caso contrrio, o item ser removido do lixo e seu cdigo
do manipulador de eventos no executado.
Exemplo
C#
// Create the command bar variables at the class level. Office.CommandBar commandBar;
Office.CommandBarButton firstButton; Office.CommandBarButton secondButton; private void
ThisDocument_Startup(object sender, System.EventArgs e) { AddToolbar(); } private void AddToolbar() {
try { commandBar = Application.CommandBars["Test"]; } catch (ArgumentException e) { // Toolbar named
Test does not exist so we should create it. } if (commandBar == null) { // Add a commandbar named Test.
commandBar = Application.CommandBars.Add("Test", 1, missing, true); } try { // Add a button to the
command bar and an event handler. firstButton =
(Office.CommandBarButton)commandBar.Controls.Add(1, missing, missing, missing, missing);
firstButton.Style = Office.MsoButtonStyle.msoButtonCaption; firstButton.Caption = "button 1";
firstButton.Tag = "button1"; firstButton.Click += new
Office._CommandBarButtonEvents_ClickEventHandler(ButtonClick); // Add a second button to the
command bar and an event handler. secondButton =
(Office.CommandBarButton)commandBar.Controls.Add(1, missing, missing, missing, missing);
secondButton.Style = Office.MsoButtonStyle.msoButtonCaption; secondButton.Caption = "button 2";
secondButton.Tag = "button2"; secondButton.Click += new
Office._CommandBarButtonEvents_ClickEventHandler(ButtonClick); commandBar.Visible = true; } catch
(ArgumentException e) { MessageBox.Show(e.Message); } } // Handles the event when a button on the new
toolbar is clicked. private void ButtonClick(Office.CommandBarButton ctrl, ref bool cancel) {
MessageBox.Show("You clicked: " + ctrl.Caption); }
Visual C# Consolidado 1168
Dispositivos Inteligentes
Esta pgina contm links para a Ajuda sobre tarefas de programao de dispositivos inteligentes
amplamente utilizadas. Para ver outras categorias de tarefas populares abordadas na Ajuda,
consulte Como Fazer em C#.
O que h de novo em projetos Smart Device
Os seguintes recursos novos ou expandido esto disponveis no Visual Studio 2005.
O que h de novo no desenvolvimento visual aplicativos
dispositivos C++
Inclui Visual Studio 2005 Desenvolvimento do dispositivo no Visual C++. Anteriormente,
desenvolver projetos de dispositivo com Visual C++ necessria uma verso do eMbedded Visual
C++. Os novos recursos detalhados nas sees a seguir so aprimoramentos sobre eMbedded
Visual C++.
Ambiente de desenvolvimento integrado (IDE)
Destino vrios sistemas operacionais
O Visual Studio 2005 conjunto de ferramentas fornece a capacidade para destino Pocket PC
2003, Smartphone 2003, personalizados SDKs baseado em Windows CE 5.0-, e libera SDK
futura.
Sistema do projeto
O sistema do projeto agora associa plataformas a suas arquiteturas CPU com suporte. Verses
anteriores do eMbedded Visual C++ permitido a seleo de uma arquitetura de CPU que no foi
aceito pelo atual do projeto ativo.
O IntelliSense
No Visual Studio 2005, IntelliSense reflete entre os arquivos de cabealho Software Development
Kit (SDK) para fornecer informaes precisas sobre a plataforma de destino.
Modo misto Solutions
Ativa Visual Studio 2005 desenvolvedores do dispositivo para ter tanto gerenciados, cdigo Basic,
Visual C# ou Visual e no gerenciado, Visual C++, cdigo no mesmo soluo. Ele tambm
habilitar rea de trabalho e dispositivo Cdigo Visual C++ para estar no mesmo projeto.
Instalar do aplicativo
Permite que os desenvolvedores para compactar seus aplicativos do dispositivo e criar um
instalador da rea de trabalho para distribuir os aplicativos para dispositivos.
Aplicativos personalizados e assistentes de classe
Torna Visual Studio 2005 fcil a gravar aplicativo e assistentes de classe para projetos de
dispositivo.
Visual C# Consolidado 1169
Editor de recursos
O Resource Editor e CAPEdit controles. inclui recursos especficos do dispositivo, como o State
of Input Panel
Depurao
O Visual Studio 2005 depurador do dispositivo C++ contm o seguintes recursos novos ou
aperfeioamentos:
Microsoft (ATL) para dispositivos Active Template Library e Microsoft MFC (para
dispositivos Foundation Classes) foram atualizadas para o cdigo 8.0 base.
Voc pode criar bancos de dados do SQL Server Mobile, atribuir senhas, alterar
esquemas, e executar outras tarefas de gerenciamento banco de dados fundamental usando o
Visual Studio IDE
Voc pode usar DataSets digitados, ResultSets, objetos comerciais, SQL Server bancos
de dados, bancos de dados do SQL Mobile, ou servios da Web como fontes de dados.
Voc pode arrastar e soltar essas fontes de dados de janela fontes de dados para um
formulrio do Windows para gerar controles ligados a dados de sua escolha.
Observao
O Data Source Configuration Wizard no est disponvel para projetos que destino verso 1.0
do .NET Compact Framework.
Arquitetura SQL Mobile Server
SQL Server Mobile representa o mecanismo de dados local melhor para dispositivos que so
conectados apenas ocasionalmente. Voc pode programar com o .NET Compact Framework para
aplicativos gerenciados ou Microsoft Visual C++ para dispositivos para aplicativos nativos. Para
obter mais informaes, consulte SQL Server Mobile Architecture.
Uso Tpico do SQL Server Mobile
SQL Server Mobile oferece uma soluo para dados conectados ocasionalmente cenrios de
acesso em dispositivos mveis. Cenrios empresariais mveis com freqncia so necessrias
para trabalhar com dados quando a conectividade no est disponvel. SQL Server Mobile aborda
esses cenrios, fornecendo um armazenamento relacional Rich que pode ser sincronizado ao
SQL Server quando uma conexo est disponvel. Para obter mais informaes, consulte Typical
Uses of SQL Server Mobile.
Observao
Voc pode usar o Microsoft SQL Server 2005 Mobile Edition como os dados armazenamento dos
aplicativos Tablet PC, bem como para aplicativos do dispositivo. Voc tambm pode ser
executado-em laptops e desktops fornecido o Visual Studio 2005 ou SQL Server 2005 instalado.
Para obter mais informaes, consulte Building a SQL Server Mobile Application for Tablet PCs.
Recursos do SQL Server Mobile
Visual C# Consolidado 1173
SQL Server Mobile fornece uma grande quantidade de recursos, como parte de um aplicativo
.NET Compact Framework ou como uma instalao independente em um dispositivo inteligente.
Dados podem ser maniuplated offline e sincronizados posteriormente a um servidor. Para obter
mais informaes, consulte SQL Server Mobile Features.
Criando e gerenciando bancos de dados SQL Server
Para desenvolver aplicativos de dados eficaz para dispositivos, necessrio um entendimento do
design do banco de dados boa e do mecanismo de banco de dados do SQL Server. Voc deve
mestre como manter bancos de dados, como torn-los seguros, como acessar e modificar os
dados neles, como eficiente consult-los, e como maximizar seu desempenho. Para obter mais
informaes, consulte Working with Databases (SQL Server Mobile) e Enhancing Performance
(SQL Server Mobile).
Conexes com um servidor
SQL Server Mobile aceita a replicao de mesclagem, acesso remoto de dados, e planejamento
de segurana e implementao para o servidor. Para obter mais informaes, consulte Managing
Connectivity (SQL Server Mobile).
Implementar tarefas comuns Programatically
Para obter as etapas para implementar as tarefas comuns atravs de programao, consulte How
to (SQL Server Mobile).
Segurana local
O mecanismo SQL Server Mobile Database oferece proteo por senha e criptografia para
proteger bancos de dados em dispositivos locais. Ele tambm fornece conectividade opes de
segurana. Para obter mais informaes, consulte Securing Databases (SQL Server Mobile).
Viso geral Solutions do dispositivo de embalagem
Implantao o processo por que voc transferir um aplicativo ou componente para o dispositivo
de destino ou dispositivos que ele destinado a executar. Antes voc pode implantar a soluo,
voc deve compact-la em um arquivo CAB. Um arquivo CAB um tipo de arquivo de arquivo
executvel que pode conter seu aplicativo, dependncias, como DLLs, recursos, arquivos da
Ajuda, e qualquer outro arquivos voc deseja incluir nele. Quando voc cria o projeto CAB,
Microsoft Visual Studio 2005 gera um arquivo INF que usado para criar o CAB. O arquivo INF
descreve qual pasta cada arquivo est para ser instalado em, quais verses do Windows CE
destina a executar, se o aplicativo o aplicativo tem permisso para ser desinstalado, e assim por
diante. Um nativo personalizado, voc tambm pode incluir em seu arquivo CAB, dll para executar
qualquer personalizado instalar etapas, como verificao de nmero de verso para Windows CE
e assim por diante. ou a .NET Compact Framework, determinar se outros componentes esto
presentes, Depois que o CAB copiado para o dispositivo de destino, o usurio toques nele para
iniciar o processo de instalao. Isso chamado exploding o CAB.
Observao
Fornece Microsoft Visual Studio 2005 ferramentas para compactar o arquivo CAB. Ele no fornece
qualquer ferramenta para implantar o arquivo cab em um dispositivo de destino. Para cenrios
simples, voc pode arrastar um arquivo CAB da sua mquina desktop para o dispositivo usando
uma conexo do ActiveSync. Vrias solues de implantao de terceiros esto disponveis para
situaes mais complexas. Para obter mais informaes, visite o Mobile e Embedded Application
Visual C# Consolidado 1174
Developer Center.
Torna Visual Studio 2005 possvel, na maioria dos casos, para executar todos os o trabalho
necessrio de embalagem diretamente no ambiente de desenvolvimento integrado Visual Studio
(IDE). Criar um arquivo CAB pelo primeiro adicionar um projeto inteligente CAB dispositivo sua
soluo existente, e adiciona o arquivos, atalhos e entradas do Registro a ele usando a mesma
interface do usurio como com projetos da instalao desktop. Quando voc cria o projeto de
instalao, voc criar o arquivo CAB.
Existem algumas diferenas entre os arquivos CAB que voc criou para um aplicativo Pocket PC e
os voc criar para um aplicativo de Smartphone. PCs de bolso baseados em Windows Mobile
2003SE e anteriores no ofeream suporte compactados arquivos CAB ou arquivos CAB
assinado. Arquivos CAB Smartphone deve ser compactados e o arquivo exe ou dll, e o arquivo
cab em si, deve ser assinados digitalmente para que possa ser instalado no dispositivo.
Aps ter criado o arquivo CAB com Visual Studio, a prxima etapa para transferi-lo para o
dispositivo de destino usando qualquer um do meio tpico de transferncia de arquivos: atravs do
dispositivo, solicitaes de FTP ou HTTP manual copiando o desenvolvimento de mesa mquina
para uma pasta em um dispositivo conectado usando o Windows Explorer, sobre a transferncia
do ar (OTA) para Smartphones, e assim por diante.
Alternar plataformas em projetos de dispositivo
Voc pode facilmente alternar a plataforma de destino. Por exemplo destino uma plataforma
Pocket PC 2003 ou uma plataforma Smartphone usando o mesmo projeto.
Para criar um projeto direcionamento vrias plataformas no Visual C++, consulte:
Pocket PCs Windows Mobile 5.0-com base so Pre-provisioneds por OEMs; anteriores
Pocket PCs no foram normalmente.
TestCert_Privileged.pfx
TestCert_UnPrivileged.pfx
Esses arquivos.pfx conter o certificado e a chave particular correspondente. (Assinatura falhar se
voc tentar assinar um aplicativo com um certificado que no tenha uma chave particular
correspondente.) Eles tm nenhuma senha.
Importar esses arquivos.pfx para o armazenamento de certificados pessoal no computador de
mesa. Se voc tentar se import-los para outro armazenamento (tais como o armazenamento de
autoridades de certificao raiz confiveis), Visual Studio exibir um aviso de segurana
detalhadas. Para obter mais informaes, consulte Como Importar e Aplicar Certificados em
Projetos de Dispositivos.
Seleo mtodo de conexo
Durante o desenvolvimento, ele essencial para ter uma conexo entre o Smart Device e o
computador de desenvolvimento rpido e confivel. Embora as emuladores de dispositivo
inteligente podem ser usados em quase todos os estgios de desenvolvimento, teste o aplicativo
em uma pea de hardware do mundo real uma parte vital do ciclo de desenvolvimento.
Muitas opes de conexo esto disponveis, como resumidos posteriormente neste artigo. As
configuraes mais comuns so:
Cdigo trechos para C# e Visual Basic. Para obter mais informaes, consulte Criando e
usando IntelliSense Code Snippets.
Referncia C#
C/C++ Languages
Passo-a-passo: Criando aplicativos do Windows Forms para um dispositivo
Nessa explicao passo a passo, voc cria um aplicativo Windows Forms simples usando Visual
Basic ou Visual C#. e execute o aplicativo em um emulador Pocket PC Essa explicao passo a
passo demonstra a principal diferena entre rea de trabalho e dispositivo programao, ou seja,
que voc deve selecionar um dispositivo. Neste passo-a-passo, o dispositivo um emulador
interno do Pocket PC 2003.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings (Importar e Exportar Configuraes) no menu Tools
(Ferramentas). Para obter mais informaes, consulte Configuraes do Visual Studio.
Essa explicao passo a passo foi escrito usando configuraes de desenvolvimento do Visual
Basic e Visual C# configuraes Development.
Essa explicao passo a passo consiste de cinco tarefas principais:
No menu File, aponte para Add, e clique em New Project ou Existing Project.
O New Project comando abre a New Project caixa de dilogo para que voc possa criar um
novo projeto. O Existing Project comando abre a Add Existing Project caixa de dilogo para
que voc possa selecionar um projeto j existente para incluso soluo atual.
Para Porta projetos existentes
As etapas para portabilidade projetos criados em uma verso anterior do Visual Studio so
descritas na documentao geral Visual Studio Para gerenciar projetos. Para obter mais
informaes, consulte Projetos e a compatibilidade com verses anteriores e Trabalhando com
vrias verses do .NET Framework.
Como Compartilhar Cdigo Fonte Atravs de Plataformas (Dispositivos)
Voc pode compartilhar cdigo-fonte em plataformas usando constantes do compilador para
diferenciar essas sees de cdigo que dependem do destino. Constantes permitidos so
PocketPC, Smartphone,. e WindowsCE As plataformas devem direcionar a mesma verso do
.NET Compact Framework.
As etapas a seguir fornecem um exemplo simples da tcnica. Voc criar um aplicativo do Visual
Basic Pocket PC, adicionar diretivas de compilador, executar o aplicativo, fech-la, e alterar para
um aplicativo de Smartphone. Voc executar o aplicativo Smartphone para ver essa o texto da
barra de ttulo ser alterado.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Visual C# Consolidado 1185
Configuraes do Visual Studio.
Para criar e executar a verso Pocket PC
1. No menu visual studio File, aponte para New, e clique em Project.
2. Expanda Visual Basic no painel Project types,, e Smart Device Clique em Pocket PC
2003.
3. No painel Templates, clique em Device Application (1.0), e clique em OK
O acrescentadas (1.0) indica que este um projeto .NET Compact Framework verso 1.0.
4. No designer, clique com o boto direito do mouse no formulrio e no menu de atalho,
clique em Properties
5. Desmarque o Text valor da propriedade do formulrio ou seja, facilitam em branco.
6. No Solution Explorer, clique com o boto direito do mouse Form1.vb e depois no menu
de atalho, clique em View Code.
7. Expanda a Windows Form Designer generate code regio.
8. Aps InitializeComponent() em pblica New() Sub, insira o cdigo a seguir:
#If PocketPC Then Me.Text = "PPC2003" #Else Me.Text = "Smartphone" #Endif
9. No menu Debug, clique em Start Debugging.
10. Na caixa Deploy <Projectname> de dilogo, clique em Pocket PC 2003 SE Emulator, e
clique em Deploy
O aplicativo Pocket PC executado no emulador com PPC2003 na barra de ttulo do
formulrio.
Para criar e executar a verso Smartphone
1. Feche o emulador sem salvar estado.
Se uma mensagem for exibida indicando que a conexo foi perdida, clique em OK.
2. No menu Project, clique em Change Target Platform.
3. Na caixa Change to Na caixa Change Target Platform de dilogo, selecione
Smartphone2003, e depois clique em OK.
4. Na mensagem caixa avisando que o projeto ser fechado e reaberto, clique em Yes.
Observe que a caixa Dispositivos de destino na barra de ferramentas agora exibe
Smartphone 2003 SE Emulator.
5. No menu Debug, clique em Start Debugging.
6. Na caixa Deploy <Projectname> de dilogo, clique em Smartphone 2003 SE Emulator,
e clique em Deploy
O aplicativo Smartphone executado no emulador com Smartphone na barra de ttulo do
formulrio.
Como Alterar Plataformas em Projetos de Dispositivos
Voc pode alternar constantemente entre plataformas no mesmo projeto. Por exemplo, se o
objetivo for uma plataforma Pocket PC, voc pode alternar para direcionar uma plataforma
Windows CE,, desde que a nova plataforma atinge a mesma verso do .NET Compact Framework
como o destino original.
Para alterar plataformas de destino em um projeto de dispositivo
Visual C# Consolidado 1186
1. No menu Project, clique em Change Target Platform.
2. Na caixa Change to, selecione uma plataforma diferente, e clique em OK
Somente as plataformas disponveis so aquelas que destino a mesma verso do .NET
Compact Framework como o projeto ativo.
Como Atualizar Projetos para Verses Posteriores do .NET Compact Framework
Este procedimento atualiza a verso .NET Compact Framework de um projeto existente se uma
verso posterior do .NET Compact Framework instalado no computador do desenvolvimento.
Para atualizar um projeto para uma verso posterior do .NET Compact Framework
1. No menu Project, clique em Upgrade Project.
Observao
Se o Upgrade Project Comando no aparecer no menu, nenhuma verso posterior da plataforma
est instalado no computador de desenvolvimento, e o processo de atualizao no est
disponvel para o projeto atual.
2. Siga as instrues no prompt que aparece.
Gerenciando Trechos de Cdigo em Projetos Dispositivos
Visual Basic inclui uma biblioteca de cdigo do IntelliSense trechos de cdigo que voc pode
inserir com alguns cliques do mouse para o aplicativo. Cada trecho executa uma tarefa de
programao completa. Voc pode tambm criar seus prprios trechos de cdigo, adicion-los
para a biblioteca, e ento us-las ao precisar deles.
adicionou Visual Studio trechos que pertencem exclusivamente para projetos de dispositivo. Os
atalhos para esses trechos todos comeam com os caracteres SD. Para obter mais informaes,
consulte Trechos de Cdigo IntelliSense Visual Basic.
Como Verificar Suporte de Plataforma para Cdigo em Projetos de Dispositivos
Sempre Visual Studio valida que seu cdigo d suporte para a plataforma de destino e gera
avisos se ele no estiver.
Voc pode interromper cdigo sem suporte de implantao por stipulating que todos os avisos
devem ser tratados como erros, para que a compilao falhar.
Mesmo que ela compila, por exemplo, o seguinte cdigo Visual Basic, seria gerar um aviso ou erro
em um aplicativo Smartphone porque Smartphone no oferece suporte botes.
Dim btn as System.Windows.Forms.Button
btn = new System.Windows.Forms.Button()
btn.Caption = "MyButton"
Para tratar todos os avisos como erros no Visual Basic
Visual C# Consolidado 1187
1. No Solution Explorer, clique com o boto direito do mouse <Projectname> e depois no
menu de atalho, clique em Properties.
2. Na guia Compile, selecione Treat all warnings as errors.
Para tratar todos os avisos como erros no Visual C#
1. No Solution Explorer, clique com o boto direito do mouse <Projectname> e depois no
menu de atalho, clique em Properties.
2. Na guia Build, selecione All na seo Treat warnings as errors.
Como Manipular Eventos do HardwareButton (Dispositivos)
Usar um HardwareButton controle para substituir as teclas do aplicativo em um PC de bolso.
Para atribuir um componente HardwareButton a uma chave aplicativo especfico
1. Na guia Device Components da Toolbox, arraste um HardwareButton componente em
um formulrio do Windows ou na bandeja componente no designer.
2. Na Bandeja de componente, clique com o boto direito do mouse no HardwareButton
controle e no menu de atalho, clique em Properties
3. Defina a AssociatedControl propriedade para o formulrio, por exemplo, Form1.
4. Defina a HardwareKey propriedade para a chave voc deseja substituir, por exemplo,
ApplicationKey1.
5. Clique no boto, por exemplo, Soft Key 1. na capa do designer
O editor de cdigo abre no manipulador Form_KeyDown de eventos.
6. Insira o cdigo a seguir:
if ((int) e.KeyCode == (int) Microsoft.WindowsCE.Forms.HardwareKeys.ApplicationKey1) { //TODO
}
Normalmente voc deve usar a //TODO seo para iniciar um aplicativo.
Como: Alterar a orientao e resoluo de formulrios (Dispositivos)
Propriedades orientao (rotao) padro j so definidas para plataformas instaladas com Visual
Studio. Use as etapas a seguir se voc precisar alterar as propriedades ou se voc tiver instalado
um SDK em que essas propriedades esto incorretas ou lacking.
Para alterar a orientao
1. Clique Options no menu Tools, e Device Tools Clique em Form Factors.
2. Selecione o fator de formulrio por exemplo, Pocket PC 2003 Portrait para o
formulrio no projeto, e depois clique em Properties.
3. Selecione Show skin in Windows Forms Designer e Enable rotation support.
4. Clique OK para fechar a Form Factor Properties caixa de dilogo e clique OK novamente
para fechar a Options caixa de dilogo.
Observao
Se o designer foi aberto quando voc alterou opes, feche e reabri-la para as alteraes sejam
efetivadas.
Visual C# Consolidado 1188
5. Clique com boto direito no designer, mouse o formulrio ou a capa, e seguida, selecione
Rotate Left ou Rotate Right para girar a capa.
Se o formulrio gira quando o dispositivo gira depende na plataforma atual e das definies
de propriedade de formulrio, da seguinte maneira:
o
Smartphone: O formulrio sempre gira quando gira o dispositivo.
o
Pocket PC: O formulrio gira por padro quando o dispositivo gira. Para impedir
que o formulrio de girar com o dispositivo, defina a WindowState propriedade do
formulrio para Normal e a FormBorderStyle propriedade None.
o
O formulrio Windows CE: No no girar por padro quando o dispositivo gira. Para
tornar o formulrio giram com o dispositivo, defina a WindowState propriedade como
Maximized.
Para alterar resoluo
1. Clique Options no menu Tools, e Device Tools Clique em Form Factors.
2. Selecione o fator de formulrio por exemplo, Pocket PC 2003 Portrait para o
formulrio no projeto, e depois clique em Properties.
3. Na caixa Form Factor Properties de dilogo, definir a resoluo vertical e horizontal.
4. Clique OK para fechar a Form Factor Properties caixa de dilogo e clique OK novamente
para fechar a Options caixa de dilogo.
Observao
Se o designer foi aberto quando voc alterou opes, feche e reabri-la para as alteraes sejam
efetivadas.
Como Alterar o Dispositivo Padro (Projetos Gerenciados)
Use as seguintes etapas para alterar o dispositivo de destino padro em projetos gerenciados.
Para selecionar um novo dispositivo de destino padro para um projeto gerenciado
1. No Solution Explorer, clique com o boto direito do mouse <Project name>.
2. No menu de atalho, clique em Properties e selecione o Devices painel.
3. Use a lista drop-down na caixa Target device Para selecionar um novo destino padro.
Como Otimizar a Ajuda para o Desenvolvimento de Dispositivos Inteligentes
Se voc selecionou Minimum ou Custom quando voc instalou a Biblioteca MSDN para Visual
Studio, voc no ter todos os Visual Studio 2005 arquivos da Ajuda que esto disponveis para
os desenvolvedores de dispositivo inteligente. Especificamente, a Minimum instalao no inclui
seo Mobile e Embedded Development da biblioteca.
A seo Mobile and Embedded Development inclui esses materiais como Pocket PC e
Smartphone SDK documentao, informaes Windows CE, e assim por diante. Tpicos na seo
geralmente so referenciados pela tpicos na seo Visual Studio inteligente Development
dispositivo, da qual est sempre instalado e concentra-se no uso do Visual Studio ambiente para
desenvolver aplicativos de dispositivo inteligente. Os procedimentos a seguir mostram como
determinar o que ajuda voc instalou, como adicionar Mobile e Embedded Development ajuda, e
como filtrar ajuda.
Para verificar se a seo Mobile and Embedded Development ajuda est instalado
Visual C# Consolidado 1189
Iniciar o aplicativo
Concluso
Pr-requisitos
Essa explicao passo a passo depende da soluo criada com outro explicao passo a passo,
Passo-a-passo: Hello World: Um exemplo de interoperabilidade COM para dispositivos
inteligentes. Certifique-se de que essa explicao passo a passo hello world possui com xito
criado e executado foi.
Ativar anexo do depurador gerenciado
Por padro, dispositivos, incluindo emuladores, no permitir o depurador gerenciado para anexar
a processos que j esto em execuo. Anexar o depurador gerenciado a um processo j em
execuo uma situao que geralmente encontrados em solues de dispositivo que incluir
cdigo gerenciado e nativo.
A primeira etapa, em seguida, para definir o dispositivo para permitir que o depurador
gerenciado para anexar a um processo j em execuo. Faa isso definindo uma chave do
Registro para o dispositivo.
Observao
Definio da chave afeta somente anexando a processos gerenciados j-execuo. Ele no afeta
iniciar um projeto usando Start with Debugging (F5). No entanto, se voc desconectar aps Start
with Debugging, ser necessrio este processo para anexe novamente e iniciar a depurao
Visual C# Consolidado 1200
novamente.
Para ativar o depurador gerenciado para anexar a um processo em execuo
1. No menu Windows Start, aponte para All Programs, aponte para Visual Studio 2005,
aponte para Visual Studio Remote Tools, e clique em Remote Registry Editor.
2. Na janela Select a Windows CE Device, expandir Pocket PC 2003, e clique em Pocket
PC 2003 SE Emulator. Este o dispositivo de destino para essa explicao passo a passo.
3. Clique em OK.
A Connecting to Device janela de andamento abre, seguido pela abertura do emulador de
dispositivo e CE Windows o Editor do Registro remoto.
4. No Editor do Registro, expandir Pocket PC 2003 SE Emulator, e crie a seguinte chave:
depurador HKEY_LOCAL_MACHINE\SOFTWARE\Microsot\
.NETCompactFramework\Managed.
Criar a chave, com o boto direito do mouse .NETCompactFramework, apontando para
New, e, em seguida, clicando em Key.
Observe que h um espao entre " Managed " e " depurador ".
5. Criar uma DWORD chamado AttachEnabled.
Criar a DWORD clicando com o boto direito do mouse Managed Debugger, apontando
para New, e, em seguida, clicando em DWORD Value.
6. Definir como AttachEnabled o Name, e como 1 o Value.
Observao
Definir essa chave de depurao do dispositivo significativamente reduz o desempenho. Quando
voc no est depurando, desativar essa funcionalidade, redefinindo o valor de dados para 0.
7. Deixe o emulador de dispositivo aberto para as etapas restantes para preservar a
configurao do Registro. Voc pode fechar o Editor do Registro.
Iniciar o aplicativo
A prxima etapa para iniciar o aplicativo InteropSolution.
Para iniciar o aplicativo
1. Abra a soluo que voc criou na Passo-a-passo: Hello World: Um exemplo de
interoperabilidade COM para dispositivos inteligentes.
Certifique-se que Pocket PC 2003 SE Emulator aparece na caixa Target Device Na barra
de ferramentas.
2. No menu visual studio Debug, clique em Start Debugging ou pressione F5.
Essa etapa imediatamente implanta o projeto nativo, HelloCOMObject, para o emulador sem
interveno do usurio mais.
3. Quando a Deploy SayHello caixa de dilogo Abrir, selecione Pocket PC 2003 SE
Emulator, e depois clique em Deploy.
Essa etapa implanta o projeto gerenciado.
O aplicativo abre no emulador. No clique o boto ainda.
Visual C# Consolidado 1201
Definir um ponto de interrupo no cdigo nativo
A prxima etapa configurar um ponto de interrupo no cdigo nativo para preparar para anexar
o depurador nativo.
Para definir um ponto de interrupo no cdigo nativo
1. No Solution Explorer, clique com o boto direito do mouse Hello.cpp e depois no menu
de atalho, clique em View Code.
2. Insira um ponto de interrupo na linha que comea *text clicando na margem esquerda do
editor do cdigo.
O smbolo ponto de interrupo aparece como um crculo vazio com um ponto de
exclamao, indicando que atualmente no possvel resolver o ponto de interrupo. Isso
ocorre porque no possui o smbolos corretos e fontes no momento.
3. No menu visual studio Debug, aponte para Windows, e clique em Modules.
A Modules janela exibe todos os mdulos carregados at agora, por exemplo, o aplicativo
gerenciado SayHello.exe. Observe que o HelloCOMObject.dll nativo ainda no foram
carregada, porque voc no tiver clicado no boto no aplicativo.
Anexando com o depurador nativo
A prxima etapa para desanexar o depurador gerenciado para que voc pode anexar com o
depurador nativo. Lembre-se que ambos os depuradores no podem ser anexados ao mesmo
tempo para projetos de dispositivo. Essas so as etapas voc usaria qualquer tempo necessrio
para alternar entre o gerenciado e o depurador nativo.
Para anexar com o depurador nativo
1. No menu visual studio Debug, clique em Detach All.
Essa etapa desanexa o depurador gerenciado mas permite que o aplicativo para continuar
sendo executado.
2. No menu Debug, clique em Attach to Process.
3. Na caixa Transport, selecione Smart Device.
4. Para preencher a Qualifier caixa, clique em Browse.
5. Na caixa Connect to Device de dilogo, selecionar Pocket PC 2003 SE Emulator, e
clique em Connect
6. Para preencher a Attach to caixa, clique em Select.
7. Na caixa Select Code Type de dilogo, marque Debug these code types e desmarque a
Managed caixa de seleo, a Native caixa de seleo e, em seguida, clique em OK.
8. Na caixa Available Processes Selecionar SayHello.exe, e clique em Attach
Voc est agora conectado com o depurador nativo.
Executando para o ponto de interrupo Native
Voc est pronto para avanar para o ponto de interrupo voc definir no cdigo nativo. Quando
voc examine a Modules janela novamente, voc v nativo mdulos agora apresentar. No
entanto, HelloCOMObject.DLL ainda no est carregado porque voc ainda no clicou button1.
Observao
Visual C# Consolidado 1202
Se voc executou essa explicao passo a passo anterior, smbolos de depurao j podem ser
carregados, e voc pode ignorar essas etapas. Caso contrrio, a seo a seguir fornece as etapas
para carreg-los.
Para avanar execuo para o ponto de interrupo nativo
1. No formulrio Emulador de dispositivo, clique em button1.
O mundo hello! mensagem aparece no formulrio, e hellocomobject.dll aparece na janela
Modules.
Se a Symbol Status coluna de hellocomobject.dll apresentaes No symbols loaded,
siga estas etapas:
1. Clique com o boto direito do mouse hellocomobject.dll e, em seguida no menu
de atalho, clique em Load Symbols.
2. Na caixa de dilogo da Find Symbols, navegue at
InteropSolution\HelloCOMObject\Pocket PC 2003
(ARMV4)\Debug\HelloCOMObject.pdb.
3. Clique em Open.
A Symbol Status coluna altera de No symbols loaded para Symbols loaded, e
agora o indicador ponto de interrupo mostre o ponto de interrupo como resolvido.
2. Sobre o formulrio no emulador de dispositivo, clique OK da Hello World! janela, em
button1 novamente.
O indicador ponto de interrupo mostra que a execuo parou no ponto de interrupo.
3. No menu Debug, clique em Step into OU pressione F11.
Observe que a execuo movido para a linha seguinte. Isso mostra que voc pode
percorrer a parte da sua soluo nativa agora.
Anexando com o depurador gerenciado
A prxima etapa para desanexar o depurador nativo para que voc pode anexar com o
depurador gerenciado. Lembre-se que ambos os depuradores no podem ser anexados ao
mesmo tempo para projetos de dispositivo. Essas so as etapas voc usaria qualquer tempo
necessrio para alternar do nativo para o depurador gerenciado.
Para anexar com o depurador gerenciado
1. No menu visual studio Debug, clique em Detach All.
Essa etapa desanexa o depurador nativo, mas o aplicativo continua a executar.
2. No menu Debug, clique em Attach to Process e garantir que a Transport caixa contm
Smart Device.
3. Preencher a Qualifier caixa, clicando Select, selecionar Pocket PC 2003 SE Emulator,
clique em Connect.
4. Para preencher a Attach to caixa, clique em Select Selecionar Debug these code types,
e marque a Managed caixa, desmarque a Native caixa e, em seguida, clique em OK.
Se aparecer uma mensagem lembr-lo que gerenciado e nativo depurao no so
compatveis, clique em OK.
5. Na caixa Available Processes Selecionar SayHello.exe, e clique em Attach
Agora o depurador gerenciado est conectado.
Visual C# Consolidado 1203
Definir um ponto de interrupo no cdigo gerenciado
A prxima etapa para definir um ponto de interrupo no cdigo gerenciado para preparar para
conectar o depurador gerenciado.
Para definir um ponto de interrupo no cdigo gerenciado
1. No Solution Explorer, clique com o boto direito do mouse Form1.cs e depois no menu
de atalho, clique em View Code.
2. Insira um ponto de interrupo na linha string text;.
Executando para o ponto de interrupo gerenciado
Voc est pronto para avanar para o ponto de interrupo voc definir no cdigo gerenciado.
Para avanar execuo para o ponto de interrupo gerenciado
Tipo this.customersBindingSource.MoveFirst();
Para cdigo um boto Avanar
Tipo this.customersBindingSource.MoveNext();
Para cdigo um boto anterior
Tipo this.customersBindingSource.MovePrevious();
Para um boto ltimo cdigo
Tipo this.customersBindingSource.MoveLast();
Como Persistir Alteraes de Dados no Banco de Dados (Dispositivos)
Usar estes procedimentos para manter as alteraes feitas em dados em projetos de dispositivo.
As etapas abaixo, escrito em C# e contar com a tabela Clientes do banco de dados Northwind,
suponha que voc tiver um DataSet (no qualquer outro tipo de fonte de dados) na Data Sources
janela. Para obter mais informaes, consulte Como Adicionar um Banco de Dados SQL Server
Mobile a um Projeto de Dispositivo.
Para tornar dados alteraes o banco de dados
1. Arraste uma tabela da janela Data Sources at um formulrio do Windows.
2. Arraste um boto para o formulrio.
Visual C# Consolidado 1206
3. Alterar a Text propriedade do boto para Save.
4. Clique duas vezes no boto no formulrio para abrir o Editor de Cdigo no boto clique
manipulador de eventos.
5. Digite o seguinte cdigo:
this.customersBindingSource.EndEdit(); this.customersTableAdapter.Update(this.northwindDataSet.
Customers);
Como Criar um Banco de Dados SQL Server Mobile (Dispositivos)
Voc pode criar um banco dados do SQL Server Mobile se voc tiver um projeto abrir ou no. Se
o banco de dados est se torne parte de um projeto, considere cri-lo dentro do projeto como uma
fonte de dados para o projeto. Mesmo se voc criar o banco de dados fora de um projeto, voc
pode adicion-lo a um projeto mais tarde. Para obter mais informaes, consulte Como Adicionar
um Banco de Dados SQL Server Mobile a um Projeto de Dispositivo.
Observao
SQL Server Mobile no oferece suporte abrir arquivos de banco de dados em um
compartilhamento de rede.
Para criar o banco de dados fora um projeto
1. No menu View, clique em Server Explorer.
2. Clique com o boto direito do mouse Data Connections e clique Add Connection para
abrir a Add Connection caixa de dilogo.
3. Clique Change para abrir a Change Data Source caixa de dilogo.
4. Na caixa Data source Selecionar Microsoft SQL Server Mobile Edition, e clique em OK
5. Selecionar Microsoft SQL Server Mobile Edition, e, em seguida clique em OK.
6. Continue com " para continuar o processo e configurar a conexo " abaixo.
Para criar o banco de dados em um projeto
1. Com um projeto aberto, clique Add New Data Source no menu Data.
O Data Source Configuration Wizard abre.
2. Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
3. Na pgina Choose Your Data Connection, clique New Connection para abrir a Add
Connection caixa de dilogo.
4. Clique Change para abrir a Change Data Source caixa de dilogo.
5. Selecionar Microsoft SQL Server Mobile Edition, e, em seguida clique em OK.
6. Continue com " para continuar o processo e configurar a conexo " abaixo.
Para continuar o processo e configurar a conexo
1. Na caixa Add Connection de dilogo, selecione My Computer.
2. Clique em Create.
3. Na caixa Create New SQL Server 2005 Mobile Edition Database de dilogo, digite um
caminho totalmente qualificado para o novo banco de dados (por exemplo, c:\MyDB).
4. Do New Password em e Confirm Password caixas, digite uma senha (por exemplo,
MyPassword) como a senha para o novo banco de dados, e clique em OK.
Visual C# Consolidado 1207
Observao de segurana
Para projetos que sero usados em aplicativos do mundo real, escolha uma senha de alta
segurana.
5. Na caixa Add Connection de dilogo, clique Test Connection para garantir que a
conexo foi feita.
Uma mensagem aparece, indicando que a conexo de teste xito.
Observao
SQL Server Mobile no oferece suporte abrir arquivos de banco de dados em um
compartilhamento de rede.
6. Clique OK para retornar para a Add Connection caixa de dilogo e clique OK para fech-
lo.
7. Na pgina Choose Your Data Connection, selecione Yes, include sensitive data in the
connection string.
Observao de segurana
Para projetos que sero usados em aplicativos do mundo real, voc deve escolher a exclude
dados confidenciais da seqncia de conexo. No mnimo, voc deve garantir que os dados
confidenciais so criptografados.
8. Clique em Next.
Ser a Local database file caixa de mensagem exibida inquiring se voc deseja incluir o
arquivo de dados no projeto atual.
Clique em Yes.
9. Na pgina Choose Your Database Objects, selecione as tabelas ou outros objetos que
deseja incluir no seu projeto.
10. Clique em Finish.
Agora voc pode exibir o novo banco de dados como um DataSet na janela Data Sources
clicando Show Data Sources no Data menu. Para adicionar tabelas, colunas, restries, e
assim por diante para o banco de dados, consulte Gerenciar fontes de dados em projetos
de dispositivo.
Como Adicionar um Banco de Dados SQL Server Mobile a um Projeto de Dispositivo
As seguintes etapas presumem tiver um banco de dados do SQL Server Mobile disponvel na
janela Server Explorer. Para obter mais informaes, consulte Como Criar um Banco de Dados
SQL Server Mobile (Dispositivos).
Para adicionar um banco de dados do SQL Server Mobile como uma fonte de dados
1. Com um projeto Smart Device aberto, clique Add New Data Source no menu Data.
2. Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
3. Na pgina Choose Your Data Connection, selecione a seqncia de conexo de dados
que contm o nome do seu banco de dados, e clique em Next
Visual C# Consolidado 1208
Esta conexo deve ser exibida na caixa suspensa se seu banco de dados j estiver
disponvel em Server Explorer. Se a conexo de banco de dados no aparecer na lista,
clique New Connection para abrir a Add Connection caixa de dilogo, clique Browse para
abrir a Select SQL Server Mobile Edition Database File caixa de dilogo, navegue para
seu banco de dados, e, em seguida clique em Open. Em seguida clique OK para fechar a
Add Connection caixa de dilogo.
4. Na pgina Choose Your Data Connection, clique em Next.
Ser a Local database file caixa de mensagem exibida inquiring se voc deseja incluir o
arquivo de dados no projeto atual.
Clique em Yes.
5. Na pgina Choose Your Database Objects, selecione os objetos que deseja usar como
fontes dados em seu projeto.
6. Clique em Finish.
Objetos que voc selecionou no SQL Server Mobile Database so exibidos como fontes de
dados para o projeto na janela Data Sources. Para abrir a janela, clique Show Data
Sources no Data menu.
Como: Adicionar um banco de dados do SQL Server como uma fonte de dados (Dispositivos)
Voc pode usar bancos de dados do SQL Server como fontes de dados em seu projetos
dispositivo gerenciado.
Para adicionar uma conexo de dados SQL Server ao Explorer Server
1. No menu View, clique em Server Explorer.
2. Na janela Explorer Server, clique com o boto direito do mouse Data Connections e
clique Add Connection no menu de atalho.
3. Na caixa Add Connection de dilogo, clique em Change.
4. Na caixa Change Data Source de dilogo, selecionar Microsoft SQL Server, e clique em
OK Para reabrir a Add Connection caixa dilogo
5. Na caixa Server name, especifique o nome do servidor onde a fonte de dados est
localizada.
6. Faa logon no servidor.
Se o servidor usa a autenticao do SQL Server, voc precisar fornecer um nome de
usurio e senha.
7. Na caixa Select or enter a database name, selecione ou digite o nome do banco de
dados, e, em seguida, clique em OK.
A nova conexo de dados exibida no Server Explorer.
Para usar uma conexo de dados SQL Server como fonte de dados em um projeto
1. Pr-requisito: Voc deve ter um Projeto de Dispositivo Inteligente .NET Compact
Framework j abrir no IDE Visual Studio.
2. No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
3. Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
4. Na pgina Choose Your Data Connection, clique em New Connection.
5. Na caixa Add Connection de dilogo, clique em Change.
Visual C# Consolidado 1209
6. Na caixa Change Data Source de dilogo, selecionar Microsoft SQL Server, e clique em
OK Para reabrir a Add Connection caixa dilogo
7. Na caixa Server name, digite ou selecione o nome do servidor onde a fonte de dados est
localizada.
8. Faa logon no servidor.
Se o servidor usa a autenticao do SQL Server, voc precisar fornecer um nome de
usurio e senha.
9. Na caixa Select or enter a database name, selecione ou digite o nome do banco de
dados, e, em seguida, clique em OK.
10. Na pgina Choose Your Data Connection, optar por excluir dados confidenciais da
seqncia de conexo, e clique em Next.
Observao de segurana
Incluindo dados confidenciais na seqncia de conexo representa um risco de segurana.
11. Na pgina Choose Your Database Objects, selecione os objetos voc deseja usar como
fontes de dados, e clique em Finish.
A conexo de dados agora aparece como uma fonte de dados na Data Sources janela.
Como: Adicionar um objeto corporativo como uma fonte de dados (Dispositivos)
Voc pode adicionar um objeto comercial como uma fonte de dados em seu projetos de
dispositivo inteligente. Para obter mais informaes, consulte Ferramentas de Banco de Dados
Visual.
Para criar uma nova fonte de dados de um objeto
1. No menu Data, clique em Add New Data Source.
2. Na pgina Choose a Data Source Type, selecione Object.
3. Na pgina Select an Object you wish to bind to, selecione um objeto j em seu
aplicativo.
Observao
Talvez seja necessrio criar o projeto que contm o objeto antes o objeto aparece no assistente.
Voc tambm pode adicionar uma referncia a um objeto no est em seu aplicativo, clicando
Add Reference e localizar o conjunto desejado no Caixa de dilogo Add Reference. O assembly
adicionado ao modo de exibio de rvore.
4. Expanda o conjunto que contm o objeto ao qual deseja vincular a, e selecione o objeto no
modo de exibio de rvore.
5. Clique em Finish.
A fonte de dados adicionada janela Data Sources.
Para adicionar uma fonte de dados ao seu formulrio
1. No menu Data, clique Show Data Sources para abrir a Data Sources janela.
2. Selecionar itens na janela Data Sources, e arraste-os em um formulrio do Windows para
criar controles acoplados s propriedades em seu objeto. Para obter mais informaes,
consulte Viso Geral da Exibio dados.
Visual C# Consolidado 1210
Como: Adicionar um servio da Web como uma fonte de dados (Dispositivos)
Voc pode adicionar um servio da Web como uma fonte de dados em seu projetos de dispositivo
inteligente.
Conectar seu aplicativo a um servio da Web
1. No menu Data, clique em Add New Data Source.
2. Na pgina Choose a Data Source Type, selecionar Web Service, e clique em Next
3. Adicionar uma referncia ao servio da Web usando o desejado a Adicionar caixa de
dilogo Referncia da Web.
4. Clique em Finish.
A fonte de dados adicionada janela Data Sources.
Para adicionar uma fonte de dados ao seu formulrio
Abrir a View caixa de dilogo em um aplicativo em execuo clicando duas vezes uma
linha no DataGrid no emulador de dispositivo ou tocando em uma linha em um dispositivo.
Voc abrir a Edit caixa de dilogo ao clicar em (tocando) New quando o DataGrid
exibida Esta ao cria uma nova linha no DataGrid ou clicando (tocando) Edit quando a
View caixa de dilogo exibida.
Formulrios de dados so criados como modelos para personalizao. Voc deve adicionar
cdigo adequado para validar e confirmar alteraes para o banco de dados como parte dessa
personalizao.
As seguintes etapas presumem tiver um banco de dados do SQL Server Mobile disponvel na
janela Data Sources. Para obter mais informaes, consulte Como Criar um Banco de Dados
SQL Server Mobile (Dispositivos).
Para gerar os formulrios de dados
1. Arraste uma tabela no formato DataGrid da janela Data Sources para o formulrio no
designer.
Voc pode selecionar o formato, clique na seta no canto direito do nome da tabela.
2. Clique na marca inteligente no componente arrastada, e no menu de atalho, selecione
Generate Data Forms. (Se no estiver usando um mouse, o atalho do teclado para abrir a
Tasks caixa de dilogo SHIFT + ALT + F10.)
Observao
Visual C# Consolidado 1224
As caixas de dilogo brevemente so exibidas como eles so gerados no designer. Para verificar
se as caixas de dilogo so agora parte do projeto, procure-los Solution Explorer.
Para modificar dados em um aplicativo em execuo
1. Iniciar o aplicativo de dados.
O DataGrid exibida, preenchida com dados.
2. Clique duas vezes uma linha de dados.
Uma exibio de linha de resumo aparece na caixa View de dilogo. Esta exibio consiste
em um rtulo e dados para cada coluna que possui contedo. Isto , caixa View de dilogo
oculta qualquer coluna cujo valor DBNULL.
3. No menu principal, clique Edit para abrir a Edit caixa de dilogo.
Usar a Edit caixa de dilogo que exibe todas as colunas, para modificar os dados, e clique
em OK.
Os dados revisados so exibidos no DataGrid.
Para criar uma nova linha no DataGrid em um aplicativo em execuo
1. Com um aberto DataGrid, no menu principal, clique em New.
A Edit caixa de dilogo ser exibida.Use esta caixa de dilogo para adicionar uma nova
linha de dados.
2. Clique em OK.
A nova linha ser adicionada para o DataGrid.
Passo-a-passo: Empacotando uma Soluo de um Dispositivo Inteligentes para Implantao
Essa explicao passo a passo demonstra como usar Visual Studio 2005 para compactar seu
aplicativo e seus recursos em um arquivo CAB para que ele pode ser implantado em Dispositivo
Inteligente uma usurio fim na.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings (Importar e Exportar Configuraes) no menu Tools
(Ferramentas). Para obter mais informaes, consulte Configuraes do Visual Studio.
Nessa explicao passo a passo, voc comea com qualquer soluo de dispositivo inteligente
escrita Visual Basic 2005, Visual C# 2005, ou Visual C++ 2005. Para obter mais informaes,
consulte Criando um aplicativo Simple Walkthrough:.
Essa explicao passo a passo mostra como fazer o seguinte:
Se a Select Certificate caixa de dilogo exibe o certificado a ser para o projeto, selecione
o certificado, e clique em OK
O projeto est assinado com esse certificado quando o projeto criado.
Se a Select Certificate caixa de dilogo no exibir o certificado a ser para o projeto, voc
pode importar um certificado usando o Certificate Import Wizard.
Importar um certificado para um projeto de dispositivo
As etapas a seguir mostram como preencher a Select Certificate caixa de dilogo ao importar os
certificados de teste fornecidos pelo Visual Studio e aplicao da um projeto. Voc pode seguir
esse mesmo procedimento se voc desejar aplicar um certificado diferente.
Fornece Visual Studio trs elementos da interface do usurio para a tarefa de importar um
certificado para aplicar a um projeto:
O ActiveSync.
RapiConfig.exe.
Voc ter um projeto de dispositivos inteligentes Visual Basic ou Visual C# em sua soluo.
Para obter mais informaes, consulte Programao para Dispositivos usando o .NET
Compact Framework.
Voc entrou o aplicativo. Para obter mais informaes, consulte Como: Assinar um
aplicativo Visual Basic ou Visual C# (Dispositivos).
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para configurar um dispositivo em um projeto de dispositivo gerenciado
1. No Solution Explorer, clique com o projeto Visual Basic ou Visual C#, e seguida, no menu
de atalho, clique em Properties.
2. Abra a Devices pgina.
3. Na caixa Device provisioning, selecione uma das opes a seguir:
o
O dispositivo de destino no Provision
o
Configurar o armazenamento Privileged
Visual C# Consolidado 1234
o
Configurar o armazenamento Unprivileged
Como Prover um Dispositivo com um Modelo de Segurana
Voc pode definir o modelo de segurana do dispositivo explicitamente para testar um aplicativo
em vrios modelos de segurana. Depois configurao um modelo de segurana diferente se o
dispositivo j est bloqueado por fabricante do equipamento original (OEM), talvez no possvel.
No entanto, se o dispositivo no estiver protegido, voc pode prover ele com qualquer modelo de
segurana.
Os seguintes arquivos XML de modelo de segurana esto includos no Visual Studio 2005. O
local padro \Program Files\Microsoft 8\SmartDevices\SDK\SDKTools\SecurityModels Visual
Studio.
O ActiveSync.