Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Visual C Consolidada PT BR PDF
Apostila Visual C Consolidada PT BR PDF
Visual C# Consolidado 1
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 AJUDA ADICIONAIS (VISUAL C#)...........................................................................................................26
COMO FAZER EM C# .....................................................................................................................................................27
USANDO O IDE DO VISUAL C# .......................................................................................................................29
INTRODUO IDE (VISUAL C#).................................................................................................................................29
CRIANDO UM PROJETO (VISUAL C#).............................................................................................................................31
PROJETANDO 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
AJUDA 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 2
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 JAVA ............................................................................................................................155
CONVERTENDO APLICATIVOS JAVA 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 OBJETOS (GUIA DE PROGRAMAO C#) ...........................................................................................165
Visual C# Consolidado 3
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 OBJECT ...........................................................................................................................................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 4
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 AJUDA PARA ERROS DO COMPILADOR: ...........................................................................................267
PARA ENCONTRAR AJUDA 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 5
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 6
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 7
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 8
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 9
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 10
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 11
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 12
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 13
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 14
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 15
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
Visual C# Consolidado 16
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.
Visual C# Consolidado 17
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 18
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:
Assinaturas de mtodos encapsulados chamadas delegaes, que permitem notificaes
de eventos fortemente tipados.
Propriedades, que servem como accessadores de variveis membros privadas.
Atributos, que fornecem metadados declarativos sobre tipos no tempo de execuo.
Comentrios internos da documentao XML.
Se voc precisar interagir com outro software Windows como objetos COM ou DLLs nativas
Win32, voc pode fazer isso em C# atravs de um processo denominado "Interoperabilidade".
Interoperabilidade permite que programas C# faam praticamente tudo que um aplicativo C++
nativo pode fazer. C# tambm suporta ponteiros e o conceito de cdigo "inseguro" para os casos
no qual o acesso direto a memria absolutamente essencial.
O processo de compilao C# simples comparado ao C e C++ e mais flexvel do que em Java.
No h nenhum arquivo cabealho separado, e nenhum requisito de que mtodos e tipos sejam
declarados em uma ordem especfica. Um arquivo fonte C# pode definir qualquer nmero de
classes, estruturas, interfaces, e eventos.
Arquitetura da plataforma .NET Framework
Programas C# so executados no .NET Framework, um componente integrante do Windows que
inclui um sistema de execuo virtual chamado de Common Language Runtime (CLR) e um
conjunto unificado de bibliotecas de classe. O CLR implementao comercial da Microsoft do
Common Language Infrastructure (CLI), um padro internacional que a base para criar
ambientes de execuo e desenvolvimento nos quais linguagens e bibliotecas trabalham
perfeitamente juntas.
Cdigo fonte escrito em C# compilado em uma linguagem intermediria (IL) que est em
conformidade com a especificao CLI. O cdigo IL, juntamente com recursos como bitmaps e
seqncias de caracteres, armazenado em disco em um arquivo executvel chamado de
assembly, normalmente com uma extenso .exe ou .dll. Um assembly contm um manifesto que
fornece informaes sobre tipos do assembly, verso, cultura, e requisitos de segurana.
Quando o programa C# executado, o mdulo (assembly) carregado no CLR, que pode levar a
vrias aes com base nas informaes no manifesto. Em seguida, se os requisitos de segurana
forem atendidos, o CLR executa a compilao Just-In-Time (JIT) para converter o cdigo IL em
instrues nativas da mquina. O CLR tambm oferece outros servios relacionados a coleta de
lixo automtica, tratamento de exceo, e gerenciamento de recursos. Cdigo que executado
pelo CLR as vezes conhecido como "cdigo gerenciado", em contraste com "cdigo no
gerenciado" que compilado em linguagem de mquina nativa que atinge um sistema especfico.
O diagrama a seguir ilustra os relacionamentos entre o tempo de compilao e o tempo de
execuo dos arquivos de cdigo fonte C#, as bibliotecas de classes base, mdulos (assemblies),
e o CLR.
Visual C# Consolidado 19
A interoperabilidade da linguagem um recurso chave do .NET Framework. Por estar em
conformidade com o Common Type Specification (CTS), o cdigo IL produzido pelo compilador C#
pode interagir com cdigo que foi gerado a partir das verses .NET do Visual Basic, Visual C++,
Visual J#, ou qualquer uma das outras mais de 20 linguagens CTS-Compliant. Um conjunto nico
pode conter vrios mdulos escritos em linguagens .NET diferentes, e os tipos podem se
referenciar como se eles fossem escritos na mesma linguagem.
Alm dos servios de tempo de execuo, o .NET Framework tambm inclui uma biblioteca
abrangente com mais de 4000 classes organizadas em namespaces que fornecem uma variedade
de funcionalidades teis para tudo desde entrada e sada de arquivo at manipulao de
seqncia para anlise XML e controles de Windows Forms. Uma aplicao C# tpica usa
amplamente a biblioteca de classe do .NET Framework para manipular tarefas comuns de
"conexes internas".
Visual C# Consolidado 21
Consulte Implantao ClickOnce.
Suporte a Ferramentas para Assemblies Fortemente Nomeados
A caixa de dilogo Project Properties foi reprojetada, e agora inclui suporte para assinatura a
assemblies.
Consulte Propriedades do Projeto.
Assistentes de Cdigo
Os assistentes cdigo a seguir esto agora obsoletos:
Assistente para o mtodo C#
Assistente para a propriedade C#
Assistente para o campo C#
Assistente para o indexador C#
Documentao e Especificao de Linguagem
Amplamente a documentao de referncia do C# tem sido regravada para fornecer informaes
mais completas para perguntas comuns assim como avanadas de uso que os desenvolvedores
podem encontrar ao criar aplicativos em C#.
O especificador de linguagem do C# est mais integrado para o ambiente de Ajuda, mas
fornecido em dois arquivos .doc. Esses arquivos so instalados por padro em \\Microsoft
Visual Studio 8\vcsharp\specifications\1033\. As verses mais atualizadas podem
ser baixadas na Central de Desenvolvimento do C# no MSDN. Para mais informaes, consulte
Especificao de Linguagem do C#.
Melhorias na Depurao Especfica do C#
Novos recursos, incluindo Edit e Continue, foram adicionados para auxiliar o desenvolvedor C#.
Visual C# Consolidado 22
Agora possvel para passar um bloco de cdigo como um parmetro. Qualquer Lugar um
representante esperado, um bloco de cdigo poder ser usado: no necessrio para
definir um novo mtodo.
Qualificador alias Namespace
O qualificador alias espao para nome. proporciona mais controle sobre acessar membros
espao para nome (::) O global:: alias permite acesso a raiz que pode estar ocultas por
uma entidade em seu cdigo.
Classes estticas
Classes estticas so uma maneira segura e conveniente de declarar uma classe que
contm mtodos estticos que no podem ser instanciados. Em C# verso 1.2 voc seria
tenha definido o construtor de classe como particular para impedir que a classe sendo
instanciado.
Alias assembly externo
Referncia verses diferentes do mesmo componente contidos no mesmo conjunto com
esse uso expandido de palavra-chave extern.
Propriedade acessibilidade Accessor
Do get agora possvel para definir diferentes nveis de acessibilidade para e set
assessores em Propriedades.
Covarincia e Contravariance em representantes
O mtodo passado para um representante agora podem ter maior flexibilidade no seu tipo
de retorno e parmetros.
HOW TO: Declare, Instantiate, e usar um representante
Mtodo converso de grupo fornece uma sintaxe simplificada para declarar
representantes.
Buffers tamanho fixo
Em um bloco cdigo desprotegido, agora possvel para declarar estruturas de tamanho
fixo com matrizes incorporados.
Conjuntos de amigo
Conjuntos podem fornecer acesso a tipos no-pblicos para outros conjuntos.
Controle de aviso embutido
A #pragma diretiva de aviso pode ser usada para desativar e ativar determinados avisos
do compilador.
voltil
Agora pode ser aplicada a IntPtr palavra-chave volatile e UIntPtr.
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.
Visual C# Consolidado 23
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.
Visual C# Consolidado 24
Este erro ocorre sempre que parte de uma expresso em seu cdigo inatingvel. Por exemplo, a
condio false && myTest() casa com esse critrio, pois o mtodo myTest() nunca ser
executado j que o lado esquerdo da operao && sempre falso. Para corrigir isso, refaa o
teste lgico para eliminar o cdigo inacessvel.
CS0441: A class cannot be both static and sealed (Uma classe no pode
ser ao mesmo tempo esttica e lacrada)
Todas as classes estticas so tambm classes lacradas. A especificao de linguagem C#
probe a especificao de ambos os modificadores em uma classe e o compilador agora relata
isso como um erro.
Para corrigir esse erro, remova sealed da classe.
CS1699: Warning on use of assembly signing attributes (Alerta no uso de
atributos de assinatura de assembly)
Os atributos de assembly que especificam assinatura foram movidos do cdigo para opes do
compilador. Usar os atributos AssemblyKeyFile ou AssemblyKeyName no cdigo produz este
aviso.
Em vez desses atributos, voc deve usar as opes de compilador a seguir:
Use a opo de compilador /keyfile (Especifica um Arquivo Chave de Nome Forte)
(Opes do Compilador de C#) ao invs do atributo AssemblyKeyFile, e use /keycontainer
(Especifica um Continer de Chave de Nome Forte) (Opes do Compilador de C#) ao invs
de AssemblyKeyName.
No mudar para as opes de linha de comando no pode dificultar os diagnsticos do
compilador quando friend assemblies estiverem sendo usados.
Se voc estiver usando /warnaserror (Trata Aviso como Erros) (Opo do Compilador de C#),
voc pode converter de volta para um aviso adicionando /warnaserror-:1699 a linha de
comando do seu compilador. Se necessrio, voc pode desativar o aviso usando
/nowarn:1699.
Incremental compilation removed (Compilao incremental removida)
A opo /incremental do compilador foi removida. O recurso de Edio e Continuao substitui
essa funcionalidade.
Visual C# Consolidado 25
6. Clique duas vezes no novo boto para abrir o Editor de Cdigo. Visual C# inseriu um
mtodo chamado button1_Click que executado quando o boto for clicado.
7. Altere o mtodo para ter esta aparncia:
private void button1_Click(object sender, EventArgs e) {label1.Text = "Hello, World!";}
8. Pressione F5 para compilar e executar o aplicativo.
Quando voc clicar no boto, exibida uma mensagem de texto. Parabns! Voc acabou
de escrever seu primeiro aplicativo C#.
Visual C# Consolidado 26
microsoft.public.vsnet.general
Fornece um frum para perguntas e problemas no Visual Studio.
microsoft.public.vsnet.IDE
Fornece um frum para perguntas sobre como trabalhar no ambiente Visual Studio.
microsoft.public.vsnet.documentation
Fornece um frum para perguntas e problemas na documentao Visual C#.
Recursos de terceiros
O site do MSDN fornece informaes sobre sites de terceiros e grupos de notcias de atual
interesse. Para a lista mais atual dos recursos disponveis, consulte o Site MSDN Community.
Como Fazer em C#
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
O que h de novo em Projetos para Dispositivos Inteligentes... Programao para
Dispositivos Inteligentes... Depurao em Dispositivos Inteligentes... mais
Implantao
Visual C# Consolidado 27
ClickOnce O Windows Installer
Recursos adicionais
Os seguintes sites requerem uma conexo com a Internet.
Visual Studio 2005 Developer Center
Contm vrios artigos e recursos sobre o desenvolvimento de aplicativos usando o Visual
Studio 2005. Este site atualizado regularmente com novo contedo.
Visual C# Developer Center
Contm vrios artigos e recursos sobre desenvolvimento de aplicativos C#. Este site
atualizado regularmente com novo contedo.
Microsoft .NET Framework Developer Center
Contm vrios artigos e recursos em desenvolvimento e depurao de aplicativos do
Framework .NET. Este site atualizado regularmente com novo contedo.
Visual C# Consolidado 28
USANDO O IDE DO VISUAL C#
Esta seo lhe apresenta ao ambiente de desenvolvimento integrado (IDE) do Visual C# e
descreve como ele usado em todas as fases do ciclo de desenvolvimento, indo desde como
configurar um projeto at distribuir o aplicativo concludo para usurios finais.
Observao
Se voc estiver desenvolvendo um aplicativo ASP.NET 2.0, voc ir usar a IDE Visual Web
Developer, que uma parte totalmente integrada do Visual Studio 2005. Entretanto, se suas
pginas code-behind estiverem em Visual C#, voc estar utilizando o Editor de Cdigos do Visual
C# dentro do Visual Web Developer. Portanto, alguns tpicos nesta seo, como Projetando uma
interface de usurio (Visual C#), talvez no sejam completamente aplicveis a aplicativos da Web.
Ferramentas Visual C#
A seguir esto as mais importantes ferramentas e janelas no Visual C#. As janelas para a maioria
dessas ferramentas podem ser abertas a partir do menu View.
O Editor de Cdigos, para escrever cdigo fonte.
O compilador C#, para converter cdigo fonte C# em um programa executvel.
O depurador do Visual Studio, para testar seu programa.
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.
Pesquisador de objetos para exibir os mtodos e as classes disponveis em bibliotecas de
vnculo dinmico incluindo assemblies do .NET Framework e objetos COM.
Gerenciador de Documento, para navegao e pesquisa de documentao do produto em
sua mquina local e na Internet.
Como a IDE expe as ferramentas
Voc interage com as ferramentas atravs de janelas, menus, pginas de propriedades, e
assistentes na IDE. A IDE bsica tem mais ou menos esta aparncia:
Visual C# Consolidado 29
Rapidamente voc pode acessar qualquer janela de ferramenta aberta ou arquivos, pressionando
CTRL + TAB. Para mais informaes, consulte Navegando e procurando (Visual C#).
Janelas do Editor e do Windows Form Designer
A janela principal usada pelo Editor de Cdigos e pelo Windows Forms Designer. Voc pode
alternar entre o modo Cdigo e o modo Design pelo pressionamento da tecla F7, ou clicando em
Code ou Designer no menu View. Enquanto estiver no modo Design, voc pode arrastar
controles da Caixa de Ferramentas para a janela , que voc poder tornar visvel clicando na
guia Toolbox na margem esquerda. Para obter mais informaes sobre o Editor de Cdigos,
consulte Editando Cdigo (Visual C#). Para obter mais informaes sobre o Windows Forms
Designer, consulte O Windows Forms Designer.
A janela Properties no canto inferior direito povoada somente no modo Design. Ela permite a
voc definir propriedades e ligar eventos a controles de interface de usurio como botes, caixas
de texto, e assim por diante. Quando voc define esta janela como Ocultar
Automaticamente, ela ser colapsada na margem direita sempre que voc alternar para o
Modo Cdigo. Para obter mais informaes sobre a janela Properties e o Designer, consulte
Projetando uma interface de usurio (Visual C#).
Gerenciador de Solues e Designer de Projeto
A janela na parte superior direita a do Gerenciador de Solues, que mostra todos os
arquivos em seu projeto em um modo de exibio de rvore hierrquica. Quando voc usa o
menu Project para adicionar novos arquivos ao seu projeto, voc os ver refletidos no
Gerenciador de Solues. Alm dos arquivos, o Gerenciador de Solues tambm
exibe as configuraes do projeto, e referncias a bibliotecas externas exigidas pelo seu
aplicativo.
As pginas de propriedades do Designer de Projeto so acessadas com o boto direito do
mouse no n Properties no Gerenciador de Solues, e clicando Open. Use essas
pginas para modificar opes de compilao, requisitos de segurana, detalhes de implantao,
e muitas outras propriedades do projeto. Para obter mais informaes sobre o Gerenciador de
Solues e o Designer de Projeto, consulte Criando um Projeto (Visual C#).
Janela do Compilador, do Depurador, e de Lista de Erros
O compilador C# no tem nenhuma janela porque ele no uma ferramenta interativa, mas voc
pode definir opes do compilador no Designer de Projeto. Quando voc clica em Build no
menu Build , o compilador C# chamado pela IDE. Se a compilao for bem sucedida, o painel
de status exibe uma mensagem compilao bem sucedida. Se houver erros de compilao, a
janela Error List aparece abaixo da janela Editor/Designer com uma lista de erros. D um duplo
clique em um erro para ir para a linha com problema no seu cdigo fonte. Pressione F1 para
consultar a documentao de Ajuda para o erro realado.
O Depurador tem vrias janelas que exibem valores de variveis e informaes de tipo quando o
seu aplicativo est sendo executado. Voc pode usar a janela do Editor de Cdigos durante a
depurao para especificar uma linha na qual pausar a execuo, e depurar o cdigo linha a linha.
Para mais informaes, consulte Criando e Depurando (Visual C#).
Visual C# Consolidado 30
Personalizando a IDE
Toda janela no Visual C# pode ser feita ancorvel ou flutuante, oculta ou visvel, ou pode ser
movida para novos locais. Para alterar o comportamento de uma janela, clique nos cones da seta
para baixo ou push-pin na barra de ttulo e selecione dentre as opes disponveis. Para mover
uma janela ancorada para um novo local ancorado, arraste a barra de ttulo at que os cones de
conta-gotas da janela apaream. Mantendo pressionado o boto esquerdo do mouse, mova o
ponteiro do mouse sobre o cone no novo local. Posicione o ponteiro sobre os cones esquerda,
direita, superior ou inferior para encaixar a janela no lado especificado. Posicione o ponteiro sobre
o cone meio para tornar a janela uma janela com guias. Como voc posiciona o ponteiro, um
retngulo azul semi-transparente aparece, o qual indica onde a janela ser ancorada no novo
local.
Voc pode personalizar muitos outros aspectos da IDE clicando em Options no menu Tools.
Para mais informaes, consulte Opes de Caixa de Dilogo do Visual Studio.
Observao
Se voc selecionar Web Site em vez de Project, a IDE (ambiente de desenvolvimento integrado)
Visual Web Developer abre. Este um ambiente separado e distinto dentro do Visual Studio para
criar aplicativos ASP.NET. A IDE Visual Web Developer usa o editor de cdigo do Visual C# para
edio de arquivos code-behind no C#. Se voc estiver criando aplicativos da Web, voc deve
usar a documentao do Visual Web Developer principalmente, mas consulte Editando cdigo
(Visual C#) para obter informaes sobre o editor C#.
A ilustrao a seguir mostra a caixa de dilogo New Project. Voc pode ver que Visual C#
est selecionado por padro na janela em esquerda, e direita, voc tem a opo de seis ou
mais modelos de projeto para escolher. Se voc expandir o Smart Device ou o n Other
Project Types esquerda, voc pode ver que diferentes tipos de projeto aparecem no lado
direito.
Visual C# Consolidado 31
Starter Kits so outros tipos de modelo de projeto. Se voc instalar um Starter Kit, voc o ver
listado na caixa de dilogo New Project. Para mais informaes, consulte Starter Kits.
Depois que voc selecionar um modelo de projeto e clicar OK, Visual Studio cria o projeto e voc
est pronto para comear a codificao. Arquivos de projeto, referncias, configuraes, e
recursos esto visveis na janela Solution Explorer (Gerenciador de Solues) direita.
Visual C# Consolidado 32
O que h em seu projeto?
Propriedades
O n Properties representa definies de configurao que se aplicam a seu projeto inteiro e
so armazenados no arquivo .csproj na sua pasta soluo. Essas configuraes incluem opes
de compilao, segurana, configuraes de implantao e muito mais. Voc faz modificaes em
seu projeto usando o Designer de Projeto, que um conjunto de Pginas de
Propriedades que voc acessa clicando com o boto direito do mouse em Properties, e
selecionando Open. Para mais informaes, consulte Modificando propriedades de projeto
(Visual C#).
Referncias
No contexto de um projeto, uma referncia simplesmente identifica um arquivo binrio que seu
aplicativo requer para executar. Normalmente, uma referncia identifica um arquivo DLL como um
dos arquivos de biblioteca de classe do .NET Framework. Ele tambm pode fazer referncia um
assembly .NET (chamado de um shim) que permite seu aplicativo chamar mtodos em um objeto
COM ou DLL Win32 nativa. Se seu programa cria uma instncia de uma classe que est definida
em algum outro assembly, voc deve adicionar uma referncia a esse arquivo em seu projeto
antes de voc compilar o projeto. Para adicionar uma referncia, clique em Add Reference no
menu Project. Todos os projetos C# por padro incluem uma referncia mscorlib.dll, que
contm as classes principais do .NET Framework. Voc pode adicionar referncias a DLLs
adicionais do .NET Framework e outros arquivos, clicando no menu Project, e selecionando
Add Reference.
Observao
No confunda o conceito de uma referncia de projeto com o conceito de tipos referncia em C#
ou outras linguagens de programao. O primeiro refere-se a um arquivo e seu local esperado no
disco. O ltimo refere-se a tipos C#, que so declarados usando a palavra-chave class.
Recursos
Um recurso um dado que est includo no seu aplicativo mas pode ser armazenado de tal forma
que pode ser modificado independentemente de outro cdigo fonte. Por exemplo, voc pode
armazenar todas as suas seqncias como recursos em vez de embut-las no cdigo fonte. Voc
pode converter as seqncias em diferentes idiomas mais adiante, e adicion-las pasta do
aplicativo que voc entrega a clientes sem precisar recompilar seu assembly. Os cinco tipos de
recursos definidos pelo Visual C# so: seqncias, imagens, cones, udio, e arquivos. Voc
adiciona, remove ou edita recursos usando o Designer de Recursos, que acessado na guia
Resources no Designer de Projeto.
Formulrios
Quando voc cria um projeto Windows Forms, o Visual C# adiciona um formulrio no projeto por
padro e chama-o Form1. Os dois arquivos que representam o formulrio so chamados
Form1.cs e Form1.designer.cs. Voc escreve seu cdigo no Form1.cs; o arquivo designer.cs
onde o Windows Forms Designer escreve o cdigo que implementa todas as aes que voc
realizou arrastando e soltando controles da Caixa de Ferramentas.
Voc pode adicionar um novo formulrio, clicando no item de menu Project, e selecionando
Add Windows Form. Cada formulrio tem dois arquivos associados a ele. Form1.cs, ou
qualquer outro nome que voc d, contm o cdigo fonte que voc escreveu para configurar o
formulrio e seus controles, como caixas de listagem e caixas de texto, e responde a eventos
como clique de boto e pressionamento de tecla. Em projetos simples do Windows Forms, voc
faz a maioria ou toda a sua codificao nesse arquivo.
O arquivo Designer.cs contm o cdigo fonte que o Forms Designer escreve quando voc
arrasta controles para o formulrio, define propriedades na janela Properties, e assim por
diante. Normalmente, voc no deve editar esse arquivo manualmente.
Visual C# Consolidado 33
Observao
Obviamente, se voc criar um projeto de aplicativos de console, ele no conter arquivos cdigo
fonte para Windows Forms.
Observao
Voc pode usar Visual C# para criar aplicativos de console que possuem uma interface
simplesmente baseada em texto. Para mais informaes, consulte Criando aplicativos de console
(Visual C#).
Adicionando controles
No designer, voc usa o mouse para arrastar, por Exemplo botes e caixas de texto, para uma
superfcie de projeto que representa o formulrio. A ilustrao a seguir mostra uma caixa de
combinao que foi arrastado da janela Toolbox para um formulrio no Windows Forms
Designer.
Visual C# Consolidado 34
Enquanto voc trabalha visualmente, o designer converte suas aes em cdigo fonte C# e os
grava em um arquivo de projeto chamado <nome>designer.cs onde <nome> o nome que voc
deu para o formulrio. Quando seu aplicativo executado, esse cdigo fonte ir posicionar e
dimensionar os elementos de UI para que elas apaream da mesma maneira que na superfcie de
projeto. Para mais informaes, consulte O Windows Forms Designer.
Definindo propriedades
Aps voc adicionar um controle ao seu formulrio, voc pode usar a janela Properties para
definir suas propriedades, como cor do plano de fundo e texto padro. Os valores que voc
especificar na janela Properties so simplesmente os valores iniciais que sero atribudos a
essa propriedade quando o controle criado em tempo de execuo. Em muitos casos, esses
valores podem ser acessados ou alterados programaticamente em tempo de execuo
simplesmente obtendo ou definindo a propriedade na instncia da classe de controle em seu
aplicativo. A janela Properties til em tempo de criao porque ela permite que voc procure
por todas as propriedades, eventos e mtodos suportados por um controle. Para mais
informaes, consulte Janela Properties.
Tratamento de eventos
Programas com interfaces de usurio grficas so principalmente direcionadas a eventos. Elas
aguardam at que um usurio faa algo como inserir texto em uma caixa de texto, clicar em um
boto, ou alterar uma seleo em uma caixa de listagem. Quando isso acontece, o controle, que
apenas uma instncia de uma classe do .NET Framework, envia um evento para seu aplicativo.
Voc pode optar por manipular um evento escrevendo um mtodo especial em seu aplicativo que
ser chamado quando o evento recebido.
Voc pode usar a janela Properties para especificar que eventos deseja tratar em seu cdigo;
selecione um controle no designer e clique no boto Events, com o cone de um raio, na barra
de ferramentas da janela Properties para ver os seus eventos. O diagrama a seguir mostra o
boto de eventos.
Visual C# Consolidado 35
escrever o cdigo para que o mtodo faa algo til. A maioria dos controles geram um nmero
grande de eventos, mas na maioria dos casos, um aplicativo somente precisar manipular alguns
deles, ou mesmo somente um. Por exemplo, voc provavelmente precisa manipular um evento de
Click de boto, mas no necessrio manipular seu evento Paint a menos que voc deseje
personalizar a aparncia de alguma maneira avanada.
Prximas Etapas
Para obter mais informaes sobre interfaces de usurio do Windows Forms, consulte os
seguintes tpicos:
Criando aplicativos baseados no Windows
Passo a passo: Criando um formulrio do Windows simples
Elementos de interface de usurio do Windows Forms Designer
Na biblioteca de classe do. NET Framework, System.Windows.Forms e namespaces relacionados
contm as classes usadas no desenvolvimento do Windows Forms.
Editando Cdigo
Este um contedo traduzido automaticamente que os membros da comunidade podem
editar. Como tal, a Microsoft no pode garantir a exatido ou fidelidade em relaao ao
contedo original. Voc pode melhor-lo usando os controles direita.
guest : fazer logon
minhas configuraes
faq | sugerir alteraes
Ambiente de desenvolvimento do Visual C#
Editando cdigo (Visual C#)
O Editor de cdigos do Visual C# um processador de texto para escrever cdigo fonte.
Assim como o Microsoft Word fornece suporte abrangente para frases, pargrafos, e
gramtica, o editor de cdigos C# faz o mesmo para sintaxe C# e para o .NET
Framework. Este suporte pode ser agrupado em cinco categorias principais:
O IntelliSense: Documentao continuamente atualizada sobre as classes .NET
Framework e os mtodos bsicos medida que voc digita no editor, e a gerao
de cdigo automtica.
Refactoring: reestruturao inteligente de sua base de cdigo medida que ela
evolui durante o perodo de um projeto de desenvolvimento.
Trechos de cdigo: Voc pode procurar uma biblioteca que contm padres de
cdigo repetidos freqentemente.
Sublinhado ondulado: Notificaes visuais de palavras incorretas, erro de sintaxe e
situaes de aviso conforme voc digita.
Auxlios de legibilidade: Estrutura de tpicos e colorizao.
O IntelliSense
IntelliSense o nome de um conjunto de recursos relacionados que so criados para
minimizar o tempo gasto procurando por ajuda e para ajudar voc a inserir cdigo de
forma mais precisa e eficiente. Todos esses recursos fornecem informaes sobre
palavras-chave de linguagem, tipos .NET Framework e assinaturas de mtodo medida
que voc digita no editor. As informaes so exibidas em dicas de ferramentas, caixas
de listagem, e marcas inteligentes.
Visual C# Consolidado 36
Observao
Muitos dos recursos do IntelliSense so compartilhados com outras linguagens do Visual
Studio e esto documentadas com ilustraes no n Ajuda de Codificao da biblioteca
do MSDN. As sees a seguir fornecem uma viso geral sobre o IntelliSense, com links
para a documentao mais completa.
Listas de concluso
Quando voc insere cdigo-fonte no editor, o IntelliSense exibe uma caixa de listagem
que contm todas as palavras-chave C# e classes .NET Framework. Se ele encontrar
uma correspondncia na caixa de listagem para o nome que voc est digitando, ele
seleciona o item. Se o item selecionado for o que voc deseja, simplesmente voc pode
teclar TAB e o IntelliSense terminar a digitao do nome ou palavra-chave para voc.
Para mais informaes, consulte Listas de concluso no C#.
Informaes rpidas
Quando voc passa o cursor sobre um tipo .NET Framework, o IntelliSense exibir um
Quick Info ToolTip que contm a documentao sobre esse tipo bsico. Para mais
informaes, consulte Informaes rpidas.
Membros da lista
Quando voc inserir um tipo .NET Framework no Editor de Cdigos, e ento digitar o
operador ponto ( . ), o IntelliSense exibe uma caixa de listagem que contm os membros
do mesmo tipo. Quando voc fizer uma seleo e pressionar TAB, o IntelliSense insere o
nome membro. Para mais informaes, consulte Membros da lista.
Informaes de parmetro
Quando voc inserir um nome do mtodo no Editor de cdigos, e digitar um parnteses
de abertura, o IntelliSense exibir um parmetro Info ToolTip que mostra a ordem e tipos
de parmetros do mtodo. Se o mtodo estiver sobrecarregado, voc pode rolar para
baixo atravs de todas as assinaturas sobrecarregadas. Para mais informaes, consulte
Informaes de parmetro.
Visual C# Consolidado 37
Adicionando diretivas 'using'
s vezes, voc pode tentar criar uma instncia de uma classe .NET Framework sem um
nome suficientemente qualificado. Quando isso acontece, o IntelliSense exibe uma marca
inteligente aps o identificador no resolvido. Quando voc clicar a marca inteligente, o
IntelliSense exibir uma lista de diretivas using que permitir que o identificador seja
resolvido. Quando voc seleciona um da lista, o IntelliSense adiciona a diretiva para a
parte superior de seu arquivo de cdigo fonte e voc pode continuar a codificao em sua
localidade atual. Para mais informaes, consulte Adicionar diretivas 'using'.
Refatorao
Como uma base de cdigo cresce e evolui durante o perodo de um projeto de
desenvolvimento, s vezes desejvel fazer alteraes para torn-lo mais legvel para
humanos ou mais portvel. Por exemplo, convm dividir alguns mtodos de backup em
mtodos menores ou alterar parmetros do mtodo, ou renomear identificadores. O
recurso Refactoring, que acessvel clicando no Editor de cdigos, faz tudo isso de uma
maneira que muito mais conveniente, inteligente, e completa que as ferramentas
tradicionais como pesquisa e substituio. Para mais informaes, consulte Refatorao.
Trechos de cdigo
Trechos de cdigo so unidades de uso comum em cdigo fonte C# que voc pode inserir
rapidamente com preciso e com o pressionamentos de apenas algumas teclas. O menu
trecho de cdigo acessado clicando no Editor de Cdigos. Voc pode navegar entre os
muitos trechos fornecidos com o Visual C#, e voc tambm pode criar seus prprios
trechos. Para mais informaes, consulte Trechos de cdigo (C#).
Sublinhado ondulado
Sublinhado ondulado fornece comentrios instantneos sobre erros em seu cdigo
enquanto voc digita. Um sublinhado ondulado vermelho identifica um erro de sintaxe
como ponto-e-vrgula ausente ou chaves no correspondentes. Um sublinhado ondulado
verde identifica um aviso de compilao em potencial, e azul identifica um problema Editar
e Continuar. A ilustrao a seguir mostra um sublinhado ondulado vermelho:
Visual C# Consolidado 38
Ajuda de Legibilidade
Estrutura de tpicos
Automaticamente o Editor de Cdigos trata namespaces, classes e mtodos como
regies que voc pode recolher para facilitar a localizao e leitura de outras partes do
arquivo de cdigo fonte. Voc tambm pode criar suas prprias regies recolhveis,
envolvendo o cdigo com as diretivas #region e #endregion
Colorizao
O editor oferece diferentes cores a vrias categorias de identificadores em um arquivo de
cdigo fonte C#. Para mais informaes, consulte Colorizao de Cdigo .
Visual C# Consolidado 39
NAVEGANDO E PROCURANDO
Exibio de classe
A janela Class View fornece uma exibio do seu projeto com base nas classes em vez
de usar arquivos, como no Solution Explorer. Voc pode usar a Class View para
navegar rapidamente para qualquer classe ou membro da classe em seu projeto. Para
acessas a Class View, clique em Class View no menu View.
Navegao CTRL+TAB
A qualquer momento voc pode ter vrias janelas ativas em um projeto no Visual C#.
Para navegar rapidamente para uma janela, pressione CTRL+TAB para exibir uma janela
que lista todas as ferramentas ativas e janelas do cdigo fonte. Mova as teclas de seta
mantendo pressionada a tecla CTRL para selecionar a janela a exibir.
Visual C# Consolidado 40
Barras de navegao
Na parte superior de cada janela de cdigo do editor est a barra de navegao, que
consiste em duas caixas de listagem. A da esquerda lista todas as classes definidas no
arquivo atual, e a da direita lista todos os membros para a classe que est selecionado na
caixa da lista esquerda. Voc pode ir diretamente para um mtodo selecionando-o na
caixa de listagem da direita.
Visual C# Consolidado 41
Localizar em arquivos
Pressionando CTRL+SHIFT+F voc pode abrir a caixa de dilogo Find in Files para
executar pesquisa e substituir operaes em um projeto inteiro.
Observao
Para renomear mtodos ou tipos, ou alterar os parmetros do mtodo, use o recurso
Refactoring, que mais completo e inteligente do que pesquisar e substituir. Para mais
informaes, consulte Refactorao.
Visual C# Consolidado 42
CRIANDO E DEPURANDO
(VISUAL C#)
No Visual C# voc criar um aplicativo executvel clicando em Build no menu Build (ou
pressionando CTRL+SHIFT+B). Voc pode criar e iniciar o aplicativo em uma operao
pressionando F5 ou clicando em Run no menu Debug.
O desenvolvimento implica a introduo dos seus arquivos de projeto no compilador C#, que
converte seu cdigo fonte no Microsoft Intermediate Language (MSIL) e depois associa o MSIL
com os metadados, recursos, manifesto e outros mdulos, se houver algum, para criar um
assembly. Um assembly um arquivo executvel que normalmente tem uma extenso .exe ou.dll.
medida que voc desenvolve seu aplicativo, voc pode criar uma verso de depurao para
test-lo e ver como ele executa. Finalmente, quando tudo est correto, voc criar um verso de
lanamento para implantar aos clientes.
Para obter mais informaes sobre assemblies, consulte Viso Geral Sobre assemblies.
Criar configuraes
Para especificar vrias configuraes de criao, clique com o boto direito do mouse no item de
projeto no Solution Explorer e selecione o painel Build no Project Designer. Para obter
mais informaes, consulte Introduo ao Project Designer e Opes de Compilao C#.
O Visual Studio usa a ferramenta MSBuild para criar assemblies. O MSBuild tambm pode ser
executado a partir da linha de comando e pode ser personalizado de vrias maneiras. Para mais
informaes, consulte MSBuild.
Construir erros
Se no h erros na sintaxe C#, ou identificadores que no podem ser resolvidos em um tipo
conhecido ou membro, ento a compilao no ter xito e voc ver uma lista de erros em que
aparece, por padro, diretamente abaixo do editor de cdigo. Voc pode dar um clique duplo com
o mouse na mensagem de erro para ir para a linha do seu cdigo onde ocorreu o erro.
Visual C# Consolidado 43
As mensagens de erro do compilador C# so geralmente muito claras e descritivas, mas se voc
no puder descobrir o problema, voc pode ir para a pgina de Ajuda da mensagem,
pressionando F1 com a mensagem de erro selecionada na lista de erro. A pgina de Ajuda
contm informaes adicionais teis. Se voc ainda no puder resolver o problema, ento, a
prxima etapa fazer sua pergunta em um dos grupos de notcias ou fruns do C#. Para acessar
o fruns, clique em Ask A Question no menu Community.
Observao
Se voc encontrar uma pgina de ajuda de erro de compilao que no foi til para o seu erro
especfico, voc pode ajudar a Microsoft melhorar a documentao, enviando uma descrio do
problema. Para enviar o email, clique no link na parte inferior da pgina de Ajuda que contm o
erro.
Voc tambm pode definir pontos de interrupo condicionais (tracepoints), que s iro parar a
execuo se uma condio especificada for satisfeita. Tracepoints so semelhantes aos pontos de
Visual C# Consolidado 44
interrupo exceto que eles no param a execuo, mas simplesmente gravam o valor da varivel
especificada para a janela de sada. Para mais informaes, consulte Pontos de interrupo e
Tracepoints.
Quando a execuo interrompida em um ponto de interrupo, voc pode focalizar sobre
qualquer varivel no escopo para exibir informaes sobre essa varivel. A ilustrao a seguir
mostra uma dica de dados no depurador:
Voc pode depurar seu cdigo uma linha por vez pressionando F10 aps o depurador ser
interrompido em um ponto de interrupo. Voc pode at corrigir determinados tipos de erros em
seu cdigo, e continuar a depurao sem precisar parar e recompilar o aplicativo
O depurador do Visual Studio uma ferramenta poderosa e vlido levar um tempo para ler a
documentao para compreender diferentes conceitos como Edit e Continue, Exibir Dados no
Depurador, Depurao Just-In-Time e Visualizadores.
Visual C# Consolidado 45
MODELAGEM E ANLISE DE
CDIGO (VISUAL C#)
No incomum para desenvolvedores de software trabalhar com cdigo fonte cuja arquitetura
bsica desconhecida, pois ele foi escrito por outra pessoa, ou porque ele foi escrito h tanto
tempo que seus criadores originais no mais recordam como ele funciona. Outro cenrio comum
a necessidade de entender o contedo de uma biblioteca que s est disponvel no formato
binrio. Visual C# fornece as seguintes ferramentas para ajudar voc a modelar, analisar e
compreender tipos e relacionamentos de tipos em cdigo fonte como tambm em mdulos
binrios (assemblies):
Classe Designer, para representar visualmente relacionamentos de herana e associao
entre tipos.
Pesquisador de Objetos, para examinar os tipos, mtodos e eventos exportados pelos
assemblies do .NET Framework, e DLLs nativas incluindo os objetos COM.
Metadados como fonte, para exibir informaes de tipo em mdulos (assemblies)
gerenciados como se fosse cdigo fonte em seu prprio projeto.
Alm das ferramentas listadas acima, Visual Studio Team System inclui a ferramenta Anlise de
Cdigo para Cdigo Gerenciado que inspeciona seu cdigo para uma variedade de problemas
potenciais.
Classe Designer
A classe Designer uma ferramenta grfica para modelagem visual da relao entre tipos em um
aplicativo de software ou componente; voc tambm pode us-la para criar novos tipos e refazer
ou excluir tipos existentes. A ilustrao a seguir mostra a criao de uma classe simples:
Visual C# Consolidado 46
Para adicionar um diagrama de classe a um projeto, clique em Add New Item no menu
Project , e em seguida, clique em Add Class Diagram.
Para mais informaes, consulte Projetando e exibindo classes e tipos.
Pesquisador de Objetos
O Pesquisador de Objetos permite que voc veja informaes de tipo em DLLs nativas e
gerenciadas, incluindo objetos COM. Embora as informaes que voc v no Pesquisador de
Objetos sejam semelhantes as que voc v no Class View, voc pode usar o Pesquisador de
Objetos para examinar qualquer DLL em seu sistema, no apenas aquelas referenciadas no seu
prprio projeto. Alm disso, o Pesquisador de Objetos tambm exibe comentrios da
documentao XML para o tipo selecionado. A ilustrao a seguir mostra como o Pesquisador de
Objetos exibe informaes de tipo em arquivos binrios.
Visual C# Consolidado 47
Para obter mais informaes e uma ilustrao, consulte Os metadados como fonte:
Anlise de cdigo para cdigo gerenciado
A ferramenta de anlise de cdigo para cdigo gerenciado analisa informaes de assemblies
gerenciados e relatrios assim como possveis problemas de segurana, e violaes de regras de
programao e projeto definidas nas diretrizes de projeto do Microsoft .NET Framework. Essas
informaes so apresentadas como avisos. Voc acessa a ferramenta no Designer de Projeto
clicando com o boto direito do mouse em Properties no Solution Explorer, e selecionando
Open.
Visual C# Consolidado 48
ADICIONANDO E EDITANDO
RECURSOS (VISUAL C#)
Aplicativos do Visual C# geralmente incluem dados que no esto no cdigo fonte. Esses dados
so conhecidos como um project resource (recurso de projeto) e ele pode incluir dados binrios,
arquivos de texto, arquivos de udio ou vdeo, tabelas de seqncia de caracteres, cones,
imagens, arquivos XML ou qualquer outro tipo de dados que seu aplicativo requer. Dados de
recurso de projetos so armazenados em formato XML no arquivo resx. (chamado Resources.resx
por padro) que pode ser aberta no Solution Explorer. Para obter mais informaes sobre os
recursos de projeto, consulte Trabalhando com Arquivos de Recursos.
Adicionando Recursos a Projetos
Voc pode adicionar recursos a um projeto clicando em Add Existing Item no menu Project,
ou clicando no boto Add Resource na pgina Resources no Project Designer.
Voc pode adicionar recursos ao seu projeto como recursos vinculados, que so arquivos
externos, ou como recursos incorporados, que so incorporados diretamente ao arquivo .resx.
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.
Quando voc adiciona um recurso incorporado, os dados so armazenados diretamente
no arquivo de recurso (.resx) do projeto. Somente seqncias de caracteres podem ser
armazenadas como recursos incorporados.
Editando Recursos
O Resource Designer permite que voc adicione e modifique recursos de projeto durante o
desenvolvimento ao associar um aplicativo padro para editar cada recurso. Voc acessa o
Resource Designer clicando com o boto direito do mouse em Properties no Solution
Explorer, clicando em Open e clicando na guia Resources em Project Designer. Para mais
informaes, consulte Pginas de Recursos, Project Designer. A ilustrao a seguir mostra as
opes de menu Resource Designer:
Para editar recursos incorporados, voc deve trabalhar diretamente no arquivo .resx para
manipular os caracteres individuais ou bytes. Isto porque ele mais conveniente para
armazenar tipos de arquivos complexos como recursos vinculados durante o desenvolvimento.
Voc pode usar o Binary Editor para editar arquivos de recursos, incluindo o arquivo .resx, no
nvel binrio em formato hexadecimal ou ASCII. Voc pode usar a Image Editor para editar cones
e cursores assim como arquivos JPEG e GIF, que so armazenados como recursos vinculados.
Voc tambm pode escolher outros aplicativos como editores para esses tipos de arquivo. Para
mais informaes, consulte Exibindo e Editando Recursos no Resource Editor.
Visual C# Consolidado 49
Compilando Recursos em Assemblies
Quando voc cria seu aplicativo, o Visual Studio chama a ferramenta resgen.exe para converter
os recursos do aplicativo em uma classe interna chamada Resources. Essa classe est contida
no arquivo Resources.Designer.cs que est aninhado no arquivo Resources.resx no Solution
Explorer. A classe Resources encapsula todos os recursos do projeto em propriedades get,
somente-leitura estticas, como uma forma de fornecer recursos fortemente tipados em tempo de
execuo. Quando voc constri atravs do Visual C# IDE, todos os dados de recurso
encapsulados, incluindo os dois recursos que foram incorporados ao arquivo .resx e os arquivos
vinculados, so compilados diretamente para o aplicativo assembly (o arquivo .exe ou .dll). Em
outras palavras, o Visual C# IDE sempre usa a opo /resource de compilador. Se voc constri a
partir da linha de comando, voc pode especificar a opo de compilador /linkresource que
permitir implantar recursos em um arquivo separado do aplicativo assembly principal. Este um
cenrio avanado e s necessrio em certas situaes raras. Uma situao mais comum para
implantao de recursos separadamente do aplicativo assembly principal usar assemblies
satlites conforme discutido abaixo.
Acessando Recursos em Tempo de Execuo
Para acessar um recurso em tempo de execuo, simplesmente referencie-o como voc faria para
qualquer outro membro da classe. O Exemplo a seguir mostra como recuperar um recurso bitmap
que voc nomeou para Image01.
System.Drawing.Bitmap bitmap1 = Resources.Image01;
Internamente a propriedade get utiliza a classe ResourceManager para criar uma nova instncia
do objeto.
Para obter mais informaes, consulte Recursos em Aplicativos e Gerador de Arquivos de
Recurso (Resgen.exe).
Recursos em Assemblies Satlites
Se voc estiver criando aplicativos que sero localizados (traduzidos) em vrios idiomas, voc
pode armazenar cada conjunto de seqncia de caracteres especficos de cada cultura como um
recurso em seu prprio assembly satlite. Quando voc distribuir seu aplicativo, voc incluir o
aplicativo assembly principal junto com qualquer montagem satlite adequada. Voc pode
adicionar assemblies satlite ou modificar arquivos existentes sem recompilar o aplicativo
assembly principal. Para obter mais informaes, consulte Criando Assemblies Satlites e
Localizando e Usando Recursos para uma Cultura Especfica.
Visual C# Consolidado 50
OBTENDO AJUDA (VISUAL C#)
A documentao da ajuda do Visual Studio est contida na Biblioteca MSDN, que voc pode
instalar localmente em seu prprio computador ou rede, e que tambm est disponvel na Internet
em http://msdn.microsoft.com/Library. A verso local da biblioteca consiste em uma coleo de
compactada arquivos HTML com o formato.hxs. Voc pode optar por instalar a biblioteca em sua
mquina total ou parcialmente; a instalao completa do MSDN fica prxima de 2 GB em tamanho
e inclui documentao para muitas tecnologias Microsoft. Voc pode exibir a documentao
MSDN local eonline usando o navegador do Visual Studio Help chamado Microsoft Document
Explorer.
Existem seis maneiras para acessar a ajuda enquanto trabalha no Visual C#:
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:
Tente a Biblioteca MSDN on-line primeiro, depois a documentao local se nenhuma
coincidncia for encontrada.
Tente a Biblioteca MSDN local primeiro, depois a documentao on-line se nenhuma
coincidncia for encontrada.
Tente somente a Biblioteca MSDN local.
Essas opes tambm sero exibidas na primeira vez voc chamar qualquer pesquisa. A
documentao MSDN on-line pode conter atualizaes mais recentes que a documentao local.
Portanto, se voc tiver uma conexo Internet enquanto trabalha no Visual C#, recomendvel
que voc escolha a opo de pesquisa para testar a Biblioteca MSDN on-line primeiro. De tempos
em tempos, atualizaes para a documentao local podem ser disponibilizadas para download.
Para obter mais informaes sobre atualizaes documentao, verifique o Visual Studio
Developer Center.
Pesquisa F1
F1 fornece recursos de pesquisa contextual. No editor de cdigo, voc pode acessar a
documentao da Ajuda para palavras-chave C# e classes do Framework .NET posicionando o
cursor de insero sobre ou imediatamente aps a palavra-chave ou membro da classe e
pressionando F1. Quando uma caixa de dilogo ou qualquer outra janela tiver o foco, voc pode
pressione F1 para obter ajuda sobre essa janela.
Uma pesquisa F1 retorna no mais de uma pgina. Se nenhuma correspondncia for encontrada,
ser exibida uma pgina informativa que fornece algumas dicas de soluo de problemas.
Pesquisa
Use a interface de pesquisa para retornar todos os documentos que correspondam a qualquer
termo especificado ou conjunto de termos.
A interface de pesquisa tem esta aparncia:
Visual C# Consolidado 51
Voc tambm pode usar a pgina Help Options no menu Options para especificar se voc
deseja para procurar sites Codezone alm da Biblioteca MSDN. Sites Codezone so mantidos por
parceiros da Microsoft e fornecem informaes teis sobre o C# e o .NET Framework. Somente
contedo Codezone estar disponvel on-line.
As mesmas opes de busca online versus pesquisa local se aplicam s pesquisas F1 e comum.
Na interface de pesquisa voc pode restringir ou expandir sua pesquisa especificando quais tipos
de documentos incluir. Existem trs opes, Linguagem, Tecnologia, e Tipo de Tpico. Voc
geralmente obter os melhores resultados marcando somente as opes que se aplicam a seu
cenrio desenvolvimento atual.
ndice
O ndice fornece uma maneira rpida para localizar documentos na sua Biblioteca MSDN local.
No se trata de uma pesquisa do texto completo; ele procura somente as palavras-chave ndice
que tiverem sido atribudas a cada documento. Uma pesquisa por ndice geralmente mais rpida
e mais relevante que uma pesquisa de texto completo. Se mais de um documento contiver a
palavra-chave que voc especificar na a caixa de pesquisa de ndice, depois uma janela de
resoluo de ambigidade abre e permite que voc selecione dentre as opes possveis.
A janela ndice estar localizada, como padro, no lado esquerdo do Document Explorer. Voc
pode acess-la a partir do menu Help do Visual C#.
ndice Analtico
O ndice analtico da Biblioteca MSDN mostra todos os tpicos na biblioteca numa estrutura
hierrquica num modo de exibio de rvore. Ele uma ferramenta til para navegar atravs da
documentao para ter uma idia do que est contido na biblioteca, e para explorar documentos
que voc talvez no localize atravs do ndice ou da pesquisa. Freqentemente, quando voc
encontrar um documento pelo F1, ndice ou pesquisa, til saber onde ele est localizado no
ndice analtico para que voc possa ver qual outra documentao relacionada existe para um
determinado tpico. Clique no boto Sync with Table of Contents na barra de ferramentas
Document Explorer para ver onde a pgina atualmente exibida est localizada na Biblioteca
MSDN.
Como Fazer
Visual C# Consolidado 52
Como Fazer uma exibio filtrada da Biblioteca MSDN que principalmente inclui documentos
chamados Como ou Explicao Passo-a-passo que mostram como realizar uma tarefa especfica.
Voc pode acessar a ajuda Como Fazer na barra de ferramentas Document Explorer ou no
menu Help, ou na pgina inicial. Cada linguagem no Visual Studio tem sua prpria pgina Como
Fazer, e a pgina que voc v depender do tipo de projeto que est atualmente ativo.
Ajuda Dinmica
A janela de ajuda dinmica exibe links para a documentao de referncia do Framework .NET e
a linguagem C# baseada na posio atual do ponto de insero no editor de cdigo. Para mais
informaes, consulte COMO: Personalizar a Ajuda Dinmica.
Visual C# Consolidado 53
IMPLANTANDO APLICATIVOS C#
Implantao o processo pelo qual voc distribui um aplicativo concludo ou componente para ser
instalado em outros computadores. Para aplicativos de console, ou aplicativos Smart Client com
base em Windows Forms, duas opes de implantao esto disponveis: ClickOnce e o Windows
Installer.
Implantao ClickOnce
Implantao ClickOnce permite a voc publicar aplicativos do Windows para um servidor Web ou
para uma rede de compartilhamento de arquivos para instalao simplificada. Para a maioria dos
cenrios, ClickOnce a opo recomendada para implantao porque permite a auto atualizao
de aplicativos baseados no Windows que podem ser instalados e executados com a mnima
interao do usurio.
Para configurar propriedades de implantao ClickOnce, voc pode usar o Assistente de
publicao (acessvel no menu Build) ou a pgina Publicar no Designer de Projeto. Para
mais informaes, consulte Pgina Publicar, Designer de Projeto. Para mais informaes sobre o
ClickOnce, veja Implantao ClickOnce.
O Windows Installer
Implantao do Windows Installer permite a voc criar pacotes de instalao a serem distribudos
aos usurios; o usurio executa o arquivo de instalao e segue passos com um assistente para
instalar o aplicativo. Isso feito, adicionando um projeto de instalao sua soluo; quando
criado, ele cria um arquivo de instalao que voc distribui para os usurios; o usurio executa o
arquivo de instalao e etapas com um assistente para instalar o aplicativo.
Para obter mais informaes sobre o Windows Installer, consulte Implantao do Windows
Installer.
Refatorao
Refatorao o processo de melhorar seu cdigo depois ele foi gravado, alterando a estrutura
interna do cdigo sem alterar o comportamento do cdigo externo.
Visual C# fornece os seguintes comandos refactoring sobre o menu Refactoring:
Extrair o mtodo
Renomear
Encapsular o campo
Extrair a interface
Promover varivel local para parmetro
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 54
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.
Visual C# Consolidado 55
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 56
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.
Visual C# Consolidado 57
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.
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 58
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
Visual C# Consolidado 59
dinmico, consulte Como: Personalizar Ajuda dinmica
ou Como controlar a janela da Ajuda dinmico:.
Pesquisador de No No exibida membros herdados por padro.
objetos
Janela Output No
Solution Explorer Sim Explorer de soluo aparece encaixado no lado direito
de IDE.
Start Page Sim, quando voc A pgina inicial Exibe artigos na alimentao RSS
inicia o IDE MSDN no Visual C#.
Lista de tarefas No
(Visual Studio)
Toolbox Sim, quando voc A caixa de ferramentas aparece como uma janela que
cria um aplicativo do encaixada no lado esquerdo de IDE recolhida.
Windows Forms
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
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:
2003 Studio visual teclas de atalho padro
6,0 Studio visual teclas de atalho padro
Breve teclas de atalho padro
Teclas de atalho padro Emacs
Teclas de Atalho Padro do Visual Basic 6.0
Visual C++ 6.0 padro teclas de atalho
Visual C++ 2,0 padro teclas de atalho
As combinaes de teclas de atalho a seguir funcionam no IDE. Muitos so padro combinaes
teclas usadas na maioria dos aplicativos Windows; a tabela lista a funo especfica que tem o
pressionamento de teclas no IDE.
Visual C# Consolidado 60
atalho
Ativar menu ALT + Abre o menu Programa, permitindo ao usurio para gerenciar
aplicativo espaos o estado da janela do aplicativo, por exemplo, mover ou
redimensionar.
Ativar menu ALT + HFEN Abre o menu de documento, permitindo ao usurio para
Janela gerenciar o estado da janela do documento ativo, por
Documento exemplo, mover ou redimensionar. Disponvel somente
enquanto no modo MDI de dentro uma janela de documento.
Ativar ferramenta ALT + HFEN Abre o menu Janela ferramenta, permitindo ao usurio para
menu Janela mover a janela ferramenta no IDE. Disponvel somente ao
dentro de uma janela ferramenta.
Aplicativo de ALT + F4 Fecha o IDE.
fechamento
Fechar CTRL+F6 Fecha o documento aplicativo ativo.
documento
Recolher Todos Num +- Recolhe todos os ns no modo de exibio de rvore atual.
os ns de rvore
Expandir todos os Num + * Expande todos os ns no modo de exibio de rvore atual.
ns de rvore
Mover para Barra ALT Ativa a barra de menus IDE principal.
de menus
Mova para CTRL + TAB Move para a prxima barra de ferramentas visvel. Disponvel
ferramentas somente enquanto a barra de menus principal estiver ativa.
prxima
Mover para Barra CTRL + Move para a barra de ferramentas visvel anterior. Disponvel
de ferramentas SHIFT + TAB somente enquanto a barra de menus principal estiver ativa.
anterior
Mova para SHIFT + ALT Ativa a barra de ferramentas Janela ferramenta. Disponvel
ferramentas somente em uma janela ferramenta contendo uma barra de
Janela ferramenta ferramentas.
Mover o foco de CTRL + Move o foco em modo de exibio de rvore para baixo sem
rvore abaixo DOWN. alterar a seleo. Este atalho pode ser utilizado para
selecionar vrios itens na rvore.
Move o foco de CTRL + UP Move o foco em modo de exibio de rvore backup sem
rvore cima alterar a seleo. Este atalho pode ser utilizado para
selecionar vrios itens na rvore.
Menu de atalho SHIFT + F10 Exibe o menu de atalho.
Alternar F4 Oculta e mostra uma lista drop-down. Disponvel somente de
visibilidade lista uma lista drop-down.
drop-down
Alternar seleo CTRL + Alterna uma seleo para o foco atual em modo de exibio
foco de rvore SPACEBAR de rvore.
Visual C# Consolidado 61
Teclas de atalho padro configuraes Development gerais
Os tpicos a seguir listam as combinaes de teclas padro disponveis para o esquema de
mapeamento do teclado Visual Studio 2003.
Lista Global teclas de atalho, definies gerais de desenvolvimento comuns
combinaes de teclas de atalho, bem como combinaes de teclas que podem ser usadas em
uma variedade de locais dentro do IDE.
Lista Designer de HTML teclas de atalho, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao trabalhar no modo Design e modo de exibio
de HTML do Designer de HTML.
Lista XML teclas de atalho do criador, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao trabalhar em exibio Esquema de designer
XML.
Lista Teclas de acelerao para o Editor de dilogo as combinaes de teclas de atalho
disponveis ao trabalhar no Editor de dilogo.
Lista Teclas de acelerao para o editor de imagem as combinaes de teclas de atalho
disponveis ao trabalhar no editor de imagem.
Lista Depurao teclas de atalho, definies gerais de desenvolvimento as combinaes
de teclas de atalho disponveis ao usar o depurador.
Lista Pesquisar e substituir teclas de atalho, definies gerais de desenvolvimento o
atalho chave combinaes disponveis ao usar a localizar Localizar, substituir, em arquivos, e
substituir nas caixas de dilogo Arquivos.
Lista Dados teclas de atalho, definies gerais de desenvolvimento as combinaes de
teclas de atalho disponveis ao usar o Query Designer ou designer de banco de dados.
Lista Controlar manipulao teclas de atalho, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis para mover e redimensionar controles em uma
superfcie de design.
Lista Texto teclas de atalho de navegao, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao mover dentro de cdigo em um documento
aberto.
Lista Texto teclas de atalho de seleo, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao selecionar texto em um documento aberto.
Lista Texto teclas de atalho de manipulao, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis quando movendo, excluindo ou formatar texto em
um documento aberto.
Lista Janela teclas de atalho de gerenciamento, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis para mover, Fechar, ou navegar em janelas
ferramenta e documentos.
Lista Integrada teclas de atalho da Ajuda, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao exibir e procurar tpicos da Ajuda.
Lista Objeto teclas de atalho do navegador, definies gerais de desenvolvimento as
combinaes de teclas de atalho disponveis ao trabalhar no Pesquisador de objetos.
Lista Macro teclas de atalho, definies gerais de desenvolvimento as combinaes de
teclas de atalho disponveis para trabalhar com macros.
Lista Ferramenta janela teclas de atalho, definies gerais de desenvolvimento as
combinaes de teclas de atalho que exibem as janelas ferramenta vrios.
Lista Projeto teclas de atalho, definies gerais de desenvolvimento as combinaes de
teclas de atalho que podem ser usadas para adicionar novos itens a um projeto, criar um
projeto, ou abrir arquivos ou Projetos.
Visual C# Consolidado 62
Lista Acelerador e teclas de atalho Editor de seqncia, definies gerais de
desenvolvimento as combinaes de teclas de atalho disponveis ao trabalhar em
componente editor, editor STRING, e Accelerator editor.
Visual C# Consolidado 63
ESCREVENDO APLICATIVOS COM
O VISUAL C#
C# uma linguagem Type-Safe, orientada a objetos que simples mas sofisticada, permitindo
que os programadores para criem um abrangncia dos aplicativos. Combinado com o Framework
.NET, o Visual C# permite a criao de aplicativos Windows, Web Services, ferramentas de banco
de dados, componentes, controles e mais.
Esta seo contm informaes sobre vrias tecnologias da plataforma Microsoft nas quais voc
pode basear aplicativos C#.
Visual C# Consolidado 64
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.
Suporte rico a banco de dados com o controle DataGridView .
Barras de ferramentas e outros elementos de interface do usurio que podem ter a
aparncia e o comportamento do Microsoft Windows XP, do Microsoft Office, ou do
Microsoft Internet Explorer.
Para obter mais informaes, consulte Criando uma interface de usurio (Visual C#) e Windows
Forms.
Visual C# Consolidado 65
Para obter mais informaes sobre a criao e gerenciamento de bancos de dados, escrever
procedimentos de armazenamento e outras informaes relacionadas, consulte Projetos de
Servidor SQL, Livros on-line sobre Servidor SQL e Tutoriais do Servidor SQL.
Os seguintes links contm informaes sobre como usar Visual Studio para acessar dados:
Criando aplicativos de dados com Visual Studio
Ferramentas de Banco de DadosVisual
Na Internet, o Data Access and Storage Developer Center est sempre atualizado com novos
artigos e exemplos.
Visual C# Consolidado 66
CRIANDO E ACESSANDO
SERVIOS DA WEB (VISUAL C#)
XML Web Services fornecem a aplicativos a possibilidade de se comunicarem em um ambiente
fracamente acoplado usando troca mensagens predefinidas construdas em torno de protocolos
padro como HTTP, XML, XSD, SOAP e WSDL. Como os protocolos e as especificaes so
pblicos e no especficos de plataforma, XML Web Services podem ser usados para habilitar a
comunicao entre aplicativos que residem no mesmo computador ou no, mesmo que eles
estejam em plataformas ou dispositivos diferentes.
Voc no precisa entender detalhadamente cada especificao para criar ou consumir servios da
Web. As classes do .NET Framework e os assistentes do Visual Studio ajudam voc a criar ou
interagir com XML Web Services usando um modelo familiar de programao orientada a objetos.
Para obter mais informaes sobre XML Web Services, consulte Viso Geral sobre XML Web
Services.
Para obter informaes sobre a criao e o acesso a XML Web Services usando ASP.NET,
consulte XML Web Services Usando ASP.NET.
Para obter informaes sobre as ferramentas que o Visual Studio fornece para ajudar a criar e
consumir facilmente XML Web Services, consulte XML Web Services (Visual Studio).
Para obter mais informaes sobre como criar e acessar XML Web Services, consulte XML Web
Services em Cdigo Gerenciado.
O Web Services Developer Center na MSDN Online possui artigos e recursos adicionais.
Visual C# Consolidado 67
CRIANDO COMPONENTES
(VISUAL C#)
O termo componente na indstria de software freqentemente usado para fazer referncia a
um objeto reutilizvel que expe uma ou mais interfaces para clientes de uma maneira
padronizada. Um componente pode ser implementado como uma classe nica, ou como um
conjunto de classes; o requisito primrio que a interface pblica bsica seja bem definida. Por
exemplo, em um contexto de programao nativa do Windows, o COM (Component Object Model)
requer que todos os componentes implementem a interface IUnknown alm das outras interfaces
especializadas.
No contexto do .NET Framework, um componente uma classe ou conjunto de classes que
implementa a interface IComponent ou deriva diretamente ou indiretamente de uma classe que
implementa esta interface. A implementao da classe base padro da interface IComponent
Component.
Alguns dos componentes mais comumente usados em programao no .NET Framework so os
controles visuais que voc adiciona ao Windows Forms como o Controle de Boto (Windows
Forms), Controle de Caixa de Combinao (Windows Forms) e assim por diante. Componentes
no visuais incluem o Controle de Timer, SerialPort, e ServiceController entre outros.
Quando voc cria um componente em C#, ele pode ser usado por clientes escritos em qualquer
outra linguagem que est em conformidade com a Common Language Specification.
Para criar seus prprios componentes no Visual C#, voc pode usar o Component Designer para
montar classes de componentes no visuais da mesma maneira que voc monta no Windows
Forms. Para mais informaes, consulte Explicao passo a passo: Criando um aplicativo de
servio Windows no Designer de Componente.
Para obter mais informaes sobre programao de componente usando o Visual Studio, consulte
Componentes no Visual Studio.
Visual C# Consolidado 68
Demonstra trs tipos bsicos de tarefas: automatizar Microsoft Office Excel 2003, executar
anlises de dados, e trabalhar com controles.
O Word Usando Explicaes Passo-a-passo
Demonstra maneiras de usar as ferramentas para o Microsoft Office 2003 para automatizar
projetos do Microsoft Office Word 2003.
COMO: Automatizar Aplicativos do Office que no Word, Excel, ou o Outlook
Fornece as etapas a serem executadas em seus projetos existentes para que possa
chamar cdigo no gerenciado usando o Visual Basic ou C#.
COMO: Adicionar Controles a Documentos do Office
Explica como adicionar controles a documentos Office em tempo de design ou em tempo
de execuo.
Aplicativos Word e Excel
COMO: Executar Clculos do Excel por Programao
Explica como executar clculos por programao para um intervalo ou para o aplicativo
inteiro.
COMO: Criar Menus do Office por Programao
Fornece um Exemplo que cria um menu chamado New Menu na barra de menus no Microsoft
Office Excel 2003.
COMO: Criar Barras de Ferramentas do Office por Programao
Fornece um Exemplo que cria uma barra de ferramentas denominada Teste no Microsoft Office
Word 2003. Ele aparece prximo ao meio do documento e contm dois botes. Quando um boto
clicado, uma caixa de mensagem aparece.
COMO: Manipular Erros em Projetos do Office
Explica como configurar o depurador para paralisar em excees do tempo de execuo
de linguagem comum.
Visual C# Consolidado 69
Uma caixa de dilogo aparece com informaes sobre propriedades padro para
depurao do projeto.
6. 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.
7. 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.
8. Mover o cdigo do arquivo classe principal antigo para o novo ThisDocument,
ThisWorkbook,. e Sheet Classes
9. Excluir o arquivo classe principal antigo aps remover todo o cdigo.
10. 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.
11. Substituir todos os controles ActiveX no documento ou pasta de trabalho por controles
gerenciados do Visual Studio Toolbox.
Visual C# Consolidado 70
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.
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 71
Adicionar um formulrio do Windows ao projeto
Criar um formulrio do Windows para o usurio fornea informaes prompt.
Para adicionar um formulrio do Windows
1. Selecione o projeto WinFormInput no Solution Explorer.
2. No menu Project, clique em Add Windows Form.
3. Nome do formulrio GetInputString.vb ou GetInputString.cs. e, em seguida
clique em Add
O novo formulrio aberto no designer.
4. Adicionar um TextBox e um Button. para o formulrio
5. 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
1. Clique com o boto direito do mouse ThisWorkbook.vb ou ThisWorkbook.cs em
Solution Explorer e selecione View Code.
2. 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:.
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(); }
3. 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.
Enviar informaes para a planilha
Para enviar informaes para a planilha
1. Clique com o boto direito do mouse GetInputString em Solution Explorer, e
selecione View Designer.
Visual C# Consolidado 72
2. Clique duas vezes no boto para abrir o arquivo de cdigo com manipulador de eventos do
boto Click adicionado.
3. 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
1. Pressione F5 para executar o projeto.
2. Confirme se o formulrio Windows aparece.
3. Digite Hello World na caixa de texto e clique em OK.
4. 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.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
Microsoft Office Excel 2003.
Criando o projeto
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Visual C# Consolidado 73
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome My Excel Formatting.
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
Formatting projeto para Solution Explorer.
Adicionar texto e controles a planilha
Para essa explicao passo a passo, voc precisar trs CheckBox controles e algum texto em
um NamedRange controle.
Para adicionar trs caixas de seleo
1. Verifique se a pasta de trabalho est abra no designer visual studio e que Sheet1 est
aberto.
2. Na guia Common Controls da Toolbox, arraste um CheckBox controle para ou
prxima clula B2 na Sheet1.
3. No menu View, selecione Properties Janela.
4. Certifique-se de que que Checkbox1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e altere as propriedades a seguir:
Observao
Voc tambm pode adicionar o NamedRange controle digitando textFont na caixa Name.
Visual C# Consolidado 74
Para adicionar texto a um controle NamedRange
1. Na guia Excel Controls da caixa de ferramentas, arraste um NamedRange controle
clula B9.
2. Verificar que $B$9 aparece na caixa de texto editvel, e essa clula B9 estiver
selecionada. Se no estiver, clique em Clula B9 para selecion-lo.
3. Clique em OK.
4. Clula B9 se torna um intervalo nomeado NamedRange1.
No h nenhuma indicao visvel na planilha, mas NamedRange1 aparece no. (logo
acima a planilha no lado esquerdo) quando Clula B9 estiver selecionada a Name box
5. Certifique-se de que que NamedRange1 esteja visvel na caixa de listagem Nome de
objeto da janela Properties, e altere as propriedades a seguir:
Em seguida, escreva o cdigo para formatar o texto quando uma opo selecionada.
Formatao quando a opo um texto selecionado
Voc nesta seo, vai escrever cdigo para que quando o usurio seleciona uma opo de
formatao, o formato do texto na planilha for alterado.
Para alterar a formatao quando uma caixa de seleo marcada
1. Clique com o boto direito do mouse Sheet1 e clique View Code no menu de atalho
2. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyBoldFont de
seleo:
C#
private void applyBoldFont_Click(object sender, EventArgs e) { this.textFont.Font.Bold =
this.applyBoldFont.Checked; }
3. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyItalicFont de
seleo:
C#
private void applyItalicFont_Click(object sender, EventArgs e) { this.textFont.Font.Italic =
this.applyItalicFont.Checked; }
4. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa
applyUnderlineFont de seleo:
C#
private void applyUnderlineFont_Click(object sender, EventArgs e) { if
(this.applyUnderlineFont.Checked == true) { this.textFont.Font.Underline =
Excel.XlUnderlineStyle.xlUnderlineStyleSingle; } else { this.textFont.Font.Underline =
Excel.XlUnderlineStyle.xlUnderlineStyleNone; } }
5. Em C#, adicione manipuladores de eventos para as caixas de seleo 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#
Visual C# Consolidado 75
Copiar Cdigo
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 sua pasta de trabalho para certificar-se que o texto est formatado
corretamente quando voc marca ou desmarca uma caixa de seleo.
Para testar sua pasta de trabalho
1. Pressione F5 para executar o projeto.
2. Marque ou desmarque uma caixa de seleo.
3. Confirme que o texto est formatado corretamente.
Prximas etapas
Essa explicao passo a passo mostra as noes bsicas de usando caixas de seleo e formatar
texto em 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:.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
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 76
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
1. Verifique se a My Excel Button.xls pasta de trabalho aberta no designer visual
studio, com Sheet1 exibido.
2. Na guia Common Controls da caixa de ferramentas, arraste para Sheet1. um TextBox
3. No menu View, selecione Properties Window.
4. Certifique-que TextBox1 est visvel na caixa Properties drop-down janela e alterar a
Name propriedade da caixa de texto para displayText.
5. Arraste um Button controle at Sheet1 e alterar as seguintes propriedades:
Visual C# Consolidado 77
3. 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:.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
Microsoft Office Excel 2003.
Criando o projeto
Nesta etapa, voc ir criar pasta de trabalho Excel usando Visual Studio Tools for Office Um do
projeto.
Para criar um novo projeto
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
Visual C# Consolidado 78
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
1. Verifique se a My Named Range Events.xls pasta de trabalho aberta no designer
visual studio, com Sheet1 exibido.
2. 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.
3. 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.
4. 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
5. Adicionar um outro NamedRange controle a clula B3.
6. 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.
7. Clique em OK.
Clula B3 se torna um intervalo nomeado namedRange2.
Para adicionar texto a sua planilha
1. Na clula A1, digite o seguinte texto:
Este um Exemplo de um controle NamedRange.
2. 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
1. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou
Sheet1.cs. e selecione View Code
2. 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; }
3. Em C#, voc deve adicionar manipuladores de eventos para o intervalo nomeado como
mostrado no Startup evento abaixo. Para obter informaes sobre como criar
Visual C# Consolidado 79
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);
Adicionar cdigo para responder ao evento de alterao
Para inserir texto em namedRange2 com base no evento Change
Adicione cdigo para o NamedRange1_Change manipulador de eventos semelhante ao
seguinte:
C#
private void namedRange1_Change(Microsoft.Office.Interop.Excel.Range Target) {
this.namedRange2.Value2 = "The Change event occurred."; this.namedRange2.Font.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue);
this.namedRange2.Font.Italic = false; }
Observao
Como duas vezes em uma clula em um intervalo do Excel entra no modo de edio, um Change
evento ocorre quando a seleo movida fora do intervalo mesmo que nenhuma alterao ao
texto ocorreu.
Observao
Porque faz duas vezes em uma clula em um intervalo do Excel com a seleo para mover para o
intervalo, um SelectionChange evento ocorre antes de ocorrer o BeforeDoubleClick evento.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para verificar texto que descreve os eventos de um
NamedRange controle que ser inserido no outro intervalo nomeado quando os eventos so
aumentados.
Para testar seu documento
1. Pressione F5 para executar o projeto.
2. Coloque o cursor no namedRange1, e verificar que o texto sobre o SelectionChange
evento inserido e que um comentrio inserido na planilha.
Visual C# Consolidado 80
3. Duplo clique dentro namedRange1, e verifique se o texto sobre BeforeDoubleClick
eventos est inserido com texto em itlico em namedRange2 vermelho.
4. Clique fora do namedRange1 e observe que o evento de alterao ocorre quando sair
Modo Edio mesmo que nenhuma alterao para o texto foi feita.
5. Alterar o texto dentro namedRange1.
6. Clique fora do namedRange1, e verifique se o texto sobre Change evento est inserido
com texto em namedRange2 azul.
Prximas etapas
Essa explicao passo a passo mostra noes bsicas de programao contra eventos de um
NamedRange controle. Aqui esto algumas tarefas que podem vie em seguida:
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:.
Visual C# Consolidado 81
2. 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
3. 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."); }
4. No menu File, clique em Save All.
5. Na caixa Save Project de dilogo, digite C:\Walkthroughs na caixa Location.
6. Clique em Save.
7. Pressione F5 para executar o projeto.
O Excel iniciado e aparecer a caixa de mensagem.
8. Fechar a caixa de mensagem.
9. Feche o Excel.
10. No designer do Visual Studio, localize e selecione na guia para My Security Test.xls.
11. 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
1. No Painel de Controle, abra Administrative Tools.
2. Executar Microsoft .NET Framework 2.0 Configuration.
3. 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.
4. 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.
5. Clique em Yes.
6. 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.
7. Clique em OK.
Visual C# Consolidado 82
8. 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
1. No menu Project no Visual Studio, clique em My Security Test Properties.
2. Clique na Signing guia.
3. Selecione Sign the assembly.
4. No, o Choose a strong name key file list clique New.
5. Na caixa Create Strong Name Key de dilogo, digite SecurityTestKey na caixa
Key file name.
6. Desmarque a Protect my key file with a password caixa de seleo.
7. Clique em OK.
O arquivo SecurityTestKey.snk de chave aparece no Solution Explorer.
8. 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
1. Abra Microsoft .NET Framework 2.0 Configuration novamente.
2. Clique com o boto direito do mouse no VSTOProjects n e clique New no menu de
atalho
3. Digite o nome Security Test Strong Name para o novo grupo de cdigos, e clique
em Next.
4. Na lista Choose the condition type for this code group, clique Strong Name.
5. Clique em Import.
6. 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.
7. Clique em Next.
8. Clique Next para aceitar o FullTrust conjunto de permisses e clique em Finish.
9. 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
Visual C# Consolidado 83
1. Pressione F5 para executar o projeto.
2. Confirme se a caixa de mensagem aparece.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o Exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
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
1. 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.
Visual C# Consolidado 84
no estiver disponvel,
2. Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
3. Selecione Database e, em seguida clique em Next.
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.
4. Aps uma conexo foi selecionado ou criado, clique em Next.
5. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6. Expanda o Tables n na janela Database objects.
7. Marque a caixa de seleo ao lado da Customers tabela.
8. 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
1. Verifique se a My Simple Data Binding.xls pasta de trabalho aberta no designer
visual studio, com Sheet1 exibido.
2. Abra a Data Sources janela e expanda o Customers n.
3. Selecione a CompanyName coluna, e clique na seta suspensa que aparece.
4. Selecione NamedRange na lista drop-down, e arraste a CompanyName coluna
clula A1.
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,
5. Selecione a CustomerID coluna na janela Data Sources, e clique na seta suspensa
que aparece.
6. Clique NamedRange na lista drop-down, e arraste a CustomerID coluna clula B1.
7. criado na clula B1, e vinculado a outro NamedRange controle chamado
customerIDNamedRange o BindingSource.
Para adicionar quatro botes
1. Na guia Common Controls Da adicionar um Button controle a clula A3 da planilha. o
Toolbox,
nome Button1 este boto.
2. Adicionar mais trs botes s seguintes clulas nesta ordem, para que os nomes so
conforme mostrado:
Clula (Nome)
Visual C# Consolidado 85
B3 Button2
C3 Button3
D3 Button4
Visual C# Consolidado 86
private void button3_Click(object sender, System.EventArgs e) {
this.customersBindingSource.MoveNext(); }
Para mover para o ltimo registro
Adicionar um manipulador de eventos para o Click Evento do boto Button4, e adicione
o cdigo a seguir para mover para o ltimo registro:
C#
private void button4_Click(object sender, System.EventArgs e) {
this.customersBindingSource.MoveLast(); }
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que voc pode navegar atravs
dos registros no banco de dados.
Para testar sua pasta de trabalho
1. Pressione F5 para executar o projeto.
2. Confirme se o primeiro registro aparece nas clulas A1 e B1.
3. Clique em e B1. (Button3) boto e confirme se o registro seguinte aparece na clula A1
a>
4. Clique nos outros botes de rolagem para confirmar que o registro muda conforme o
esperado.
Prximas etapas
Essa explicao passo a passo mostra os fundamentos bsicos do vinculando um intervalo
nomeado a um campo em um banco de dados. 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:.
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.
Usar um BindingNavigator controle para percorrer os registros. Para obter mais
informaes, consulte COMO: Navegar em dados com o controle BindingNavigator do
Windows Forms.
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 87
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o Exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
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
1. 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,
2. Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
3. Selecione Database e, em seguida clique em Next.
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.
4. Aps uma conexo foi selecionado ou criado, clique em Next.
5. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6. Expanda o Tables n na janela Database objects.
7. Marque a caixa de seleo ao lado da Employees tabela.
8. 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
Visual C# Consolidado 88
1. Verifique se a My Complex Data Binding.xls pasta de trabalho aberta no designer
visual studio, com Sheet1 exibido.
2. Abra a Data Sources janela e selecione o Employees n.
3. Clique na seta suspensa que aparece.
4. 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 so adicionados ao projeto. um BindingSource O controle acoplado que
por sua vez est vinculado a DataSet instncia. o BindingSource,
Para adicionar um boto
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
Adicionar um manipulador de eventos para o Click evento do b utton, e adicione o cdigo
a seguir para confirmar todas as alteraes que foram feitas no dataset volta para o banco de
dados:
C#
private void button1_Click(object sender, EventArgs e)
{ try
{ this.employeesTableAdapter.Update(this.northwindDataSet.Employees);
}
catch (System.Data.DataException ex)
{ MessageBox.Show(ex.Message); } }
Visual C# Consolidado 89
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se de que os dados aparecem como
esperado, e que voc pode manipular os dados de um objeto lista.
Para testar a vinculao 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:
Visual C# Consolidado 90
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:.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso ao Exemplo de SQL Server do Northwind. O banco de dados pode ser no seu computador
de desenvolvimento ou em um servidor.
Permisses para ler e gravar no banco de dados do SQL Server.
Visual C# Consolidado 91
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome My Master-Detail, 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 Master-
Detail projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
Para criar o DataSet
1. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data
menu.
2. Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
3. Selecione Database e, em seguida clique em Next.
Selecionar uma conexo de dados ao banco de dados de Exemplo Northwind do SQL Server ou
adicionar uma nova conexo usando o New Connection boto.
4. Aps selecionar ou criar uma conexo, clique em Next.
5. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6. Expanda o Tables n na janela Database objects.
7. Selecione a Orders tabela e a Order Details tabela.
8. Clique em Finish.
O assistente adicionar as duas tabelas para a Data Sources janela. Ele tambm adiciona um
DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Adicionar controles a planilha
Nesta etapa, voc adicionar um intervalo nomeado, um objeto de lista, e dois botes primeira
planilha. Primeiro, adicionar o intervalo nomeado e o objeto lista a partir da Data Sources
janela para que automaticamente eles so vinculados fonte de dados. Em seguida, adicione os
botes da Toolbox.
Para adicionar um intervalo nomeado e um objeto de lista
1. Verifique se a My Master-Detail.xls pasta de trabalho aberta no designer visual
studio, com Sheet1 exibido.
2. Abra a Data Sources janela e expanda o Orders n.
3. Selecione a OrderID coluna, e clique na seta suspensa que aparece.
4. Clique NamedRange na lista drop-down, e arraste a OrderID coluna clula A2.
Um NamedRange controle denominado OrderIDNamedRange criado na clula A2. Ao
mesmo tempo, nomeado OrdersBindingSource, 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,
5. Role para baixo aps as colunas que esto sob a Orders tabela. Na parte inferior da lista
a Order Details tabela; ele aqui porque ele um filho da Orders tabela. Selecionar
Visual C# Consolidado 92
esta Order Details Tabela, no a um que seja no mesmo nvel como a Orders Tabela,
e clique a seta suspensa que aparece.
6. Clique ListObject na lista drop-down, e arraste a Order Details tabela clula A6.
7. Um ListObject controle denominado Order_DetailsListObject criado na clula A6,
e vinculado BindingSource.
Para adicionar dois botes
1. Na guia Common Controls Da adicionar um Button controle a clula A3 da planilha. o
Toolbox,
nome Button1 este boto.
2. Adicionar um outro Button controle a clula B3 da planilha.
nome Button2 este boto.
Em seguida, marcar DataSet para ser armazenado em cache no documento.
Cache o DataSet
Marcar DataSet para ser armazenado em cache no documento, tornar DataSet pblicos e
definindo a CacheInDocument propriedade.
Armazenar em cache DataSet
1. Selecione NorthwindDataSet No bandeja de componentes.
2. Na janela Properties, alterar a Modifiers propriedade para Public.
DataSets dever ser pblica antes cache est ativado.
3. Alterar a CacheInDocument propriedade para True.
A prxima etapa para adicionar texto a botes, e no C# adicione cdigo para ligar os
manipuladores de eventos.
Inicializando as controles
Definir o texto do boto e adicionar manipuladores de eventos durante o Startup evento.
Ao inicializar os dados e os controles
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 os
botes.
C#
this.button1.Text = "<"; this.button2.Text = ">";
3. 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);
Adicionar cdigo para ativar rolagem atravs dos registros
Adicione cdigo ao manipulador Click de eventos de cada boto para percorrer os registros.
Para percorrer os registros
1. Adicionar um manipulador de eventos para o Click evento de Button1, e adicione o
cdigo a seguir para percorrer os registros para trs:
Visual C# Consolidado 93
C#
private void button1_Click(object sender, EventArgs e) {
this.ordersBindingSource.MovePrevious(); }
2. Adicionar um manipulador de eventos para o Click evento de Button2, e adicione o
cdigo a seguir para avanar pelos registros:
C#
private void button2_Click(object sender, EventArgs e) { this.ordersBindingSource.MoveNext();
}
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se de que os dados aparecem como
esperado, e que voc pode usar a soluo off-line.
Para testar o cache de dados
1. Pressione F5.
2. Verifique que o intervalo nomeado e o objeto lista so preenchidos com dados da fonte de
dados.
3. Rolar pelos alguns dos registros clicando nos botes.
4. Pasta de trabalho, salve e feche a pasta de trabalho e Visual Studio.
5. Desativar a conexo ao banco de dados. Desconecte o cabo de rede do seu computador
se o banco de dados estiver localizado em um servidor, ou parar o servio SQL Server se o
banco de dados for no seu computador de desenvolvimento.
6. Abra o Excel, e abra My Master-Detail.xls a partir do diretrio \bin (\My Detail\bin
mestre-no Visual Basic) ou \My Detail\bin\debug mestre-em C#.
7. Rolar pelos alguns dos registros para ver que a planilha opera normalmente quando
desconectado.
8. Reconectar-se ao banco de dados. Conectar-se seu computador rede novamente se o
banco de dados estiver localizado em um servidor, ou inicia o servio SQL Server se o
banco de dados for no seu computador de desenvolvimento.
Prximas etapas
Essa explicao passo a passo mostra as noes bsicas de criar uma relao mestre / detalhes
de dados em uma planilha e cache um DataSet. Aqui esto algumas tarefas que podem vie em
seguida:
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:.
Visual C# Consolidado 94
Alterar o estilo do grfico quando uma opo est selecionada.
Testar seu projeto.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Adicionar um grfico a uma planilha
Voc pode criar um projeto de pasta de trabalho do Excel usando uma pasta de trabalho
existente. Nessa explicao passo a passo, ir adicionar um grfico pasta de trabalho e Usar
pasta de trabalho no Excel uma nova soluo. A fonte de dados nessa explicao passo a passo
uma planilha chamada Data for Chart.
Para adicionar os dados
1. Abra o Excel 2003.
Abre uma nova pasta de trabalho.
2. Clique com o boto direito do mouse na Sheet3 guia e, em seguida clique Rename no
menu de atalho.
3. Renomear a planilha para Data for Chart.
4. Adicionar dados Data for Chart Os seguir com clula A4 sendo a parte superior
esquerda E8 Canto, e o canto inferior direito:
Q1 Q2 Q3 Q4
Oeste 500 550 550 600
Leste 600 625 675 700
Norte 450 470 490 510
Sul 800 750 775 790
Visual C# Consolidado 95
7. Na lista As object in:, selecione Sheet1.
8. Clique em Finish.
9. Reposicionar o grfico para que o canto direito superior alinhe com Clula E2.
10. Salve o arquivo para a unidade C: e nome-la ExcelChart.xls.
11. Feche o Excel.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Para criar um novo projeto
1. Criar um projeto de pasta de trabalho do Excel com o nome My Excel Chart. Verifique
que Copy an existing document est selecionada. Para obter mais informaes,
consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
2. Clique no Browse boto e v para a pasta de trabalho que voc criou anteriormente
nessa explicao passo a passo.
3. Clique em OK.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Excel
Chart projeto para Solution Explorer.
Definindo Propriedades do grfico
Quando voc criar um novo projeto pasta de trabalho do Excel usando uma pasta de trabalho
existente, controles host automaticamente so criados para intervalos nomeados, objetos lista, e
grficos que existem dentro da pasta de trabalho. Voc pode alterar o nome do controle Chart
usando a Properties janela
Para alterar o nome do controle grfico
Selecione o Chart controle no designer e alterar as seguintes propriedades na janela
Properties:
Visual C# Consolidado 96
Name columnChart
Text Grfico de coluna
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 97
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 98
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:.
Visual C# Consolidado 99
Adicionar controles a uma planilha.
Criar um controle painel Aes.
Adicionar controles Windows Forms ligados a dados a um controle painel Aes.
Mostrar painel de aes quando abre o aplicativo.
Testar seu projeto.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o Exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando o projeto
A primeira etapa para criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
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
1. 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,
2. Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
3. Selecione Database e, em seguida clique em Next.
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.
4. Clique em Next.
5. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6. Expanda o Tables n na janela Database objects.
Observao
Observao
O conjunto no tem permisso para executar ainda, para que ele se voc tentar executar a
soluo ser lanar um erro. Voc ir atualizar sua diretiva de segurana para conceder
permisso de confiana total ao conjunto em uma etapa posterior.
Observao
Inclui Visual Studio Tools for Office um Exemplo que demonstre como criar uma ferramenta que
pode ser usada para editar o manifesto do aplicativo incorporado. Para obter mais informaes,
consulte Aplicativo Manifest Exemplo Editor.
Observao
Este procedimento destinado a fim de executar essa explicao passo a passo. No use este
procedimento para conceder confiana a conjuntos ou diretrios se no tiver certeza que sejam
segura e protegida. Para obter mais informaes sobre concesso e remover permisses,
consulte HOW TO: conceder permisses para pastas e montagens e Como remover permisses
de pastas e montagens:.
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:
Visual Studio Tools for Office
O Word Microsoft Office 2003 ou Microsoft Office Excel 2003.
Observao
Essa explicao passo a passo inclui etapas para criar uma soluo simples que voc pode usar
em explicao passo a passo o Excel. Se voc deseja executar o explicao passo a passo com
uma soluo Word ou Excel existente, comearo o explicao passo a passo no ttulo criando o
Project a instalao, " " e certifique-se substituir o nome ExcelDeployment do projeto com o
nome do seu projeto em todos os exemplos de cdigo e instrues.
Criando o projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome ExcelDeployment.
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
ExcelDeployment projeto para Solution Explorer.
Adicionar cdigo para trs a pasta de trabalho
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos da
pasta de trabalho. Isso permite que voc para verificar se a soluo est funcionando quando
voc abre o documento rapidamente.
Para adicionar uma caixa de mensagem a um evento de inicializao
1. 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
2. Adicione o seguinte cdigo ao manipulador Startup de eventos dentro a ThisWorkbook
classe para mostrar uma caixa de mensagem durante a inicializao.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
O Microsoft Office Word 2003.
Criando o projeto
Neste procedimento, voc ir criar projeto usando Visual Studio Tools for Office um documento do
Word.
Para criar um novo projeto
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
Para essa explicao passo a passo, voc precisar trs caixas de seleo e algum texto em um
Bookmark controle no documento do Word.
5. Pressione Enter para mover o ponto de insero abaixo da primeira caixa de seleo.
6. Adicionar uma segunda caixa de seleo para o documento abaixo da ApplyBoldFont
caixa de seleo e alterar as propriedades a seguir:
7. Pressione Enter para mover o ponto de insero abaixo da segunda caixa de seleo.
8. Adicionar uma caixa de seleo terceira para o documento abaixo da ApplyItalicFont
caixa de seleo e alterar as propriedades a seguir:
Observao
Voc tambm pode adicionar o Bookmark controle usando a Bookmark caixa de dilogo,
encontrada no menu Insert.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
O Microsoft Office Word 2003.
Criando o projeto
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
Para criar um novo projeto
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
1. Verifique se o documento est aberto no designer visual studio.
2. Na guia Common Controls da Toolbox, arraste um TextBox controle para o
documento.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
O Microsoft Office Word 2003.
Criando o projeto
Nesta etapa, voc ir criar um projeto Documento do Word no Visual Studio.
Para criar um novo projeto
Criar um projeto Documento do Word com o nome My Bookmark Shortcut Menu.
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 Bookmark Shortcut Menu
projeto para Solution Explorer o Visual Studio.
Adicionar texto e indicadores ao documento
Nesta etapa, voc ser adicionar texto ao seu documento do Word e depois adicionar dois
indicadores.
Para adicionar texto ao seu documento
Digite o seguinte texto em um documento do Word:
Este um Exemplo de criar um menu de atalho quando voc clica com o
boto direito do mouse texto em um indicador.
Para adicionar um controle indicador ao seu documento
1. Na guia Word Controls da Toolbox, arraste um Bookmark controle para o
documento.
A Add Bookmark Control caixa de dilogo ser exibida.
2. Selecione as palavras creating a shortcut menu when you right-click the
text no seu documento e clique em OK.
bookmark1 adicionado ao documento.
Observao
Quando voc adicionar indicadores aos seus documentos Office Word 2003 no tempo de criao,
um Bookmark controle criado que permite a voc para programa contra vrios eventos do
indicador. Voc pode 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 aparea.
Criando o menu curto
Para criar o menu de atalho
1. No Solution Explorer, clique com o boto direito do mouse ThisDocument e
selecione View Code.
2. Declarar as CommandBar variveis e uma varivel do indicador no nvel de classe:
C#
private Office.CommandBar commandBar; private Office.CommandBarButton boldText; private
Office.CommandBarButton italicText; private Microsoft.Office.Tools.Word.Bookmark
selectedBookmark; const int WordTrue = -1; const int WordFalse = 0;
3. Adicionar um mtodo para criar o menu:
C#
private void AddPopUp() { commandBar = Application.CommandBars.Add("FormatText",
Office.MsoBarPosition.msoBarPopup, missing, true); // Add a button and set the style, caption,
icon and tag. boldText = (Office.CommandBarButton)commandBar.Controls.Add(1, missing,
missing, missing, missing); boldText.Style = Office.MsoButtonStyle.msoButtonCaption;
boldText.Caption = "Bold"; boldText.FaceId = 113; boldText.Tag = "0"; // Add a button and set
the style, caption, icon and tag. italicText =
(Office.CommandBarButton)commandBar.Controls.Add(1, missing, missing, missing, missing);
italicText.Style = Office.MsoButtonStyle.msoButtonCaption; italicText.Caption = "Italic";
italicText.FaceId = 114; italicText.Tag = "1"; // Handle the click events with the ButtonClick
procedure. boldText.Click += new Microsoft.Office.Core
._CommandBarButtonEvents_ClickEventHandler(ButtonClick); italicText.Click += new
Microsoft.Office.Core ._CommandBarButtonEvents_ClickEventHandler(ButtonClick); }
4. Chamada AddPopup a partir do Startup evento de ThisDocument:
C#
private void ThisDocument_Startup(object sender, System.EventArgs e) { AddPopUp(); }
Para formatar o texto contido no indicador
1. Adicionar um ButtonClick manipulador de eventos para aplicar formatao para o
indicador.
C#
private void ButtonClick(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool
CancelDefault) { if (Ctrl.Caption == "Bold") { if (selectedBookmark.Bold == WordTrue) {
selectedBookmark.Bold = WordFalse; } else { selectedBookmark.Bold = WordTrue; } } else if
(Ctrl.Caption == "Italic") { if (selectedBookmark.Italic == WordTrue) { selectedBookmark.Italic
= WordFalse; } else { selectedBookmark.Italic = WordTrue; } } }
Observao
Voc deve escrever cdigo para manipular o caso em que se sobrepem indicadores. Se voc
no fizer isso, por padro, o cdigo se chamar para cada indicador dentro da seleo.
C#
private void showPopupMenu(object sender, Microsoft.Office.Tools.Word.ClickEventArgs e) { int
startPosition = 0; // If bookmarks overlap, get bookmark closest to cursor. for (int i = 1; i <=
e.Selection.Bookmarks.Count; i++) { object o = i; if (e.Selection.Bookmarks.get_Item(ref o).Start >
startPosition) { startPosition = e.Selection.Bookmarks.get_Item(ref o).Start; } } // If closest
bookmark is the sender, show the popup. if (((Word.Bookmark)sender).Start == startPosition) {
selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
commandBar.ShowPopup(missing, missing); e.Cancel = true; } }
3. Em C#, voc deve adicionar manipuladores de eventos para os controles do indicador ao
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.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.
ClickEventHandler(showPopupMenu); this.bookmark2.BeforeRightClick += new
Microsoft.Office.Tools.Word. ClickEventHandler(showPopupMenu);
Testar o aplicativo
Nesta seo, voc ir testar seu documento para certificar-se de que os itens de menu negrito e
itlico apaream no menu de atalho quando clicar com o boto direito do mouse texto em um
indicador e o texto que est formatado corretamente.
Para testar seu documento
1. Pressione F5 para executar o projeto.
2. Clique com o boto direito do mouse dentro do indicador e selecione Bold primeiro.
3. Verificar se todos os o texto no bookmark1 formatados como negrito.
4. Clique com o boto direito do mouse dentro do texto dos indicadores sobrepostos e
selecione Italic.
5. Verificar se todos os o texto no bookmark2, mas somente essa parte do texto em
bookmark1 que se sobreponha bookmark2 formatados como itlico.
Prximas etapas
Essa explicao passo a passo mostra como criar menus de atalho em indicadores. Aqui esto
algumas tarefas que podem vie em seguida:
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.
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual Studio Tools for Office
O Microsoft Office Word 2003.
Criando o projeto
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
Para criar um novo projeto
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
1. 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.
2. Na lista Object type da guia Create New, selecione Microsoft Graph Chart e
clique em OK
Adicionar Referncias
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.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Observao
Se Show Data Sources Clique dentro do documento do Word e marque novamente. no estiver
disponvel,
2. Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
3. Selecione Database e, em seguida clique em Next.
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.
4. Clique em Next.
5. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6. Expanda o Tables n na janela Database objects.
7. Marque a caixa de seleo ao lado e Products tabelas. o Suppliers
8. 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
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.
4. Mover a caixa de combinao para que ele seja sob o rtulo e alterar a Size propriedade
171, 21.
5. Expandir a Products tabela na janela Data Sources.
6. Clique na seta suspensa no n ProductName, e selecione ListBox.
7. 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
8. 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.
9. Mover a caixa de listagem para que ele seja sob o rtulo e alterar a Size propriedade
171,95.
10. Arraste controlar e coloc-lo a caixa de listagem abaixo. de para o painel Aes um Button
o Toolbox
11. Clique com o boto direito do mouse clique Properties no menu de atalho, e altere as
seguintes propriedades: o Button,
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
Observao
Para digitar um smbolo de grau (), pressione ALT e digite 248.
3. Clique no cone de marca inteligente que aparece sobre a seqncia reconhecida e clique
em Convert to Celsius.
4. Confirme que a seqncia original substituda por uma nova seqncia contendo a
temperatura em Celsius.
Observao
Essa explicao passo a passo pressupe que voc estiver implantando uma soluo Word. Se
voc quiser executar explicao passo a passo com uma soluo Excel, o substitua o nome do
projeto do Word com o nome do seu projeto do Excel em todos os cdigos e exemplos XML.
Observao
O conjunto no tem permisso para executar ainda, para que ele se voc tentar executar a
soluo ser lanar um erro. Voc ir atualizar sua diretiva de segurana para conceder
permisso de confiana total ao conjunto em uma etapa posterior.
Observao
Inclui Visual Studio Tools for Office um Exemplo que demonstre como criar uma ferramenta que
pode ser usada para editar o manifesto do aplicativo incorporado. Para obter mais informaes,
consulte Aplicativo Manifest Exemplo Editor.
Observao
Este procedimento destinado a fim de executar essa explicao passo a passo. No use este
procedimento para conceder confiana a conjuntos ou diretrios se no tiver certeza que sejam
segura e protegida. Para obter mais informaes sobre concesso e remover permisses,
consulte HOW TO: conceder permisses para pastas e montagens e Como remover permisses
de pastas e montagens:.
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:
Visual Studio Tools for Office
O Word Microsoft Office 2003 ou Microsoft Office Excel 2003.
Observao
Essa explicao passo a passo inclui etapas para criar uma soluo simples que voc pode usar
em explicao passo a passo o Excel. Se voc deseja executar o explicao passo a passo com
uma soluo Word ou Excel existente, comearo o explicao passo a passo no ttulo criando o
Project a instalao, " " e certifique-se substituir o nome ExcelDeployment do projeto com o
nome do seu projeto em todos os exemplos de cdigo e instrues.
Criando o projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome ExcelDeployment.
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
ExcelDeployment projeto para Solution Explorer.
Adicionar cdigo para trs a pasta de trabalho
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos da
pasta de trabalho. Isso permite que voc para verificar se a soluo est funcionando quando
voc abre o documento rapidamente.
Para adicionar uma caixa de mensagem a um evento de inicializao
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
1. 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:.
2. 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.
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
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 void
menuCommand_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
{ Globals.Sheet1.Range["A1", missing].Value2 = "The menu command was clicked."; }
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#
Observao
Projetos C# e C++ so derivados dos modelos de projetos diferentes. Para obter mais
informaes sobre as diferenas entre projetos C++ e C#, consulte Gerenciamento item no
projetos e Usando Solution Explorer.
Para obter mais informaes sobre comparaes entre palavras-chave em C# e outras linguagens
de programao, consulte Equivalentes do idioma. Para obter informaes sobre a estrutura geral
do aplicativos C#, consulte Estrutura geral de um programa C# (guia de programao C#).
Em um programa C#
A seo aborda a estrutura geral de um programa C#, e inclui o Exemplo padro " Hello, World! ".
Nesta seo
Hello world--seu programa primeiro (guia de programao C#)
Estrutura geral de um programa C# (guia de programao C#)
Sees relacionadas
Guia de Introduo ao Visual C#
Migrando para o Visual C#
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
Exemplo
Este Exemplo exibe os argumentos de linha de comando passados para um aplicativo de linha de
comando. O resultado mostrado para a primeira entrada na tabela acima.
C#
class CommandLine { static void Main(string[] args) { // The Length property provides the
number of array elements System.Console.WriteLine("parameter count = {0}", args.Length); for
(int i = 0; i < args.Length; i++) { System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]); } } }
Sada
parameter count = 3 Arg[0] = [a] Arg[1] = [b] Arg[2] = [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
ToString()
Como todos os objetos derivados Object, seqncias fornecem o ToString mtodo, que converte
um valor em uma seqncia. Este mtodo pode ser usado para converter valores numricos em
seqncias, como este:
C#
int year = 1999; string msg = "Eve was born in " + year.ToString(); System.Console.WriteLine(msg); //
outputs "Eve was born in 1999"
Comparaes
Do == a maneira mais simples para comparar duas seqncias para usar e != operadores,
que executar uma comparao que diferencie maisculas de minsculas.
C#
string color1 = "red"; string color2 = "green"; string color3 = "red"; if (color1 == color3) {
System.Console.WriteLine("Equal"); } if (color1 != color2) { System.Console.WriteLine("Not
equal"); }
Objetos seqncia tambm ter um CompareTo() mtodo que retorna um valor inteiro com base
em se uma seqncia menos-(<)or greater-than (>) que outra . Ao comparar seqncias, o valor
Unicode usado, e minsculo tem um valor menor que maisculo.
C#
string s7 = "ABC"; string s8 = "abc"; if (s7.CompareTo(s8) > 0) {
System.Console.WriteLine("Greater-than"); } else { System.Console.WriteLine("Less-than"); }
Para procurar por uma seqncia dentro outra seqncia, use IndexOf(). Retorna
IndexOf()-1 se a seqncia de pesquisa no encontrada; caso contrrio, ele retorna o ndice do
primeiro local em que ele ocorre baseada em zero.
C#
string s9 = "Battle of Hastings, 1066"; System.Console.WriteLine(s9.IndexOf("Hastings")); // outputs 10
System.Console.WriteLine(s9.IndexOf("1967")); // outputs -1
Dividindo um string em Substrings
Dividir uma seqncia em substrings , como dividindo uma frase em palavras individuais
uma tarefa de programao comuns. O Split() mtodo utiliza uma char matriz de delimitadores,
Palavras-chave C#
Palavras-chave so identificadores reservados que tm significado especial para o compilador.
Eles no podem ser usados como identificadores em seu programa a menos que incluam @ como
um prefixo. Por exemplo, @if um identificador vlido mas if no, porque uma palavra-chave.
Palavras-chave contextuais
Palavra-chave abstract
O modificador abstract pode utilizar com classes, mtodos, propriedades, indicadores e
eventos.
Palavra-chave event
Especifica um evento.
[attributes] [modifiers] e v e n t type declarator;
[attributes] [modifiers] e v e n t type member-name { accessor-declarations} ;
de onde:
attributes (opcional)
modifiers (opcional)
Modificadores opcionais, entre os que se incluem:
abstract
new
override
static
virtual
extern
um dos quatro modificadores de acesso
type
Tipo delegado ao qual se deseja associar este evento.
declarator
Mome do evento.
member-name
Mome do evento.
accessor-declarations (opcional)
Declarao de os descritores de acesso , os quais se utilizam para agregar ou quitar
controladores de eventos no cdigo cliente. As funes para descritores de acesso so add e
remove. Definir s uma de elas produza um erro.
Comentarios
A palavra-chave event permite especificar um delegado ao qual se invocar quando ocorra
algum "evento" no cdigo. o delegado pode ter ou no o varios mtodos asociados a os que se
chamar quando o cdigo indique que o evento se ha producido. possvel poner um evento de
qualquer programa a disposio de outros programas que utilizem Common Language Runtime
do .NET Framework.
Para criar e utilizar eventos do C#, siga os seguintes pasos:
Crie ou identifique um delegado. Se est definindo um evento propio, tambm deve asegurarse de
que existe um delegado que possa utilizar com a palavra-chave event. Se o evento est
predefinido, por Exemplo em .NET Framework, entonces os consumidores do evento s
necessitan conhecer o nome do delegado.
1. Crie uma classe que contenha:
a. Um evento criado desde o delegado.
b. Um mtodo que comprova se existe uma instancia do delegado declarado com a
palavra-chave event (este mtodo opcional). outra opo consiste em inserir este
fragmento de cdigo dentro do cdigo que produza o evento.
Resultado
Exemplo 1
Este Exemplo mostra que possvel declarar um evento em uma interface e implement-lo em
uma classe:
// event_keyword.cs
using System;
public delegate void MyDelegate(); // delegate declaration
public interface I
{
event MyDelegate MyEvent;
void FireAway();
}
public class MyClass: I
{
public event MyDelegate MyEvent;
Exemplo 2
Uno de os usos daccessor-declarations consiste em exponer um gram nmero de eventos
sem ter que assinalar um campo para cada evento, sino utilizando em seu lugar uma taba hash
que almacene as instancias de os eventos. Isto s resulta til se se dispe de um gram nmero de
eventos, pois se preves que a maiora de os eventos no se implementaro.
// event_keyword2.cs
using System;
using System.Collections;
// event_keyword3.cs
using System;
public interface I1
public interface I2
{
event MyDelegate2 MyEvent;
}
public class ExplicitEventsSample: I1, I2
{
public event MyDelegate1 MyEvent; // normal implementation of I1.MyEvent.
Palavra-chave new
Em C#, a palavra-chave new pode utilizar como operador ou como modificador.
Operador new utilizado para criar objetos na pilha e invocar construtores.
Modificador new utilizado para ocultar um membro herdado de um membro de classe-
base.
OPERADOR NEW
O operador new utilizado para criar objetos e invocar construtores, por exemplo:
Class1 MyClass = new Class1();
public MyClass ()
{
}
// Display values:
Console.WriteLine("Default values:");
Console.WriteLine(" Struct members: {0}, {1}",
Ocation1.x, Ocation1.y);
Console.WriteLine(" Class members: {0}, {1}",
Empoyee1.name, Empoyee1.id);
// Display values:
Console.WriteLine("Assigned values:");
Console.WriteLine(" Struct members: {0}, {1}",
Ocation2.x, Ocation2.y);
Console.WriteLine(" Class members: {0}, {1}",
Empoyee2.name, Empoyee2.id);
}
}
Resultado
Default values:
Struct members: 0, 0
Class members: , 0
Assigned values:
Struct members: 10, 20
MODIFICADOR NEW
Use o modificador new para ocultar explcitamente um membro herdado de uma classe-base.
Para ocultar um membro herdado, declare-o na classe derivada com o mesmo mome e modifique-
o com o modificador new.
Considere a seguinte classe:
public class MyBaseC
{
public int x;
public void Invoke() {}
}
Ao declarar um membro com o nome Invoke em uma classe derivada se ocultar o mtodo
Invoke na classe-base, assim:
public class MyDerivedC : MyBaseC
{
new public void Invoke() {}
}
Mas, o campo x no ser afetado, j que no oculta nenhum mome similar.
A ocultao de nomes por meio da herana toma uma das seguintes formas:
Constante, campo, propriedade ou tipo introduzido em uma classe ou estrutura que oculta
todos os membros da classe-base com o mesmo nome.
Mtodo introduzido em uma classe o estrutura que oculta propriedades, campos e tipos, com
o mesmo nome, na classe-base. Tambm oculta todos os mtodos da classe-base com a mesma
firma. Para obter mais informao, veja 3.6 Firmas e sobrecarga.
Indicador introduzido em uma classe o estrutura que oculta todos os indicadores da classe-
base com a mesma firma.
incorreto utilizar simultneamente new e override no mesmo membro.
Se utilizada o modificador new em uma declarao que no oculta um membro herdado, se
gera uma advertencia.
Exemplo
Neste exemplo, uma classe-base, MyBaseC, e uma classe derivada, MyDerivedC, utilizam o
mesmo mome de campo x, o que produza a ocultao do valor do campo herdado. o Exemplo
demostra o uso do modificador new. Tambm mostra como obter acesso a os membros ocultos
da classe-base mediante sus nomes completos.
// cs_modifier_new.cs
// The new modifier
using System;
public class MyBaseC
{
public static int x = 55;
Console.WriteLine(S1.x);
Console.WriteLine(S2.x);
}
}
Resultado
100
200
PALAVRA-CHAVE STRUCT
Um tipo struct um tipo de valor que pode conter construtores, constantes, campos, mtodos,
propriedades, indicadores, operadores, eventos e tipos anidados. A declarao de um tipo struct
toma a forma seguinte:
de onde:
attributes (opcional)
Informao declarativa adicional. Para obter mais informao sobre os atributos e as classes
datributo, veja 17. Atributos.
modifiers (opcional)
Exemplo 1
Este Exemplo mostra a inicializao de um tipo struct mediante construtores predeterminados e
construtores com parmetros.
// keyword_struct.cs
// Display results:
Console.Write("My Point: ");
Console.WriteLine("x = {0}, e = {1}", myPoint.x, myPoint.y);
Console.Write("Your Point: ");
Console.WriteLine("x = {0}, e = {1}", yourPoint.x, yourPoint.y);
}
}
Resultados
My Point: x = 0, e = 0
Your Point: x = 10, e = 10
Exemplo 2
Este Exemplo mostra uma caracterstica exclusiva das estruturas. Cria um objeto Point sem
utilizar o operador new. Se se reemplaza a palavra struct pela palavra class, ou programa no
se compilar.
// keyword_struct2.cs
// Declare a struct object without "new"
using System;
public struct Point
{
public int x, y;
// Initialize:
myPoint.x = 10;
myPoint.y = 20;
// Display results:
Console.WriteLine("My Point:");
Console.WriteLine("x = {0}, e = {1}", myPoint.x, myPoint.y);
}
}
Resultados
My Point:
x = 10, e = 20
PALAVRA-CHAVE AS
O operador as utilizado para realizar converses entre tipos compatibles. o operador as
utilizado em expresses da forma:
expression a s type
de onde:
expression
Expresso de um tipo de referencia.
type
Tipo de referencia.
Comentarios
O operador as funciona como um molde de converso de tipos pero, se existe um erro na
conversin, proporciona o valor null em vez de produzir uma exceo. mais formalmente, uma
expresso da forma:
expression as type
equivale a:
expression is type ? (type)expression : (type)null
salvo que expression s se avalie uma vez.
Deve ter-se em conta que o operador as somente executa converses de referencia e converses
boxing. O operador as no pode realizar outras converses, como as definidas pelo usuario, que
deveriam ser realizadas utilizando expresses de converso.
Exemplo
// cs_keyword_as.cs
// The as operator
using System;
class MyClass1
{
}
class MyClass2
Palavra-chave explicit
A palavra-chave explicit utilizada para declarar um operador de converso do tipo explcita
definida pelo usuario (6.4.4 Converses explcitas definidas pelo usuario). Por exemplo:
class MyType
{
public static explicit operator MyType(int i)
{
// code to convert from int to MyType
}
}
int i;
MyType x = (MyType)i; // int-to-MyType requires cast
// cs_keyword_explicit.cs
using System;
struct Digit
{
byte value;
public Digit(byte value)
{
if (value>9) throw new ArgumentException();
this.value = value;
}
// define explicit byte-to-Digit conversion operator:
public static explicit operator Digit(byte b)
{
Digit d = new Digit(b);
Console.WriteLine("conversion occurred");
return d;
}
}
class Test
{
public static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
}
}
Resultado
conversion occurred
Palavra-chave null
A palavra-chave null um literal que representa uma referencia nula, assim, uma referencia que
no aponta a nenhum objeto. Null o valor predeterminado das variveis de tipos de referencia.
Palavra-chave base
A palavra-chave base utilizada para obter acesso a os membros da classe-base desde uma
classe derivada:
Realice uma chamada a um mtodo da classe-base substitudo por outro mtodo.
Especifique a qu construtor da classe-base deve chamar para criar instancias da classe
derivada.
O acesso a uma classe-base s se permite em um construtor, em um mtodo de instancia ou em
um descritor de acesso a uma propriedade de instancia.
incorreto utilizar a palavra-chave base dentro de um mtodo esttico.
Exemplo
Neste exemplo, tanto a classe-base, Person, como a classe derivada, Empoyee, posuem um
mtodo denominado Getinfo. Mediante a palavra-chave base, pode realizar uma chamada ao
mtodo Getinfo da classe-base desde a 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";
Exemplo
Este Exemplo mostra como especificar o construtor da classe-base o que se realiza a chamada
quando so criados instancias de uma classe derivada.
// keywords_base2.cs
using System;
public class MyBase
{
int num;
public MyBase()
{
Console.WriteLine("in MyBase()");
}
public MyBase(int i )
{
num = i;
Console.WriteLine("in MyBase(int i)");
}
Palavra-chave extern
Use o modificador extern em uma declarao de mtodo para indicar que o mtodo se
implementa externamente. um uso habitual do modificador extern com o atributo DllImport.
Veja DllImportAttribute (Classe) para obter mais informao.
incorreto utilizar simultneamente os modificadores abstract e extern para modificar o mesmo
membro. O uso do modificador extern significa que o mtodo se implementa fora do cdigo do
C#, enquanto que o uso do abstract significa que a implementao do mtodo no se inclui na
classe.
Como uma declarao de mtodo externo no proporciona uma implementao, no existe corpo
do mtodo; a declarao de mtodo finaliza simplemente com um ponto e vrgula e sem chaves ({
}) depois da firma. Por exemplo:
public static extern int MyMethod(int x);
Nota o uso da palavra-chave extern mais limitado que em C++. Para comparara com a
palavra-chave de C++, veja Utilizar extern para especificar vinculao na Referencia do lenguaje
C++.
Exemplo
Neste exemplo, ou programa recibe uma srie do usuario e a mostra dentro de um quadro de
mensagem. o programa utiliza ou mtodo MessageBox importado da biblioteca User32.dll.
using System;
using System.Runtime.InteropServices;
class MyClass
{
[DllImport("User32.dll")]
public static extern int MessageBox(int h, string m, string c, int type);
Compilao
Para gerar ou proyecto, siga estes pasos:
Compile Cmdll.c como uma DLL mediante a lnea de comandos de Visual C++:
cl /LD /MD Cmdll.c
Compile CM.cs mediante a lnea de comandos:
csc CM.cs
Desta forma, se criar o arquivo executable CM.exe. Quando execute este programa, MyMethod
passar o valor 5 ao arquivo DLL, o qual devoltar o valor multiplicado por 10.
Palavra-chave object
O tipo object um alias de System.Object do .NET Framework. As variveis do tipo object
podem receber valores de qualquer tipo.
Todos os tipos de dados, predefinidos e definidos pelo usuario, herdam da classe
System.Object. ou tipo de dados object ou tipo hacia o qual e desde o qual os objetos se
conviertem mediante boxing.
Exemplo
O seguinte Exemplo mostra como as variveis do tipo object podem aceitar valores de qualquer
tipo de dados e como podem utilizar mtodos de System.Object procedentes do .NET
Framework.
// keyword_object.cs
using System;
public class MyClass1
{
public int i = 10;
10
Palavra-chave this
A palavra-chave this faz referencia instancia atual da classe. As funes membro estticas no
apresentam um ponteiro this. Esta palavra-chave this pode ser utilizada para obter acesso a
membros desde construtores, mtodos de instancia e descritores de acesso de instancias.
A continuao, se indicam algunos usos comunes de this:
Obter acesso a membros com o fim de evitar ambigedades com nomes similares, por
exemplo:
public Empoyee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
Passar um objeto como parmetro a outros mtodos, por exemplo, para:
CalcTax(this);
Declarar indicadores, por exemplo:
public int this [int param]
{
get
{
return array[param];
}
set
{
// Construtor:
public Empoyee(string name, string alias)
{
// Use this to qualify the fields, name and alias:
this.name = name;
this.alias = alias;
}
// Printing method:
public void printEmpoyee()
{
Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
// Passing the object to the CalcTax method by using this:
Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
}
}
public class Tax
{
public static decimal CalcTax(Empoyee E)
{
return (0.08m*(E.salary));
}
}
// Display results:
E1.printEmpoyee();
}
Palavra-chave bool
A palavra-chave bool um alias de System.Boolean. utilizado para declarar variveis que
armazenam os valores booleanos true e false.
Literais
possvel assinalar um valor booleano a uma varivel do tipo bool, por exemplo:
bool MyVar = true;
Tambm pode assinalar uma expresso que se avalie como bool a uma varivel do tipo bool,
por exemplo:
bool Alphabetic = (c > 64 && c < 123);
Converses
Em C++, um valor do tipo bool pode converter em um valor do tipo int; assim: false equivale a
cero e true equivale a valores distintos de cero. Em C#, no possvel realizar a converso do
tipo bool a outros tipos ou viceversa. Por exemplo, a seguinte instruo if no vlida em C#,
mas se o em C++:
int x = 123;
if (x) // Invalid in C#
{
printf("The value of x is nonzero.");
}
Para provar uma varivel do tipo int, tem que comparara explcitamente com um valor (por
exemplo, cero); assim:
int x = 123;
if (x != 0) // The C# way
{
Console.Write("The value of x is nonzero.");
}
Exemplo
Neste exemplo, se escreve um carcter desde ou teclado e ou programa comprova se se trata de
uma letra. Nesse caso, comprova se minscula ou maiscula. Em cada caso, se mostra a
mensagem apropriada.
// keyword_bool.cs
// Character Tester
using System;
public class BoolTest
{
public static void Main()
{
Console.Write("Enter a character: ");
char c = (char) Console.Read();
if (Char.IsLetter(c))
Enter a character: 2
The character is not an alphabetic character.
Palavra-chave false
Em C#, a palavra-chave false pode utilizar como um operador sobrecarregado ou como um
literal.
Operador false
Literal false
OPERADOR FALSE
Em os tipos definidos pelo usuario pode definir um operador false que devolve o valor do tipo
bool true para indicar um valor lgico falso; caso contrario, devolve false. Isto resulta til para tipos
que representam valores true, false e null (nem true nem false), como os utilizados em base de
dados.
Esses tipos podem se utilizar em as expresses de controle das instrues if, do, while e for,
assim como em expresses condicionales.
Se um tipo define false como operador, tambm deve definir true como operador.
Um tipo no pode sobrecarregar diretamente os operadores lgicos condicionais (&& e ||), pois
pode conseguir um efeito equivalente se se sobrecarrega os operadores lgicos normais e os
operadores true e false (veja 7.11.2 Operadores lgicos condicionais definidos pelo usuario).
Exemplo
Veja o Exemplo de 11.4.2 Tipo boolean para base de dados.
FALSE (LITERAL)
A palavra-chave false um literal do tipo bool que reapresenta o valor lgico "falso".
Exemplo
// cs_keyword_false.cs
using System;
Palavra-chave operator
A palavra-chave operator utilizado para declarar um operador em uma declarao de
classe o estrutura. uma declarao de operador pode apresentar uma das seguintes cuatro
formas:
p u b l i c s t a t i c result-type o p e r a t o r unary-operator ( op-type operand )
p u b l i c s t a t i c result-type o p e r a t o r binary-operator (
op-type operand,
op-type2 operand2
)
p u b l i c s t a t i c i m p l i c i t o p e r a t o r conv-type-out ( conv-type-in operand )
p u b l i c s t a t i c e x p l i c i t o p e r a t o r conv-type-out ( conv-type-in operand )
de onde:
result-type
Tipo do resultado do operador.
unary-operator
Uno de os seguintes: + - ! ~ ++ true false
op-type
Tipo do primeiro (o nico) parmetro.
operand
Mome do primeiro (o nico) parmetro.
binary-operator
Uno de os seguintes: ^ << >> == != > < >= <=
op-type2
Tipo do segundo parmetro.
operand2
Mome do segundo parmetro.
conv-type-out
Tipo de destino de um operador de converso de tipos.
conv-type-in
Tipo de entrada de um operador de converso de tipos.
// overoad operator +
public static Fraction operator +(Fraction a, Fraction b)
{
return new Fraction(a.num * b.dem + b.num * a.den,
a.dem * b.den);
}
// overoad operator *
public static Fraction operator *(Fraction a, Fraction b)
{
return new Fraction(a.num * b.num, a.dem * b.den);
}
Palavra-chave throw
A instruo throw utilizado para sealizar a apario de uma situao anmaa (exceo)
durante a execuo do programa. Apresenta a seguinte forma:
t h r o w [expression];
de onde:
expression
O objeto exceo. Este elemento se omite se se vuelve a iniciar ou objeto de exceo atual em
uma clusula catch.
Comentarios
A exceo provocada um objeto cuja classe derivada de System.Exception, por exemplo:
class MyException : System.Exception {}
throw new MyException();
Normalmente, a instruo throw utilizado com as instrues try-catch ou try-finally. Quando se
provoca uma exceo, ou programa busca a instruo catch que controa esa exceo.
Tambm pode voltar a iniciar uma exceo detectada mediante a instruo throw.
Exemplo
Este Exemplo mostra como provocar uma exceo mediante a instruo throw.
// throw example
using System;
public class ThrowTest
{
public static void Main()
{
string s = null;
if (s == null)
{
throw(new ArgumentNullException());
}
switch(n)
{
case 1:
Console.WriteLine("Current value is {0}", 1);
break;
case 2:
Console.WriteLine("Current value is {0}", 2);
break;
Palavra-chave try-finally
O bloco finally til para liberar os recursos assinalados no bloco try. o controle se transfere
siempre ao bloco finally independientemente de como finalice o bloco try. A instruo apresenta a
seguinte forma:
t r y try-bock f i n a l l y finally-bock
de onde:
try-bock
Contm o segmento de cdigo que pode produzir a exceo.
finally-bock
Contm o controlador da exceo e ou cdigo que realiza a liberao de recursos.
Comentarios
Se biem catch utilizado para controlar excees que ocurrem em um bloco de instruces,
finally utilizado para garantizar que um bloco de cdigo se executa independientemente de
como finaliza o bloco try anterior.
Exemplo
Neste exemplo, existe uma instruo de converso no vlida que produza uma exceo. Se se
executa ou programa, se obtem um mensagem de erro em tiempo de execuo, pois a clusula
finally se executa de todas formas e mostra o resultado.
// try-finally
using System;
public class TestTryFinally
{
public static void Main()
{
int i = 123;
string s = "Some string";
object ou = s;
finally
{
Console.Write("i = {0}", i);
}
}
}
Resultado
Se produza a exceo seguinte:
System.InvalidCastException
Mas se captur uma exceo, a instruo de salida incluida no bloco finally se executar de
todas formas, assim:
i = 123
Para obter mais informao acerca de finally, veja try-catch-finally.
Palavra-chave out
A palavra-chave out aplicada a parmetros de mtodos faz que um mtodo haga referencia
varivel pasada ao mtodo. Qualquer cambio que se realice no parmetro dentro do mtodo se
reflejar em esa varivel quando se devuelva o controle ao mtodo que realiz a chamada.
Declarar um mtodo como out til quando se deseja que devuelva varios valores. um mtodo
que utiliza um parmetro out puede, no obstante, seguir devolviendo um valor. um mtodo pode
ter mais de um parmetro out.
Para utilizar um parmetro out, ou argumento deve passarse explcitamente ao mtodo como um
argumento out. o valor de um argumento out no se passar ao parmetro out.
Uma varivel que se pasa como argumento out no necessita inicializarse. No obstante, deve
assinalarse um valor ao parmetro out antes de que o mtodo devuelva a chamada.
Uma propriedade no uma varivel y, por tanto, no pode passar como parmetro out.
Se as declaraes de dois mtodos s se diferenan no uso de out, existir sobrecarga. Sem
embargo, no possvel definir uma sobrecarga que s se diferencie em ref e out. Por exemplo,
as seguintes declaraes de sobrecarga so vlidas:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
}
pois as seguintes no o son:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
Exemplo
Palavra-chave true
Em C#, a palavra-chave true pode utilizar como um operador sobrecarregado ou como um literal:
Operador true
Literal true
OPERADOR TRUE
Em os tipos definidos pelo usuario pode definir um operador true que devolve o valor do tipo bool
true para indicar um valor lgico verdadero; caso contrario, devolve false. Isto resulta til para
tipos que representam valores true, false e null (nem true nem false), como os utilizados em base
de dados.
Esses tipos podem se utilizar em as expresses de controle das instrues if, do, while e for,
assim como em expresses condicionales.
Se um tipo define true como operador, tambm deve definir false como operador.
Um tipo no pode sobrecarregar diretamente os operadores lgicos condicionais (&& e ||), pois
pode conseguir um efeito equivalente se se sobrecarrega os operadores lgicos normais e os
operadores true e false (veja 7.11.2 Operadores lgicos condicionais definidos pelo usuario).
Exemplo
Veja o Exemplo de 11.4.2 Tipo boolean para base de dados.
TRUE (LITERAL)
A palavra-chave true um literal do tipo bool que reapresenta o valor lgico "verdadero".
Exemplo
// cs_keyword_true.cs
using System;
class test
Resultado
yes
Palavra-chave byte
A palavra-chave byte denota um tipo integral que armazena valores segundo se indica na taba
seguinte.
Tipo do .NET
Tipo Intervalo Tamanho Framework
byte 0 a 255 Inteiro de 8 bits sem signo System.Byte
Literais
As variveis do tipo byte podem se declarar e inicializar como no seguinte exemplo:
byte myByte = 255;
Na declarao anterior, ou literal inteiro 255 se convierte implcitamente do tipo int ao tipo byte.
Se o literal inteiro supera ou intervalo de valores do tipo byte, se produzir um erro de
compilao.
Converses
Existe uma converso implcita predefinida de byte a short, ushort, int, uint, ong, uong,
foat, double ou decimal.
No podem se converter implcitamente tipos numricos no literais cujo tamanho
darmazenamiento seja superior a byte (veja Tabela de tipos integrais para conhecer os
tamanhos darmazenamiento de os tipos integrais). Considere, por exemplo, as dos seguintes
variveis do tipo byte, x e y:
byte x = 10, e = 20;
A instruo dassinalao seguinte produzir um erro de compilao, j que a expresso aritmtica
do lado direito do operador dassinalao se avalie de forma predeterminada como int.
byte z = x + y; // Erro: conversion from int to byte
Para solucionar este problema, utilize uma converso explcita:
byte z = (byte)(x + y); // OK: explicit conversion
Mas, possvel utilizar as instrues seguintes, de onde a varivel de destino tem um tamanho
darmazenamiento igual ou superior:
int x = 10, e = 20;
int m = x + y;
ong n = x + y;
Palavra-chave fixed
Impide que o recolector de elementos no utilizados cambie a colocao de uma varivel.
Apresenta a seguinte forma:
f i x e d ( type* ptr = expr ) statement
de onde:
type
Tipo no administrado ou tipo void.
ptr
Mome de ponteiro.
expr
Expresso que pode converter implcitamente em um tipo type*.
statement
Instruo o bloco executable.
Comentarios
A instruo fixed s se permite em um contexto unsafe.
A instruo fixed establece um ponteiro em uma varivel administrada e "fija" esa varivel
durante a execuo da instruo o bloco statement. Sem fixed, os ponteiros a variveis
administradas seran de poca utilidad, j que o proceso de recoleo de elementos no utilizados
poderia cambiar a colocao das variveis de forma impredecible. De hecho, ou compilador do C#
no permite definir um ponteiro a uma varivel administrada se no em uma instruo fixed.
// assume class Point { public int x, y; }
Point pt = new Point(); // pt is a managed varivel, subject to g.c.
fixed ( int* p = &pt.x ){ // must use fixed to get address of pt.x and
*p = 1; // pin pt in place while we use the pointer
}
Um ponteiro pode inicializar com a direo de uma matriz ou de uma srie:
class Point {
public int x, y;
}
class FixedTest
{
// unsafe method: takes pointer to int
unsafe static void SquarePtrParam (int* p)
{
*p *= *p;
}
// Construtor:
public Square(double x)
{
this.x = x;
}
Palavra-chave try-catch
A instruo try-catch consta de um bloco try seguido de uma ou mais clusulas catch, as quais
especificam controladores para diferentes excees . Esta instruo apresenta uma das seguintes
formas:
t r y try-bock
c a t c h ( exception-declaration-1) catch-bock-1
c a t c h ( exception-declaration-2) catch-bock-2
...
t r y try-bock c a t c h catch-bock
de onde:
try-bock
Contm o segmento de cdigo que pode produzir a exceo.
exception-declaration, exception-declaration-1, exception-declaration-2
Declarao do objeto exceo.
catch-bock, catch-bock-1, catch-bock-2
Contm o controlador da exceo.
Comentarios
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
}
public void MyFn(string s)
{
if (s == null)
throw(new ArgumentNullException());
}
}
Resultado
Se produza a exceo seguinte:
System.ArgumentNullException
Exemplo
Neste exemplo, se utilizam dos instrues catch. A exceo mais especfica, que aparece em
primeiro lugar, se captura primero.
// Ordering catch clauses
using System;
class MyClass
{
public static void Main()
{
MyClass x = new MyClass();
try
{
string s = null;
x.MyFn(s);
}
// Most specific:
catch (ArgumentNullException e)
// Least specific:
catch (Exception e)
{
Console.WriteLine("{0} Second exception caught.", e);
}
}
public void MyFn(string s)
{
if (s == null)
throw new ArgumentNullException();
}
}
Resultado
Se produza a exceo seguinte:
System.ArgumentNullException
No Exemplo anterior, se empieza com a clusula catch menos especfica, se obter o mensagem:
A previous catch clause already catch all exceptions of this or a super type ('System.Exception')
No obstante, para capturar a exceo menos especfica, deve substituir a instruo throw pela
seguinte:
throw new Exception();
Palavra-chave switch
A instruo switch uma instruo de controle que permite manejar varias selees e passar o
controle a uma das instrues case de seu cuerpo. Apresenta a seguinte forma:
s w i t c h ( expression)
{
c a s e constant-expression:
statement
jump-statement
[d e f a u l t :
statement
jump-statement]
}
De onde:
expression
Expresso do tipo integral ou srie.
statement
Instrues que se devem executar se se transfere o controle etiqueta caSe o default.
jump-statement
Instruo de salto que transfere o controle fora do corpo case.
constant-expression
Palavra-chave foat
A palavra-chave foat denota um tipo simple que armazena valores de ponto flutuante de 32 bits.
A seguinte taba mostra a precisin e ou intervalo aproximado para o tipo foat.
Tipo do .NET
Tipo Intervalo aproximado Precisin Framework
45 38
foat 1.5 10 a 3.4 10 7 dgitos System.Single
Literais
De forma predeterminada, um literal numrico real no lado direito do operador dassinalao se
trata como double. Por consiguiente, para inicializar uma varivel do tipo foat, utilize ou sufijo f
ou F; por exemplo:
foat x = 3.5F;
Se no utiliza ou sufijo na declarao anterior, obter um erro de compilao, j que est
intentando armazenar um valor do tipo double em uma varivel do tipo foat.
Converses
possvel combinar tipos numricos integral e tipos de ponto flutuante em uma expresso. Neste
caso, os tipos integrais se conviertem em tipos de ponto fotante. A evaluao da expresso se
realiza segundo as seguintes reglas:
Se uno de os tipos de ponto flutuante double, a expresso se avalie como double (o
bool no caso de expresses relacionales ou booleanas).
Se no existe nenhum tipo double na expresso, esta se avalie como foat (o bool no
caso de expresses relacionales ou booleanas).
Uma expresso de ponto flutuante pode conter os seguintes conjuntos de valores:
Cero negativo e positivo
Palavra-chave params
A palavra-chave params permite especificar um parmetro de mtodo que aceita um nmero
varivel dargumentos.
No permitido parmetros adicionales depois da palavra-chave params, nem varias palavras-
chave params em uma mesma declarao de mtodo.
Exemplo
// cs_params.cs
using System;
public class MyClass
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}
public static void UseParams2(params object[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}
public static void Main()
{
1
a
test
10
11
12
Palavra-chave typeof
O operador typeof utilizado com o fim de obter ou objeto System.Type para um tipo. uma
expresso typeof se apresenta da seguinte forma:
t y p e o f ( type)
de onde:
type
Tipo cujo objeto System.Type se deseja obtener.
Comentarios
O operador typeof no pode sobrecargar.
Para obter ou tipo de uma expresso em tiempo de execuo, pode utilizar o mtodo GetType
do .NET Framework.
Exemplo
// cs_operator_typeof.cs
// Using typeof operator
using System;
using System.Reflection;
MethodInfo[] x = t.GetMethods();
foreach (MethodInfo xtemp in x)
{
Console.WriteLine(xtemp.ToString());
}
Console.WriteLine();
MemberInfo[] x2 = t.GetMembers();
foreach (MemberInfo xtemp2 in x2)
{
Console.WriteLine(xtemp2.ToString());
}
}
}
Resultado
Int32 GetHashCode()
Boolean Equals(System.Object)
System.String ToString()
Void MyMeth()
Void Main()
System.Type GetType()
Int32 intI
Int32 GetHashCode()
Boolean Equals(System.Object)
System.String ToString()
Void MyMeth()
Void Main()
System.Type GetType()
Void .ctor()
Exemplo
// cs_operator_typeof2.cs
// Using GetType method
using System;
class GetTypeTest
{
public static void Main()
{
int radius = 3;
Console.WriteLine("Area = {0}", radius*radius*Math.PI);
Console.WriteLine("The type is {0}",
Palavra-chave try-catch
A instruo try-catch consta de um bloco try seguido de uma ou mais clusulas catch, as quais
especificam controladores para diferentes excees . Esta instruo apresenta uma das seguintes
formas:
t r y try-bock
c a t c h ( exception-declaration-1) catch-bock-1
c a t c h ( exception-declaration-2) catch-bock-2
...
t r y try-bock c a t c h catch-bock
de onde:
try-bock
Contm o segmento de cdigo que pode produzir a exceo.
exception-declaration, exception-declaration-1, exception-declaration-2
Declarao do objeto exceo.
catch-bock, catch-bock-1, catch-bock-2
Contm o controlador da exceo.
Comentarios
O bloco try-bock Contm o bloco de cdigo suceptvel de causar a exceo. Este bloco se
executa at que se produza uma exceo ou at completarse satisfatoriamente. Por exemplo, ou
seguinte intento de converter o tipo de um objeto null provoca a exceo
NullReferenceException:
object o2 = null;
try
{
int i2 = (int) o2; // Erro
}
A clusula catch pode utilizar sem argumentos, em cujo caso captura qualquer tipo de exceo e
se conhece como clusula catch geral. Tambm pode aceitar um argumento de objeto derivado
de System.Exception, em cujo caso trata uma exceo especfica. Por exemplo:
catch (InvalidCastException e)
{
}
possvel utilizar mais de uma clusula catch especfica na mesma instruo try-catch. Neste
caso, a ordem das clusulas catch importante j que estas se examinam por ordem. As
excees mais especficas se capturam antes que as menos especficas.
Exemplo
Neste exemplo, o bloco try contm uma chamada ao mtodo MyFn(), que pode produzir uma
exceo. A clusula catch Contm o controlador da exceo, o qual simplemente mostra um
mensagem na tela. Quando se realiza a chamada instruo throw desde dentro de MyFn(), o
sistema busca a instruo catch e mostra a mensagem Exception caught.
// Rethrowing exceptions:
using System;
class MyClass
{
public static void Main()
{
MyClass x = new MyClass();
try
{
string s = null;
x.MyFn(s);
}
catch (Exception e)
// Most specific:
catch (ArgumentNullException e)
{
Console.WriteLine("{0} First exception caught.", e);
}
// Least specific:
catch (Exception e)
{
Console.WriteLine("{0} Second exception caught.", e);
}
}
public void MyFn(string s)
{
if (s == null)
throw new ArgumentNullException();
}
}
Resultado
Se produza a exceo seguinte:
Palavra-chave for
O lao for executa uma instruo ou um bloco de instrues repetidamente at que uma
expresso especificada se avalie como false. Apresenta a seguinte forma:
f o r ( [initializers]; [expression]; [iterators]) statement
de onde:
initializers
Lista de expresses ou instrues dassinalao, separadas por comas, que inicializam os
contadores do lao.
expression
Expresso que pode converterse implcitamente no tipo bool ou em um tipo que contenga a
sobrecarga de os operadores true e false. A expresso se usa para comprovar ou criterio de
terminao do lao.
iterators
Expresses ou instrues que incrementan ou reducem os contadores do lao.
statement
Instrues que se devem executar dentro do lao.
Comentarios
A instruo for executa sus instrues internas repetidamente da seguinte forma:
Primero, avalie os inicializadores.
A continuao, enquanto expression se avalie como true, se executan as instrues do
lao e se avalien os iteradores.
Quando expression se faz false, o controle se transfere fora do lao.
Debido a que a comprobao de expression tem lugar antes da execuo do lao, a instruo
for se executa cero ou varias veces.
Todas as expresses da instruo for so opcionales; por exemplo, a seguinte instruo
utilizado para criar um lao infinito:
for (;;) {
...
}
Exemplo
// statements_for.cs
// for oop
using System;
public class ForOopTest
{
public static void Main()
Palavra-chave private
A palavra-chave private um modificador de acesso de membros. ou acesso do tipo private
corresponde ao nivo de acesso mais restrictivo. Os membros privados s so accesibles dentro
do corpo da classe o a estrutura na qual se declaran.
Os tipos anidados do mesmo corpo tambm podem ter acesso a esses membros privados.
Fazer referencia a um membro privado fora da classe o estrutura na que se declara produza um
erro de compilao.
Encontrar uma comparao de private com os outros modificadores de acesso em Niveles
daccesibilidad.
Exemplo
Neste exemplo, a classe Empoyee contm um membro pblico, Name, e um membro privado,
Salary. ou acesso ao membro pblico pode realizar diretamente, enquanto que o acesso ao
membro privado deve fazerse a travs do mtodo pblico AccessSalary().
// private_keyword.cs
using System;
class Empoyee
{
public string name = "xx";
double salary = 100.00; // private access by default
public double AccessSalary() {
return salary;
}
}
class MainClass
{
public static void Main()
{
Empoyee e = new Empoyee();
Palavra-chave uint
A palavra-chave uint denota um tipo integral que armazena valores segundo ou tamanho e ou
intervo que se indicam na taba seguinte.
Tipo do .NET
Tipo Intervalo Tamanho Framework
uint 0 a 4.294.967.295 Inteiro de 32 bits sem signo System.UInt32
Literais
As variveis do tipo uint podem se declarar e inicializar como no seguinte exemplo:
uint myUint = 4294967290;
Quando um literal inteiro no tem sufijo, seu tipo ou primero de estes tipos no que pode
representar seu valor: int, uint, ong, uong. Neste exemplo, uint.
Tambm pode utilizar o sufijo u ou U:
uint myUint = 123U;
Quando utilizado ou sufijo U ou u, ou tipo do literal ser uint ou uong, segundo seu tamanho.
Neste exemplo, uint.
Converses
Existe uma converso implcita predefinida de uint a ong, uong, foat, double ou decimal.
Por exemplo:
foat myFoat = 4294967290; // OK: implicit conversion to foat
Existe uma converso implcita predefinida de byte, ushort ou char a uint. Em qualquer outro
caso, deve utilizar uma converso explcita. Por exemplo, para uma varivel do tipo ong, myOng,
a seguinte instruo dassinalao produzir um erro de compilao sem uma converso explcita:
ong myOng = 22;
uint myUint = myOng; // Erro: no implicit conversion from ong
uint myUint = (uint)myOng; // OK: explicit conversion
Observe que tampoco existe converso implcita de tipos de ponto flutuante a uint. Por exemplo,
a instruo seguinte gerar um erro de compilao, a menos que se utilize uma converso
explcita:
uint x = 3.0; // Erro: no implicit conversion from double
uint e = (uint)3.0; // OK: explicit conversion
Para obter mais informao sobre expresses aritmticas com tipos de ponto flutuante e tipos
integrais, veja foat e double.
Para obter mais informao sobre as regas de converso numrica implcitas, veja a Taba de
converses numricas implcitas.
Tipo do .NET
Tipo Intervalo Tamanho Framework
Literais
As constantes do tipo char podem se escrever como caracteres literais, secuencias de escape
hexadecimales ou representaes Unicode. Os cdigos de caracteres integrais podem se
converter explcitamente ao tipo char. Em as seguintes instrues se declara uma varivel do tipo
char e se inicializa com o carcter X:
char MyChar = 'X'; // Character literal
char MyChar = '\x0058'; // Hexadecimal
char MyChar = (char)88; // Cast from integral type
char MyChar = '\u0058'; // Unicode
Converses
Um valor do tipo char pode converter implcitamente a os tipos ushort, int, uint, ong, uong,
foat, double ou decimal. Sem embargo, no existem converses implcitas desde outros tipo
ao tipo char.
Palavra-chave foreach, in
A instruo foreach repite um grupo de instrues incluidas no lao para cada elemento de uma
matriz ou de um objeto collection. A instruo foreach utilizado para iterar em uma coleo de
elementos e obter a informao desejada, pois no deve utilizar para cambiar ou contenido da
coleco, j que podem se produzir efectos secundarios imprevisibles. A instruo apresenta a
seguinte forma:
f o r e a c h ( type identifier i n expression) statement
de onde:
type
Tipo do identificador identifier.
identifier
Varivel de iterao que reapresenta ou elemento da coleco. Se a varivel de iterao
um tipo de valor, se trata em efeito de uma varivel de s lectura que no pode ser modificada.
expression
Expresso que reapresenta uma matriz ou uma coleo de objetos. ou tipo de os elementos da
coleo deve poder converterse ao tipo de identifier. No utilize uma expresso que evale
como null.
Evale um tipo que implemente IEnumerable ou um tipo que declare um mtodo
GetEnumerator. no ltimo caso, GetEnumerator deve devoltar um tipo que implemente
IEnumerator ou que declare todos os mtodos definidos em IEnumerator
statement
Palavra-chave volatile
A palavra-chave volatile indica que um campo pode ser modificado no programa pelo sistema
operativo, ou hardware ou um subproceso em execuo de forma simultnea.
v o l a t i l e declaration
de onde:
declaration
A declarao de um campo.
Comentarios
O sistema siempre lee o valor atual de um objeto voltil no ponto de onde se solicita, aum quando
a instruo previa pidiera um valor ao mesmo objeto. Assim mesmo, o valor de um objeto se
escreve inmediatamente no momento da assinalao.
O modificador volatile se suele utilizar para um campo ao que tengan acesso varios
subprocesses sem utilizar a instruo ock para serializar ou acesso . O uso do modificador
volatile garante que um subproceso recupere o valor mais atualizado de os escritos por outro
subproceso.
O tipo de um campo marcado como voltil est restringido a os seguintes tipos:
Qualquer tipo de referencia.
Qualquer tipo de ponteiro (em um contexto no seguro).
Os tipos byte, sbyte, short, ushort, int, uint, char, foat ou bool.
Um tipo enum com um tipo base enum de byte, sbyte, short, ushort, int ou uint.
Para obter mais informao sobre o modificador volatile, veja 10.4.3 Campos voltiles.
Exemplo
O Exemplo seguinte mostra como declarar uma varivel de campo pblica como volatile.
// csharp_volatile.cs
class Test
{
public volatile int i;
Test(int _i)
{
i = _i;
}
public static void Main()
{
Palavra-chave delegate
Uma declarao delegate define um tipo de referencia que pode utilizar para encapsular um
mtodo com uma firma especfica. uma instancia de delegado encapsua um mtodo esttico ou
de instancia. Os delegados so similares a os ponteiros a funes de C++, pois so mais seguros
e proporcionam maior seguridad de tipos.
A declarao apresenta a seguinte forma:
[attributes] [modifiers] d e l e g a t e result-type identifier ( [formal-parameters]) ;
de onde:
attributes (opcional)
Informao declarativa adicional. Para obter mais informao sobre os atributos e as classes
datributo, veja 17. Atributos.
modifiers (opcional)
Os modificadores permitidos so new e os cuatro modificadores de acesso .
result-type
Tipo do resultado, que coincide com o tipo devuelto do mtodo.
identifier
Mome do delegado.
formal-parameters (opcional)
Lista de parmetros. Se um parmetro um ponteiro, ou delegado deve declararse com o
modificador unsafe.
Comentarios
Um delegado permite passar uma funo como parmetro. A seguridad de tipos de os delegados
requiere que a funo que se pasa como delegado tenga a mesma firma que a declarao do
delegado. Veja ou Tutorial de delegados para obter mais informao sobre o uso de delegados.
O Tutorial de delegados mostra como componer delegados, assim, criar delegados a partir de
outros delegados. um delegado que contm um parmetro out no pode componer.
Os delegados so a base de os eventos.
Para obter mais informao sobre delegados, veja 15. Delegados.
Exemplo 1
O seguinte um Exemplo sencilo de declarao e uso de um delegado.
// keyword_delegate.cs
// delegate declaration
delegate void MyDelegate(int i);
class Program
{
public static void Main()
{
TakesADelegate(new MyDelegate(DelegateFunction));
}
public static void TakesADelegate(MyDelegate SomeFunction)
{
// delegate declaration
delegate void MyDelegate();
class ThreadTest
{
public void runme()
{
Console.WriteLine("runme called");
}
class Account
{
int balance;
Random r = new Random();
public Account(int initial)
{
balance = initial;
}
int Withdraw(int amount)
{
Palavra-chave stackaloc
Permite assinalar um bloco de memoria na pilba.
type * ptr = s t a c k a l o c type [ expr ] ;
de onde:
type
Tipo no administrado.
ptr
Mome de ponteiro.
expr
Expresso entera.
Comentarios
Se reserva na pia um bloco de memoria de tamanho suficiente para conter expr elementos do
tipo type; a direo do bloco se armazena no ponteiro ptr. Esta memoria no est sometida a
reciclaje y, por o tanto, no necessita fijarse (por medio de fixed). A vida do bloco de memoria se
limita vida do mtodo no que se define.
O operador stackaloc s vlido em inicializadores de variveis ocales.
Como se utilizam ponteiros (ver A.2 Tipos de ponteiro), stackaloc requiere um contexto unsafe.
O operador stackaloc similar a _aloca da biblioteca de tiempo de execuo de C.
Exemplo
// cs_keyword_stackaloc.cs
// compile with: /unsafe
using System; class Test
{
public static unsafe void Main()
{
int* fib = stackaloc int[100];
int* p = fib;
*p++ = *p++ = 1;
for (int i=2; i<100; ++i, ++p)
*p = p[-1] + p[-2];
for (int i=0; i<10; ++i)
Console.WriteLine (fib[i]);
}
}
Resultado
1
Estouro Aritmtico
Os operadores aritmticos (+., -) pode produzir resultados que estejam fora do intervalo dos
valores possveis para o tipo numrico envolvido, /* Voc deve consultar a seo sobre um
operador especfico para obter detalhes, mas em geral:
Qualquer throws estouro aritmtico inteiro ou descarta os bits do resultado mais
significativos. um OverflowException Diviso por zero sempre throws um
DivideByZeroException.
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).
Estouro Aritmtico Decimal Sempre gera um OverflowException. Decimal diviso por
zero sempre throws um DivideByZeroException.
Quando estouro inteiro ocorre, o que acontece depende do contexto de execuo, que pode ser
marcado ou desmarcado. Em um contexto selecionado, ser gerada. um OverflowException
Em um contexto desmarcado, os bits do resultado mais significativos so descartados e continua
a execuo. Assim, C# oferece a voc a opo de manipulao ou ignorando estouro.
Transbordamento aritmtico
Os operadores aritmticos (+, -, *, /) podem produzir resultados fora do intervalo de valores
possveis para o tipo numrico implicado. Pode encontrar mais informao acerca de um
determinado operador na seo Referena do lenguaje C#; no obstante, em general:
O transbordamento aritmtico de inteiros inicia uma exceo de transbordamento
(OverflowExcetion) o bem elimina os bits mais significativos do resultado (vase mais abaixo).
a diviso de inteiros por cero sempre produz uma exceo DivideByZeroExcetion.
O transbordamento aritmtico ou a diviso por cero em ponto flutuante no produzem uma
exceo, j que os tipos de ponto flutuante se baseiam em o estndar IEEE 754, que
proporciona uma representao para os valores infinito e Nam (Not a Number, no um
nmero).
O transbordamento aritmtico de valores do tipo decimal sempre produz uma exceo
OverflowExcetion. a diviso de valores decimal por zero sempre produz uma exceo
DivideByZeroExcetion.
Quando produzido um transbordamento de inteiros, lo que ocurre depende do contexto da
execuo, o qual pode ser checkede o unchecked. em um contexto checkede (comprobado),
produzido uma exceo OverflowExcetion. em um contexto uncheckede (no comprobado), os bits
mais significativos do resultado no se temm em cuenta e a execuo contina. Desta forma, C#
permite escolher entre atender o desatender o transbordamento.
Alm dos operadores aritmticos, as converses explcitas entre tipos integrais tambm podem
produzir transbordamento (por exemplo, converter um tipo long em um tipo int) e esto sometidas
ao tipo de execuo checkede o unchecked. Por otro lado, observe que os operadores de
deslocamento e de bit a bit nunca produzem transbordamento.
Operadores sobrecarregados
C# permite sobrecarregar operadores nos tipos definidos pelo usuario, mediante a definio, com
a palavra chave operator, de funes membro estticas. No obstante, no todos os operadores
podem ser sobrecarregados, e alguns apresentam restrices, como se indica na seguinte tabela:
Operador [ ]
Os colchetes ([ ]) so utilizados para arrays, indicadores e atributos. Tambm podem ser utilizar
com ponteiros.
type [ ]
array [ indexexpr ]
De onde:
type
Tipo.
array
Array.
indexexpr
Expresso de ndice.
Comentarios
Um tipo de array composto de um tipo seguido de []:
int[] fib; // fib is of type int[], "array of int"
fib = new int[100]; // criate a 100-element int array
Para obter acesso a um elemento do array, o ndice do elemento desejado se encierra entre
colchetes:
fib[0] = fib[1] = 1;
for( int i=2; i<100; ++i ) fib[i] = fib[i-1] + fib[i-2];
produzido uma exceo se o ndice do array est fora do intervalo declarado.
O operador de indicao no pode sobrecarregar; no obstante, os tipos podem definir
indicadores, que so propriedades que aceitam um ou varios parmetros. Os parmetros de um
Operador ( )
Alm disso de seu uso para especificar o ordem de as operaes em uma expresso, os
parntesis so utilizados para especificar converses do tipo explcitas (cast):
( type ) expr
De onde:
type
Nome do tipo o que se deseja converter a expresso expr.
expr
Expresso.
Comentarios
Uma converso do tipo invoca explcitamente ao operador de converso para converter o tipo da
expresso expr ao tipo type; ser produzido um erro na converso se no se tenha definido esse
operador. Para definir um operador de converso, veja explicit e implicit.
Exemplo
O seguinte programa converte explcitamente um tipo double em um tipo int. O programa no
compilar sem o operador de converso do tipo.
// cs_operator_parentheses.cs
using System;
class Test
{
public static void Main()
{
double x = 1234.7;
int a;
a = (int)x; // cast double to int
Console.WriteLine(a);
Operador . (ponto)
O operador de ponto utilizado para o acesso a membros.
name1 . name2
De onde:
name1
Nome.
name2
Nome.
Comentarios
Por exemplo, considere a seguinte clase:
class Simple
{
public int a;
public void b()
{
}
}
Simple s = new Simple();
A variveis tem dos membros, a e b; para tener acesso a ellos, use o operador de ponto:
s.a = 6; // assign to field a;
s.b(); // invoke member function b;
O ponto tambm utilizado para formar nomes completos, dizer, nomes que especificam o
namespaces ou a interfaz (por exemplo) que pertencem.
System.Console.WriteLine("hello"); // class Console in namespace System
A directiva using hace que a calificao de nomes seja opcional em alguns casos:
using System;
...
System.Console.WriteLine("hello");
Console.WriteLine("hello"); // same thing
Mas, um identificador ambiguo deve calificarse:
using System;
using OtherSystem; // a namespace containing another Console class
...
System.Console.WriteLine( "hello" ); // must qualify Console
Operador +
O operador + pode funcionar como operador unrio o binrio.
Operador -
O operador - pode funcionar como operador unrio o binrio.
- expr
Visual C# Consolidado 242
expr1 - expr2
De onde:
expr
Expresso.
expr1
Expresso.
expr2
Expresso.
Comentarios
Os operadores - unrios se encontram predefinidos para todos os tipos numricos. O resultado de
uma operao - unaria aplicada a um tipo numrico a negao do operando.
Os operadores binrios esto predefinidos para todos os tipos numricos e de enumerao de
modo que restam o segundo operando do primeiro.
Os tipos delegados tambm proporcionam um operador - binrio, o qual realiza a eliminao de
delegados.
Os tipos definidos pelo usuario podem sobrecarregar os operadores - unrio e binrio (veja
operator).
Exemplo
// cs_operator_minus.cs
using System;
class Test
{
public static void Main()
{
int a = 5;
Console.WriteLine(-a);
Console.WriteLine(a - 1);
Console.WriteLine(a - .5);
}
}
Resultado
-5
4
4.5
Operador *
O operador de multiplicao (*) calcula o produto de seus operandos. Todos os tipos numricos
possuem operadores de multiplicao predefinidos.
expr1 * expr2
De onde:
expr1
Expresso.
expr2
Operador /
O operador de diviso (/) permite dividir seu primeiro operando pelo segundo. Todos os tipos
numricos possuem operadores de diviso predefinidos.
expr1 / expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador / (veja operator).
Exemplo
// cs_operator_division.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(-5/2);
Console.WriteLine(-5.0/2);
}
}
Operador %
O operador de mdulo (%) calcula o resto de dividir seu primeiro operando pelo segundo. Todos
os tipos numricos possuem operadores de mdulo predefinidos.
expr1 % expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador % (veja operator).
Exemplo
// cs_operator_modulus.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(5 % 2); // int
Console.WriteLine(-5 % 2); // int
Console.WriteLine(5.0 % 2.2); // double
Console.WriteLine(5.0m % 2.2m); // decimal
Console.WriteLine(-5.2 % 2.0); // double
}
}
Resultado
1
-1
0.6
0.6
-1.2
Observe os erros de rede onde o que apresenta o tipo double.
Operador &
O operador & pode funcionar como operador unrio o binrio.
& expr
expr1 & expr2
De onde:
expr
Visual C# Consolidado 245
Expresso.
expr1
Expresso.
expr2
Expresso.
Comentarios
O operador & unrio devolve a direo de memoria de seu operando (requiere um contexto
unsafe).
Os operadores & binrios esto predefinidos para os tipos integrais e bool. Para tipos integrais, &
calcula a operao AND bit a bit de seus operandos. Para operandos do tipo bool, & calcula a
operao lgica AND de seus operandos; dizer, o resultado true se, e somente se, ambos
operandos so true.
Os tipos definidos pelo usuario podem sobrecarregar o operador & binrio (veja operator).
Exemplo
// cs_operator_ampersand.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(true & false); // logical and
Console.WriteLine(true & true); // logical and
Console.WriteLine("0x{0:x}", 0xf8 & 0x3f); // bitwise and
}
}
Resultado
False
True
0x38
Operador |
Os operadores binrios | esto predefinidos para os tipos integrais e bool. Para tipos integrais, |
calcula a operao OR bit a bit de seus operandos. Para operandos do tipo bool, | calcula a
operao lgica OR de seus operandos; dizer, o resultado false se, e somente se, ambos
operandos so false.
expr1 | expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador | (veja operator).
Operador ^
Os operadores ^ binrios esto predefinidos para os tipos integrais e bool. Para tipos integrais, ^
calcula a operao OR exclusiva bit a bit de seus operandos. Para operandos do tipo bool, ^
calcula a operao lgica OR exclusiva de seus operandos; dizer, o resultado true se, e
somente se, exatamente um dos operandos true.
expr1 ^ expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador ^ (veja operator).
Exemplo
// cs_operator_bitwise_OR.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(true ^ false); // logical exclusive-or
Console.WriteLine(false ^ false); // logical exclusive-or
Console.WriteLine("0x{0:x}", 0xf8 ^ 0x3f); // bitwise exclusive-or
}
}
Resultado
True
False
Operador !
O operador lgico negao (!) um operador unrio que nega seu operando. Est definido para o
tipo bool, e devolve true se, e somente se, seu operando false.
! expr
De onde:
expr
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador ! (veja operator).
Exemplo
// cs_operator_negation.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(!true);
Console.WriteLine(!false);
}
}
Resultado
False
True
Operador ~
O operador ~ realiza uma operao de complemento bit a bit sobre seu operando. Os operadores
de complemento bit a bit esto predefinidos para int, uint, long e ulong.
~ expr
De onde:
expr
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador ~ (veja operator).
Exemplo
// cs_operator_bitwise_compl.cs
using System;
class Test
{
public static void Main()
{
Operador =
O operador de assinalao (=) armazena o valor do operando situado a seu direita na colocao
de armazenamento, propriedade ou indicador indicado pelo operando situado a seu esquerda, e
devolve o valor como resultado. Os operandos devem ser do mesmo tipo (o o operando da direita
deve poder converter implcitamente ao tipo do operando da esquerda).
lhs = expr
De onde:
lhs
Uma colocao de armazenamento, uma propriedade ou um indicador.
expr
Expresso.
Comentarios
O operador de assinalao no pode sobrecarregar.
Exemplo
// cs_operator_assignment.cs
using System;
class Test
{
public static void Main()
{
double x;
int i;
i = 5; // int to int assignment
x = i; // implicit conversion from int to double
i = (int)x; // needs cast
Console.WriteLine("i is {0}, x is {1}", i, x);
object obj = i;
Console.WriteLine("boxede value = {0}, type is {1}",
obj, obj.GetType());
i = (int)obj;
Console.WriteLine("unboxed: {0}", i);
}
}
Resultado
i is 5, x is 5
boxede value = 5, type is System.Int32
unboxed: 5
Operador >
Todos os tipos numricos e de enumerao definem um operador relacional "maior que" (>) que
devolve true se o primeiro operando maior que o segundo, e false em caso contrario.
expr1 > expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
Os tipos definidos pelo usuario podem sobrecarregar o operador > (veja operator). se
sobrecarrega >, tambm deve sobrecarregar <.
Exemplo
// cs_operator_greater_than.cs
Operador ?:
O operador condicional (?:) devolve um de dois valores segundo o valor de uma expresso
booleana. O operador condicional utilizado em expresses da forma:
cond-expr ? expr1 : expr2
De onde:
cond-expr
Expresso do tipo bool.
expr1
Expresso.
expr2
Expresso.
Comentarios
Si cond-expr true, expr1 se avalia e se devolve como resultado; se cond-expr false,
expr2 a que se avalia e se devolve como resultado. Somente uma de as dos, expr1 o expr2,
resulta evaluada.
Os clculos que, em qualquer otro caso, podran requerir um bloque de deciso if-elpodem ser
expresar mais concisa e elegantemente mediante o operador condicional. Por exemplo, para
evitar uma diviso por cero em o clculo da funo sinc, podra escreverse:
if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
o bien, com o operador condicional,
s = x != 0.0 ? Math.Sin(x)/x : 1.0;
O operador condicional asociativo por a direita, de modo que uma expresso da forma:
a ? b : c ? de : e
se avalia como
a ? b : (c ? de : e)
en lugar de
(a ? b : c) ? de : e
Operador ++
O operador de incremento (++) incrementa seu operando em 1. Este operador pode aparecer
antes o depois de seu operando:
+ + var
var + +
De onde:
var
Expresso que indica uma colocao de armazenamento, uma propriedade ou um indicador.
Comentarios
A primeira forma uma operao de incremento prefixo. O resultado da operao o valor do
operando depois de haver sido incrementado.
A segunda forma uma operao de incremento postfijo. O resultado da operao o valor do
operando antes de haver sido incrementado.
Os tipos numricos e de enumerao possuem operadores de incremento predefinidos. Os tipos
definidos pelo usuario podem sobrecarregar o operador ++ (veja operator).
Exemplo
// cs_operator_increment.cs
using System;
class Test
{
public static void Main()
{
double x;
Operador --
O operador de decremento (--) reduz seu operando em 1. Este operador pode aparecer antes o
depois de seu operando:
- - var
var - -
De onde:
var
Expresso que indica uma colocao de armazenamento, uma propriedade ou um indicador.
Comentarios
A primeira forma uma operao de decremento prefixo. O resultado da operao o valor do
operando depois de haver experimentado o decremento.
A segunda forma uma operao de decremento postfijo. O resultado da operao o valor do
operando antes de haver experimentado o decremento.
Os tipos numricos e de enumerao possuem operadores de decremento predefinidos. Os tipos
definidos pelo usuario podem sobrecarregar o operador -- (veja operator).
Exemplo
// cs_operator_decrement.cs
using System;
class Test
{
public static void Main()
{
double x;
x = 1.5;
Console.WriteLine(--x);
x = 1.5;
Console.WriteLine(x--);
Console.WriteLine(x);
}
}
Operador &&
O operador AND condicional (&&) realiza uma operao lgica AND de seus operandos do tipo
bool mas somente avalia seu segundo operando se necessrio.
expr1 & & expr2
De onde:
expr1
Expresso.
expr2
Expresso.
Comentarios
A operao
x && y
corresponde com a operao
x&y
salvo que se x false, e no se avalia (j que o resultado da operao AND ser false
independentemente do valor de y). Este se conhece como evaluao "cortocircuitada".
O operador AND condicional no pode sobrecarregar, mas as sobrecarregas dos operadores
lgicos normales e os operadores true e false se consideran tambem, com ciertas restrices,
sobrecarregas dos operadores lgicos condicionais (veja 7.11.2 Operadores lgicos condicionais
definidos pelo usuario).
Exemplo
No seguinte exemplo, observe que a expresso que utiliza && somente avalia o primeiro
operando.
// cs_operator_logical_and.cs
using System;
class Test
{
static bool fn1()
{
Console.WriteLine("fn1 called");
return false;
}
Cuidado
Otimizao
Opo Propsito
/filealign Especifica o tamanho das sees no arquivo de sada.
/ Otimizar Ativa / desativa otimizaes.
Arquivos de sada
Opo Propsito
/Doc Especifica um arquivo XML onde os comentrios documentao processados so a
serem gravados.
/ Fora Especifica o arquivo de sada.
/PDB Especifica o nome de arquivo e local do arquivo.pdb.
/platform Especificar a plataforma de sada.
/target Especifica o formato do arquivo de sada usando uma das quatro opes:
/Target:exe/Target:Library/Target:Module/Target:winexe
Preprocessor
Opo Propsito
/ Define Define smbolos de pr-processamento.
Recursos
Opo Propsito
/linkresource Cria um vnculo a um recurso gerenciado.
/Resource Incorpora um recurso do .NET Framework no arquivo de sada.
/win32icon Especifica um arquivo.ico para inserir no arquivo de sada.
/win32res Especifica um recurso do Win32 para inserir no arquivo de sada.
Diversos
Opo Propsito
@ Especifica um arquivo de resposta.
/? Lista opes do compilador para STDOUT.
/BaseAddress Especifica o endereo base preferido no qual se carregar um DLL.
/Codepage Especifica a pgina de cdigos a ser usado para todos os arquivos de cdigo de
fonte a compilao.
/help Lista opes do compilador para STDOUT.
/langversion Especifica qual verso do idioma a ser usado.
/ Principal Especifica o local do mtodo Main.
/noconfig Instrui o compilador no para compilar com CSC.RSP.
/nologo Evita Suprime as informaes de faixa do compilador.
/recurse Procura subdiretrios para arquivos de origem para compilar.
Obsoleto opes
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.
Todos os Erros de compilador C# ter correspondentes tpicos que explique por que um erro
gerado, e em alguns casos, como corrigir o erro. Para obter ajuda sobre uma mensagem de erro
especfica, tente um destes procedimentos:
Procedimento
Exemplo atributos Mostra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo.
Exemplo parte 1 Mostra como usar C# para interoperar com objetos COM.
Interop COM
Exemplo parte 2 Mostra como um servidor use um C# com um cliente com C++.
Interop COM
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.
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke Mostra como chamar exportadas funes DLL do C#.
exemplo
Exemplo de Discute a segurana do .NET Framework e mostra duas maneiras de
segurana modificar as permisses de segurana em C#: Usando classes de
permisso e atributos de permisso.
Segmentao de Demonstra vrias atividades do segmento, como criando e executando um
exemplo segmento, sincronizando segmentos, interagir entre segmentos, e usando
um pool de segmentos.
Exemplo de cdigo Mostra como usar ponteiros.
no seguros
Exemplo de Mostra como a documentar cdigo usando XML.
documentao XML
Observao de segurana
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
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
Exemplo propriedades
Download sample
Este Exemplo mostra como propriedades so uma parte integral da C# linguagem de
programao. Ele demonstra como propriedades so declaradas e usados. Consulte
Propriedades Para obter mais informaes.
Observao de segurana
Exemplo bibliotecas
Download sample
Este Exemplo mostra como criar e usar uma DLL 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
Exemplo de verso
Download sample
Este Exemplo demonstra verso em C# atravs do uso de e new palavras-chave. o override
Verso ajuda manter a compatibilidade entre classes base e derivados como eles evoluir. Para
obter informaes adicionais, consulte Verso com o substituio e palavras-chave new (guia de
programao 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
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
Exemplo Structs
Download sample
Este Exemplo apresenta a sintaxe e uso de estruturas. Ele tambm aborda as diferenas
importantes entre classes e estruturas. Consulte Objetos, classes e Structs (guia de programao
C#) Para obter mais informaes.
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
Exemplo indexadores
Download sample
Este Exemplo mostra como classes C# podem declarar indexadores para fornecer acesso
semelhante matriz-s classes.
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
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
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
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
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
Exemplo representantes
Download sample
Este Exemplo demonstra os tipos de representante. Ele mostra como para mapear delegados
para estticos e mtodos da instncia, e como combin-las para criar representantes de difuso
seletiva.
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
Exemplo eventos
Download sample
Este Exemplo mostra como a declarar, chamar, e configurar eventos em C#. Para obter mais
informaes, consulte Eventos (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
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
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
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
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
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
Observao
Adicionando uma referncia para o componente faz a mesma coisa que chamar TLBIMP na linha
de comando para criar QuartzTypeLib.dll (como mostrado abaixo).
Para criar e executar os exemplos com Interop Parte 1 a partir da linha de comando
1. Use o Change Directory comando para alterar para o diretrio Interop1.
2. Digite o seguinte:
tlbimp %windir%\system32\quartz.dll /out:QuartzTypeLib.dll csc /r:QuartzTypeLib.dll
interop1.cs interop1 %windir%\clock.avi
3. Use o Change Directory comando para alterar para o diretrio Interop2.
4. Digite o seguinte:
csc interop2.cs interop2 %windir%\clock.avi
Observao
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
Exemplo atributos
Download sample
Este Exemplo demonstra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo. Para obter mais informaes sobre atributos, consulte Atributos
(guia de programao 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
Exemplo de segurana
Download sample
Este Exemplo demonstra como modificar as permisses de segurana atravs de classes de
permisso e atributos de permisso. Para obter informaes adicionais, consulte Segurana (guia
de programao 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
Segmentao de Exemplo
Download sample
Este Exemplo demonstra as seguintes tcnicas segmentao. Consulte Segmentao (guia de
programao C#) Para obter mais informaes.
Criar, iniciar, e Finalizando um segmento
Usando um pool de segmentos
Segmento Sincronizao e interao
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
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
Exemplo BD OLE
Download sample
Este Exemplo 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. O
banco de dados BugTypes.MDB usado no programa de Exemplo um arquivo.mdb do Microsoft
Access 2000.
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
Observao
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
Produzir Exemplo
Download sample
Este Exemplo mostra como criar uma classe lista que implementa IEnumerable<int> e
palavra-chave yield Para ativar foreach iterao atravs do contedo da lista. Duas
propriedades so definidas, um retornar os nmeros mpares, o outro retornar os nmeros pares.
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
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
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
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
Coleo Exemplo Mostra como fazer classes coleo Generic no-que podem ser usados
classes com a foreach instruo.
Exemplo generics (C#) Mostra como fazer classes a coleo genrica que podem ser usados
com a foreach instruo.
Exemplo indexadores Mostra como usar notao de matriz para acessar um objeto.
Indexado Exemplo Mostra como a implementar uma classe que usa propriedades
propriedades indexadas. Propriedades indexadas permitem que voc para usar uma
classe que representa uma coleo de vrios tipos diferentes de itens
semelhantes matriz-.
Exemplo Overloading Mostra como definido pelo usurio classes poder sobrecarregar
do operador operadores.
Exemplo Conversions Mostra como definir converses de e para tipos definidos pelo usurio.
definidas pelo usurio
Exemplo atributos Mostra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo.
Exemplo parte 1 Mostra como usar C# para interoperar com objetos COM.
Interop COM
Exemplo parte 2 Mostra como um servidor use um C# com um cliente com C++.
Interop COM
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.
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
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
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
Exemplo propriedades
Download sample
Este Exemplo mostra como propriedades so uma parte integral da C# linguagem de
programao. Ele demonstra como propriedades so declaradas e usados. Consulte
Propriedades Para obter mais informaes.
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
Exemplo bibliotecas
Download sample
Este Exemplo mostra como criar e usar uma DLL 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
Exemplo de verso
Download sample
Este Exemplo demonstra verso em C# atravs do uso de e new palavras-chave. o override
Verso ajuda manter a compatibilidade entre classes base e derivados como eles evoluir. Para
obter informaes adicionais, consulte Verso com o substituio e palavras-chave new (guia de
programao 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
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
Exemplo Structs
Download sample
Este Exemplo apresenta a sintaxe e uso de estruturas. Ele tambm aborda as diferenas
importantes entre classes e estruturas. Consulte Objetos, classes e Structs (guia de programao
C#) Para obter mais informaes.
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
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
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
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
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
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
Exemplo representantes
Download sample
Este Exemplo demonstra os tipos de representante. Ele mostra como para mapear delegados
para estticos e mtodos da instncia, e como combin-las para criar representantes de difuso
seletiva.
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
Exemplo eventos
Download sample
Este Exemplo mostra como a declarar, chamar, e configurar eventos em C#. Para obter mais
informaes, consulte Eventos (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
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
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
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
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
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
Observao
Adicionando uma referncia para o componente faz a mesma coisa que chamar TLBIMP na linha
de comando para criar QuartzTypeLib.dll (como mostrado abaixo).
Para criar e executar os exemplos com Interop Parte 1 a partir da linha de comando
5. Use o Change Directory comando para alterar para o diretrio Interop1.
Observao
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
Exemplo atributos
Download sample
Este Exemplo demonstra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo. Para obter mais informaes sobre atributos, consulte Atributos
(guia de programao 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
Exemplo de segurana
Download sample
Este Exemplo demonstra como modificar as permisses de segurana atravs de classes de
permisso e atributos de permisso. Para obter informaes adicionais, consulte Segurana (guia
de programao 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
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
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
Exemplo BD OLE
Download sample
Este Exemplo 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. O
banco de dados BugTypes.MDB usado no programa de Exemplo um arquivo.mdb do Microsoft
Access 2000.
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
Observao
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
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
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
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
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
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#
O Framework .NET
Aplicativos do Windows
Depurao
Accesso a Dados
Criando Classes
Segurana
Programao do Office
Dispositivos Inteligentes
Implantao
A linguagem C#
O que h de novo na linguagem e no compilador C# 2.0
Especificao da linguagem C#
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#)
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.
Propriedades
COMO: Declarar e usar propriedades de leitura/escrita (Guia de programao C#)
Eventos
COMO: Criar um controle que responde a eventos (Guia de programao C#)
COMO: Criar eventos que estejam de acordo com as diretrizes do .NET Framework (Guia de
programao C#)
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.
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.
Fornece um exemplo de cdigo que demonstra como usar a palavra-chave default para
tipo parmetros.
Espaos de nomes
COMO: Usar o qualificador de espao de nomes Alias (Guia de programao C#)
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#)
Representantes (Delegates)
COMO: Combinar representantes (Representantes Multicast) (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.
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.
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.
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.
Contm um exemplo de cdigo que demonstra como usar mtodos de String para procurar
em uma seqncia.
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.
Contm um exemplo que testa uma DLL para verificar se ela um mdulo (assembly).
COMO: Compartilhar um mdulo (assembly) com outros aplicativos (Guia de programao C#)
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.
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#).
Opo /errorreport
Pode ser usado para relatar erros de compilador interno Microsoft atravs da Internet.
Opo /incremental
Foi removido.
e /keycontainer/KeyFile Opes
Opo /langversion
Pode ser usado para especificar compatibilidade com uma verso especfica do idioma.
Opo /linkresource
Opo /moduleassemblyname
Opo /PDB
Opo /Platform
Aviso # pragma
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.
No MSDN Online em
http://msdn.microsoft.com/vcsharp/Programming/Language/default.aspx
No Visual Studio, na pasta VC#\Specifications\1033\ sob o diretrio de instalao do
seu Microsoft Visual Studio 2005 .
Se voc no tiver o Microsoft Word instalado em seu computador, voc pode visualizar, copiar e
imprimir a verso do Word da especificao com o gratuito Palavra visualizador 2003.
A especificao da linguagem C# tambm est disponvel como um livro publicado pelo Addison
Wesley.
CSharp
class TestClass { static void Main(string[] args) { // Display the number of command line arguments:
System.Console.WriteLine(args.Length); } }
Viso Geral
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).
Ou ele pode retornar void ou ento um tipo int.
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.
Diferentemente C e C++, o nome do programa no tratado como o primeiro argumento
de linha de comando.
Outra abordagem para Iterando atravs da matriz a usar a foreach instruo conforme mostrado
no exemplo. A foreach instruo pode ser usada para iterar por uma matriz, uma classe Coleo
.NET Framework, ou qualquer classe ou estrutura que implementa a IEnumerable interface.
Exemplo
Este exemplo demonstra como imprimi-los os argumentos de linha de comando usando foreach.
C#
// arguments: John Paul Mary
C#
class CommandLine2 { static void Main(string[] args) { System.Console.WriteLine("Number of command
line parameters = {0}", args.Length); foreach (string s in args) { System.Console.WriteLine(s); } } }
Sada
Number of command line parameters = 3 John Paul Mary
Exemplo
Este exemplo exibe os argumentos de linha de comando passados para um aplicativo de linha de
comando. O resultado mostrado para a primeira entrada na tabela acima.
C#
class CommandLine { static void Main(string[] args) { // The Length property provides the number of array
elements System.Console.WriteLine("parameter count = {0}", args.Length); for (int i = 0; i < args.Length;
i++) { System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]); } } }
Sada
parameter count = 3 Arg[0] = [a] Arg[1] = [b] Arg[2] = [c]
C#
static void Main() { //... }
C#
static int Main() { //... return 0; }
Se o valor de retorno da Main no deve ser usado, seguida, retornar void permite que cdigo
ligeiramente mais simples. No entanto, retornar um inteiro permite que o programa para relacionar
informaes de status para outros programas ou scripts que chamar o executvel. Um exemplo de
usar o valor de retorno da Main mostrado no exemplo a seguir.
Exemplo
Um arquivo em lotes, neste exemplo usado para executar um programa e testar o valor a Main
funo de retorno. Quando um programa executado no Windows, qualquer valor retornado da
Main funo armazenado em uma varivel de ambiente chamada ERRORLEVEL. Ao inspecionar
a ERRORLEVEL varivel, arquivos em lotes portanto podem determinar o resultado da execuo.
Tradicionalmente, um valor de retorno de zero indica execuo com xito. Abaixo um programa
muito simples que retorna zero da funo Main.
C#
class MainReturnValTest { static int Main() { //... return 0; } }
Como este exemplo usa um arquivo em lotes, melhor para compilar esse cdigo a partir da linha
de comando, conforme demonstrado no Como construir a partir da linha de comando:.
rem test.bat @echo off MainReturnValueTest @if "%ERRORLEVEL%" == "0" goto good :fail echo Execution
Failed echo return value = %ERRORLEVEL% goto end :good echo Execution Succeded echo return value =
%ERRORLEVEL% goto end :end
Sada de exemplo
Execution Succeded
return value = 0
Chamar um mtodo na classe base que tenha sido substitudo por outro mtodo.
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
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#:
COMO: Saber as diferenas entre passar uma estrutura e passar uma referncia de classe
para um mtodo (Guia de programao C#)
Este exemplo mostra que Quando. passado para um mtodo, uma cpia da estrutura
passada, mas quando uma Classe instncia passada, uma referncia passada um struct
Exemplo
C#
class TheClass { public string willIChange; } struct TheStruct { public string willIChange; } class
TestClassAndStruct { static void ClassTaker(TheClass c) { c.willIChange = "Changed"; } static void
StructTaker(TheStruct s) { s.willIChange = "Changed"; } static void Main() { TheClass testClass = new
TheClass(); TheStruct testStruct = new TheStruct(); testClass.willIChange = "Not Changed";
testStruct.willIChange = "Not Changed"; ClassTaker(testClass); StructTaker(testStruct);
System.Console.WriteLine("Class field = {0}", testClass.willIChange); System.Console.WriteLine("Struct
field = {0}", testStruct.willIChange); } }
Sada
Class field = Changed Struct field = Not Changed
C#
Observao
Para maior clareza, essa classe contm membros de dados pblica. Essa uma prtica de
programao no recomendada porque ela permite que qualquer mtodo em qualquer lugar em
um programa irrestrito e unverified acesso ao funcionamento interno do objeto. Membros de dados
geralmente deve ser particular, e devem ser acessados apenas por classe mtodos e
propriedades.
Esse construtor chamada sempre que um objeto baseado na classe CoOrds criado. Um
construtor como esta ocorrncia, que tem sem argumentos, chamada um construtor padro. No
entanto, geralmente til para fornecer construtores adicionais. Por exemplo, que pode adicionar
um construtor para a CoOrds classe que permite que ns para especificar os valores iniciais para
os membros de dados:
C#
// A constructor with two arguments: public CoOrds(int x, int y) { this.x = x; this.y = y; }
Isso permite CoOrd objetos a ser criado com padro ou especficos valores iniciais, como este:
C#
CoOrds p1 = new CoOrds(); CoOrds p2 = new CoOrds(5, 3);
Construtores instncia podem ser usados para chamar as construtores da instncia de classes
base. O construtor de classe pode chamar o construtor da classe base atravs do Inicializador, da
seguinte maneira:
C#
Neste exemplo, os Circle valores passagens de classe representando raio e altura para o
construtor fornecidos por Shape do que Circle derivado. A concluir exemplo usando Shape e Circle
aparece neste tpico como Exemplo 3.
Exemplo 1
O exemplo a seguir demonstra uma classe com construtores dois classe, uma sem argumentos e
outra com dois argumentos.
C#
class CoOrds { public int x, y; // Default constructor: public CoOrds() { x = 0; y = 0; } // A constructor with
two arguments: public CoOrds(int x, int y) { this.x = x; this.y = y; } // Override the ToString method: public
override string ToString() { return (System.String.Format("({0},{1})", x, y)); } } class MainClass { static void
Main() { CoOrds p1 = new CoOrds(); CoOrds p2 = new CoOrds(5, 3); // Display the results using the
overriden ToString method: System.Console.WriteLine("CoOrds #1 at {0}", p1);
System.Console.WriteLine("CoOrds #2 at {0}", p2); } }
Sada
CoOrds #1 at (0,0)
CoOrds #2 at (5,3)
Exemplo 2
Neste exemplo, a classe Person no tem qualquer construtores, nesse caso, um construtor padro
automaticamente fornecida e os campos so inicializados para seus valores padro.
C#
public class Person { public int age; public string name; } class TestPerson { static void Main() { Person p =
new Person(); System.Console.Write("Name: {0}, Age: {1}", p.name, p.age); } }
Sada
Name: , Age: 0
Exemplo 3
O exemplo a seguir demonstra usando o inicializador de classe base. A Circle classe derivada da
classe Shape geral, e a Cylinder classe derivada de classe Circle. O construtor em cada classe
derivada est usando o inicializador de classe base.
C#
abstract class Shape { public const double pi = System.Math.PI; protected double x, y; public Shape(double x,
double y) { this.x = x; this.y = y; } public abstract double Area(); } class Circle : Shape { public Circle(double
radius) : base(radius, 0) { } public override double Area() { return pi * x * x; } } class Cylinder : Circle { public
Cylinder(double radius, double height) : base(radius) { y = height; } public override double Area() { return (2
* base.Area()) + (2 * pi * x * y); } } class TestShapes { static void Main() { double radius = 2.5; double height
= 3.0; Circle ring = new Circle(radius); Cylinder tube = new Cylinder(radius, height);
System.Console.WriteLine("Area of the circle = {0:F2}", ring.Area()); System.Console.WriteLine("Area of the
cylinder = {0:F2}", tube.Area()); } }
Sada
Para obter mais exemplos em chamar os construtores de classe base, consulte (referncia C#)
virtual, Substituir (referncia C#). e base (Referncia do C#)
Propriedades fornecem a praticidade de membros de dados pblica sem os riscos que vm com
Acesso desprotegido, no controlada, e no-verificados aos dados de um objeto. Isso feito
atravs de assessores: especiais mtodos que atribuir e recuperar valores do membro de dados
subjacente. O Definir acessador permite que membros de dados a ser atribudo, e o Obter
acessador recupera valores Membro de dados.
Este exemplo mostra uma Person classe que tenha duas propriedades: Name. (Seqncia) e Age
(int) Ambas as propriedades fornecem get e set assessores, so considerados para leitura /
gravao propriedades.
Exemplo
C#
class Person { private string m_name = "N/A"; private int m_Age = 0; // Declare a Name property of type
string: public string Name { get { return m_name; } set { m_name = value; } } // Declare an Age property of
type int: public int Age { get { return m_Age; } set { m_Age = value; } } public override string ToString() {
return "Name = " + Name + ", Age = " + Age; } } class TestPerson { static void Main() { // Create a new
Person object: Person person = new Person(); // Print out the name and the age associated with the person:
System.Console.WriteLine("Person details - {0}", person); // Set some values on the person object:
person.Name = "Joe"; person.Age = 99; System.Console.WriteLine("Person details - {0}", person); //
Increment the Age property: person.Age += 1; System.Console.WriteLine("Person details - {0}", person); } }
Sada
Programao robusta
No exemplo anterior, e Age propriedades so Pblica e incluir um get e um set acessador. o Name
Isso permite que qualquer objeto para ler e gravar essas propriedades. s vezes desejvel,
entretanto, para excluir uma das assessores. Por exemplo, omitir o set acessador, faz a
propriedade somente leitura:
C#
public string Name { get { return m_name; } }
Como alternativa, voc pode expor um acessador publicamente mas tornar a outros particular ou
protegido. Para obter mais informaes, consulte Acessibilidade Accessor assimtrica.
Depois que as propriedades so declaradas, eles podem ser usados como se fossem campos de
classe. Isso permite para uma sintaxe muito natural quando tanto obtendo e definindo o valor de
uma propriedade, como nas instrues a seguir:
C#
person.Name = "Joe"; person.Age = 99;
Observe que, um mtodo propriedade set uma varivel Especial value est disponvel. Essa
varivel contenha o valor que o usurio especificado, por exemplo:
C#
m_name = value;
C#
person.Age += 1;
Se separado set e get mtodos foram usados para modelar propriedades, o cdigo equivalente
pode parecer isso:
person.SetAge(person.GetAge() + 1);
C#
public override string ToString() { return "Name = " + Name + ", Age = " + Age; }
Aviso que ToString no explicitamente usado no programa. Ele chamado por padro, as
WriteLine chamadas.
O exemplo a seguir mostra como definir abstrato propriedades. Uma declarao de propriedade
abstract no fornece uma implementao das assessores Propriedade--ele declara que a classe
Este exemplo consiste trs arquivos, cada um deles so compilados individualmente e seu
conjunto resultante referido pela compilao seguinte:
Exemplo
Este arquivo declara a Shape classe que contm a Area propriedade do tipo double.
C#
// compile with: csc /target:library abstractshape.cs public abstract class Shape { private string m_id; public
Shape(string s) { // calling the set accessor of the Id property. Id = s; } public string Id { get { return m_id; }
set { m_id = value; } } // Area is a read-only property - only a get accessor is needed: public abstract double
Area { get; } public override string ToString() { return Id + " Area = " + string.Format("{0:F2}", Area); } }
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;
}}}
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
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); } }
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#
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#
Chamar um evento s pode ser feito de dentro da classe que declarado o evento.
Conectando backup a um evento
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
Sada
This is called when the event fires. This is called when the event fires.
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
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.
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.
private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling
code here. }
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 que as seguintes linhas no mtodo Main, e so comentadas porque eles
produziria erros de compilao. Um membro de interface que implementado explicitamente
no pode ser acessado de uma Classe instncia:
C#
//System.Console.WriteLine("Length: {0}", box1.getlength()); //System.Console.WriteLine("Width: {0}",
box1.getwidth());
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());
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
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()); }
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.
C#
public class Generic<T> { public T Field; }
Quando voc cria uma instncia de uma classe genrico, voc especificar os tipos reais para
substituir para os parmetros tipo. Isso estabelece uma nova classe genrico, conhecido como
uma classe genrico construdo, com seus tipos substitudos em todos os lugares que aparecem
C#
Generic<string> g = new Generic<string>(); g.Field = "A string";
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.
Parmetros tipo genrico ou Parmetros tipo, so espaos reservados em uma definio
tipo ou mtodo genrico. O Dictionary tipo genrico tem dois parmetros Tipo, TKey e
TValue, que representa os tipos de suas chaves e valores.
A Construdo tipo genrico, ou Tipo construdo, o resultado da especificando tipos para
os parmetros tipo genrico de 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; ...}
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++
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
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.
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.
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.
C#
public event EventHandler<MyEventArgs> MyEvent;
A List classe genrica tambm oferece um ForEach mtodo que usa o Action representante.
Esse mtodo no genrico.
Observao
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.
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.
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.
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.
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.
C#
int index = Array.BinarySearch(myArray, "test string"); int index = Array.BinarySearch<string>(myArray,
"test string");
C#
public class GenericList<T> { private class Node { //... public Node Next; public T Data; } private Node head;
//... public T GetNext() { T temp = default(T); Node current = head; if (current != null) { temp =
current.Data; current = current.Next; } return temp; } }
C#
static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; }
C#
public static void TestSwap() { int a = 1; int b = 2; Swap<int>(ref a, ref b); System.Console.WriteLine(a + " "
+ b); }
Voc tambm pode omitir o argumento Tipo e o compilador deduzir-lo. A chamada para permutar
a seguir equivalente como a chamada anterior:
C#
Swap(ref a, ref b);
As mesmas regras para a inferncia tipo se aplicam a mtodos estticos, bem como mtodos da
instncia. O compilador capaz de inferir os parmetros tipo com base em argumentos do mtodo
voc passar na; ele no pode inferir os parmetros tipo somente de uma restrio ou retornar
valor. Portanto, a inferncia tipo no funciona com os mtodos que possuem sem parmetros.
Ocorre a inferncia tipo em tempo de compilao antes o compilador tenta se resolver nenhuma
assinatura mtodo sobrecarregado. Se o compilador aplica lgica a inferncia tipo a todos os
mtodos que compartilham o mesmo nome genricos. Na etapa de resoluo de sobrecarga, o
compilador inclui apenas esses mtodos genricos no qual a inferncia tipo xito.
Em uma classe genrico, mtodos no-Generic podem acessar os parmetros tipo nvel de
classe, da seguinte maneira:
C#
class SampleClass<T> { void Swap(ref T lhs, ref T rhs) { } }
Se voc definir um mtodo genrico que leva os mesmos parmetros tipo como a classe que
contm o compilador ir gerar aviso CS0693 porque dentro do escopo mtodo, o argumento
fornecido para o T interna ocultar o argumento fornecido para o T. externa Se voc exigir a
flexibilidade de chamar um mtodo de classe genrico com argumentos Tipo diferente aquelas
fornecidas quando a classe foi instanciada, considere fornecer outro identificador para do mtodo
Parmetro tipo, como mostrado GenericList2<T> no exemplo a seguir.
C#
class GenericList<T> { // CS0693 void SampleMethod<T>() { } } class GenericList2<T> { //No warning void
SampleMethod<U>() { } }
Utilizar restries para ativar operaes mais especializadas em parmetros tipo nos mtodos.
Esta verso do Swap<T>, agora chamado SwapIfGreater<T>, somente pode ser usada com
argumentos Tipo que implementam IComparable<T>.
C#
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> { T temp; if
(lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; } }
Mtodos genricos podem ser sobrecarregados em um nmero de parmetros tipo. Por exemplo,
os seguintes mtodos podem todos existir na mesma classe:
C#
Especificao da Linguagem C#
Para obter mais informaes, consulte as sees a seguir no Especificao da Linguagem C#:
Restrio Descrio
Onde struct T: O argumento Tipo deve ser um tipo de valor. Qualquer tipo de valor exceto
Nullable pode ser especificado. Consulte Usando tipos Nullable (C#
programao guia) Para obter mais informaes.
Onde: classe T O argumento Tipo deve ser um tipo de referncia, incluindo qualquer classe,
interface, representante, ou tipo de matriz.
Onde: New() T O argumento Tipo deve ter um construtor sem parmetros pblico. Quando
usado em conjunto com outras restries, a new() restrio deve ser
especificada pela ltima vez.
where T : <base O argumento Tipo deve ser ou derivar de classe base especificada.
class name>
where T : O argumento Tipo deve ser ou implementam a interface especificada. Vrias
<interface restries interface podem ser especificadas. A interface restries tambm
name> pode ser genrica.
Onde: U T O argumento Tipo fornecido para T deve ser ou derivar do argumento fornecido
para u. Isso chamado uma restrio tipo naked.
Se voc desejar examinar um item em uma lista genrica para determinar se ele vlido ou para
compar-lo para algum outro item, o compilador deve ter alguns garante que o operador ou
mtodo que ele precisa para chamar ter suporte por qualquer argumento tipo que pode ser
especificado pelo cdigo do cliente. ESTA GARANTIA obtida ao aplicar uma ou mais restries
para a definio de classe genrico. Por exemplo, a restrio classe base informa o compilador
que somente objetos desse tipo ou derivado desse tipo ser usado como argumentos Tipo.
Quando o compilador tem esta garantia, ela pode permitir que mtodos desse tipo a ser chamado
dentro da classe genrico. Restries so aplicadas usando a palavra-chave where contextual. O
exemplo de cdigo a seguir demonstra a funcionalidade que pode adicionar para a GenericList<T>
classe (in Introduo ao Generics (guia de programao C#)), aplicando uma restrio classe
base.
C#
public class Employee { private string name; private int id; public Employee(string s, int i) { name = s; id = i;
} public string Name { get { return name; } set { name = value; } } public int ID { get { return id; } set { id =
value; } } } public class GenericList<T> where T : Employee { private class Node { private Node next; private
A restrio permite que a classe genrica para utilizar a Employee.Name propriedade desde todos
os itens do tipo T so garantidas como um Employee objeto ou um objeto herdeira de Employee.
Vrias restries podem ser aplicadas para o mesmo parmetro, tipo e as restries prprios
podem ser tipos genricos, da seguinte forma:
C#
class EmployeeList<T> where T : Employee, IEmployee, System.IComparable<T>, new() { // ... }
Ao aplicar a where T : class restrio, recomendvel que voc no faa use porque esses
operadores testar para identidade de referncia apenas, no para igualdade VALOR. e !=
operadores sobre o parmetro tipo a == Esse o caso mesmo se esses operadores so
sobrecarregados em um tipo usado como um argumento. O cdigo a seguir ilustra este ponto; a
sada false, embora a String classe overloads o == operador.
C#
public static void OpTest<T>(T s, T t) where T : class { System.Console.WriteLine(s == t); } static void
Main() { string s1 = "foo"; System.Text.StringBuilder sb = new System.Text.StringBuilder("foo"); string s2 =
sb.ToString(); OpTest<string>(s1, s2); }
A razo para esse comportamento que, ao tempo de compilao, o compilador somente sabe
que T um tipo de referncia, e portanto deve utilizar os operadores padro que so vlidos para
todos os tipos de referncia. Se voc precisar testar a igualdade valor, a maneira recomendada
para tambm aplicar a where T : IComparable<T> restrio e implementar a interface em qualquer
classe que ser usado para construir a classe genrica.
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 {/*...*/} }
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.
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 367
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#)
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(); } } }
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.
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!
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;
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
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}",
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.
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
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.
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
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 374
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.
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.
Executando o cdigo
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(); }
Compilando 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
Sada
The first 10 elements are: 0 1 2 3 4 5 6 7 8 9
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
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,
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();
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#
Neste ponto apenas o segmento primrio executando Main existe. Ele exibe uma mensagem final,
e depois retorna, encerrando o segmento primrio, bem.
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
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#).
C#
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.
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.
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
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.
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(); }
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 =
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
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.
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
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
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.
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
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);
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
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); } }
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 '
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#)
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.
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:
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:
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:
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
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.
Conjuntos podem ser privado nem compartilhada: Por padro, simples maioria dos programas C#
consistir de um conjunto particular porque eles no se destinam a ser usado por outros aplicativos.
Para compartilhar um conjunto com outros aplicativos, ele deve ser colocado no (GAC Cache
global de assembly ).
Compartilhar um conjunto
1. Criar seu conjunto. Para obter mais informaes, consulte Criando conjuntos.
2. Atribuir um nome de alta segurana a seu conjunto. Para obter mais informaes, consulte
COMO: Assinar uma Assembly com Nome Forte.
3. Atribuir informaes de verso a seu conjunto. Para obter mais informaes, consulte
Versionamento de assembly.
4. Incluir seu conjunto para o cache assembly global. Para obter mais informaes, consulte
Como Instalar um Assembly na Cache Global de Assemblies.
5. Acessar os tipos contidos no conjunto dos outros aplicativos. Para obter mais informaes,
consulte Como Referenciar um Assembly de Nome Forte.
Executar cdigo em outro domnio de aplicao (Guia de programao
C#)
Depois que um conjunto tenha sido carregado em um domnio de aplicativo, ele contm o cdigo
pode ser executado. A maneira mais simples para fazer isso para usar AssemblyLoad qual ir
carregar o conjunto para o domnio de aplicativos atual, e comear a execuo do cdigo em
ponto de entrada padro do conjunto.
Se voc deseja executar o outro conjunto comeando no ponto de entrada padro, alm de definir
um novo tipo no conjunto remoto, derivar de MarshalByRefObject. Usar CreateInstance para criar
uma instncia do tipo do seu aplicativo.
C#
// This namespace contains code to be called. namespace HelloWorldRemote { public class RemoteObject :
System.MarshalByRefObject { public RemoteObject() { System.Console.WriteLine("Hello, World!
(RemoteObject Constructor)"); } } class Program { static void Main() { System.Console.WriteLine("Hello,
World! (Main method)"); } } }
Para acessar o cdigo de outro aplicativo, voc pode tanto carregar o conjunto para o domnio de
aplicativo atual ou criar um novo domnio de aplicativo e carregar o conjunto para ela Se voc
carregar o conjunto no domnio de aplicativo atual com Assembly.LoadFrom, voc pode usar
Assembly.CreateInstance para criar uma instncia da classe RemoteObject, que faz o
Construtor de objeto a ser executado
C#
static void Main() { // Load the assembly into the current appdomain: System.Reflection.Assembly
newAssembly = System.Reflection.Assembly.LoadFrom(@"c:\HelloWorldRemote.exe"); // Instantiate
RemoteObject: newAssembly.CreateInstance("HelloWorldRemote.RemoteObject"); }
C#
static void Main() { System.AppDomain NewAppDomain =
System.AppDomain.CreateDomain("NewApplicationDomain"); // Load the assembly and call the default
entry point: NewAppDomain.ExecuteAssembly(@"c:\HelloWorldRemote.exe"); // Create an instance of
RemoteObject: NewAppDomain.CreateInstanceFrom(@"c:\HelloWorldRemote.exe",
"HelloWorldRemote.RemoteObject"); }
Se voc no faa desejar carregar o conjunto programaticamente, use Add Reference de para
especificar o conjunto HelloWorldRemote.exe. o Solution Explorer Em seguida, adicionar uma
using HelloWorldRemote; diretiva para o Usando Bloco de seu aplicativo, e usar o RemoteObject
tipo no seu programa para declarar uma instncia do objeto RemoteObject, como este:
C#
static void Main() { // This code creates an instance of RemoteObject, assuming HelloWorldRemote has been
added as a reference: HelloWorldRemote.RemoteObject o = new HelloWorldRemote.RemoteObject(); }
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
Exemplo atributos Mostra como criar classes de atributo personalizado, us-los em cdigo, e
consult-los atravs de reflexo.
Exemplo parte 1 Mostra como usar C# para interoperar com objetos COM.
Interop COM
Exemplo parte 2 Mostra como um servidor use um C# com um cliente com C++.
Interop COM
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.
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke Mostra como chamar exportadas funes DLL do C#.
exemplo
Exemplo de Discute a segurana do .NET Framework e mostra duas maneiras de
segurana modificar as permisses de segurana em C#: Usando classes de
permisso e atributos de permisso.
Gerais
Introduo Linguagem C# e ao .NET Framework
Fornece uma viso geral conceitual dos recursos chave do .NET Framework, incluindo o
Common Language Runtime, a biblioteca de classes do .NET Framework e a
interoperabilidade entre linguagens.
Fornece uma referncia rpida para as principais reas de tecnologia do .NET Framework.
E/S de Arquivo
Como Criar uma Listagem de Diretrio
L texto de um arquivo.
Seqncias de Caracteres
Criando Novas Seqncias de Caracteres
Alterando a Caixa
Contm um exemplo que usa a classe Convert para transformar um valor string em um
valor booleano.
Contm um exemplo que usa o mtodo esttico Regex.Replace para remover caracteres
invlidos de uma seqncia de caracteres.
Contm um exemplo que usa o mtodo esttico Regex.IsMatch para verificar se uma
seqncias de caracteres est em um formato de email vlido.
Colees
Colees e Estruturas de Dados
System.Collections.Generic
List
Fornece exemplos de cdigo mostrando como adicionar e remover itens de uma coleo
List<T>.
SortedDictionary
Excees
Como Usar Excees Especficas em um Bloco Catch
Contm um exemplo que usa um bloco try/catch para captura uma InvalidCastException.
Contm um exemplo que usa um bloco try/catch para capturar uma possvel exceo.
Contm um exemplo que usa um bloco try/catch para capturar uma exceo
ArgumentOutOfRangeException.
Contm um exemplo que usa um bloco try/catch para detectar uma possvel exceo
FileNotFoundException.
Eventos
Como Consumir Eventos em um Aplicativo do Windows Forms
Contm exemplos que mostram como tratar um evento de clique boto em um Windows
Form.
Contm um exemplo que mostrar como manipular vrios eventos usando propriedades de
evento.
Depurao
Implantao
Serviced Components
Como Criar um Gerenciador de Recursos de Compensao (CRM)
Mostra como criar um objeto de pool e definir seus limites de tamanho e de tempo.
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Descreve como preparar uma classe para participar de uma transao automtica.
Mostra como habilitar ativao e desativao JIT dentro e fora de uma classe.
Como Implementar um Componente Enfileirado que Exibe uma Mensagem de Forma Assncrona
Contm um procedimento que mostra como criar assemblies de arquivo nico usando
compiladores de linha de comando.
Mostra como exibir o nome totalmente qualificado de um assembly contendo uma classe
especificada para o console.
Cria uma instncia da classe AppDomainSetup, usa essa classe para criar um novo
domnio de aplicativo, escreve as informaes no console e descarrega o domnio de
aplicativo.
Contm um exemplo que comea com um programa "Hello, World " bsico e mostra como
usar ILDASM.exe para desmontar o assembly Hello.exe e exibir o manifesto do assembly.
Contm um exemplo que assina o assembly MyAssembly.dll com um nome forte usando o
arquivo chave sgKey.snk.
Mostra como usar a ferramenta Global Assembly Cache (Gacutil.exe) para exibir o
contedo da cache global de assemblies.
Mostra como assinar um assembly com um nome forte e como criar um par de chaves
usando a ferramenta Strong Name (Sn.exe).
Interoperao
Como Incorporar Bibliotecas de Tipo como Recursos Win32 em Aplicativos Baseados no .NET
Mostra como incorporar uma biblioteca de tipos como um recurso Win32 em um aplicativo
baseado no .NET Framework.
Explica como configurar componentes baseados no .NET Framework para habilitar Livre
Registro
Contm um exemplo que mostra como criar uma nova classe de exceo chamada
NoAccessException e mape-la ao HRESULT E_ACCESSDENIED.
Inclui um exemplo que demonstrar como abrir uma janela do Internet Explorer e como
amarrar eventos gerados pelo objeto InternetExplorer a manipuladores de eventos
implementados em cdigo gerenciado.
Segurana
Serializao
Como Desserializar um Objeto
Como Usar Ferramenta de Definio de Esquema XML para Gerar Classes e Documentos de
Esquema XML
Mostra como voc pode gerar mais de um fluxo de XML com o mesmo conjunto de
classes.
Codificao e Localizao
Como Analisar Dgitos Unicode
Programao Avanada
Como Definir e Executar Mtodos Dinmicos
Mostra como definir e executar um mtodo dinmico simples e um mtodo dinmico ligado
a uma instncia de uma classe.
Fornece procedimentos que mostram como definir um mtodo genrico com emisso de
reflexo.
Como Usar Assinatura Completa para Dar a um Assembly Dinmico um Nome Forte
Demonstra o uso de assinatura completa para dar um assembly dinmico um nome forte.
Mostra como criar um tipo genrico simples com dois parmetros de tipo, como aplicar
restries de classe, restries de interface e restries especiais aos parmetros de tipo e
como criar membros que usam os parmetros de tipo de uma classe como tipos de
parmetros e tipos de retorno.
Descreve as etapas necessrias para criar uma implantao ClickOnce completa usando a
verso de linha de comando ou grfica da ferramenta de Gerao e Edio de Manifesto
(Manifest Generation and Editing - Mage).
Explica como criar seu prprio editor de tipos de interface do usurio para um tipo
personalizado e como exibir a interface de edio usando um PropertyGrid.
Recursos adicionais
Visual Studio 2005 Developer Center
Contm vrios artigos e recursos sobre o desenvolvimento de aplicativos em C#. Este site
atualizado regularmente com novos contedos.
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#
Se voc precisar interagir com outro software Windows como objetos COM ou DLLs nativas
Win32, voc pode fazer isso em C# atravs de um processo denominado "Interoperabilidade".
Cdigo fonte escrito em C# compilado em uma linguagem intermediria (IL) que est em
conformidade com a especificao CLI. O cdigo IL, juntamente com recursos como bitmaps e
seqncias de caracteres, armazenado em disco em um arquivo executvel chamado de
assembly, normalmente com uma extenso .exe ou .dll. Um assembly contm um manifesto que
fornece informaes sobre tipos do assembly, verso, cultura, e requisitos de segurana.
Quando o programa C# executado, o mdulo (assembly) carregado no CLR, que pode levar a
vrias aes com base nas informaes no manifesto. Em seguida, se os requisitos de segurana
forem atendidos, o CLR executa a compilao Just-In-Time (JIT) para converter o cdigo IL em
instrues nativas da mquina. O CLR tambm oferece outros servios relacionados a coleta de
lixo automtica, tratamento de exceo, e gerenciamento de recursos. Cdigo que executado
pelo CLR as vezes conhecido como "cdigo gerenciado", em contraste com "cdigo no
gerenciado" que compilado em linguagem de mquina nativa que atinge um sistema especfico.
O diagrama a seguir ilustra os relacionamentos entre o tempo de compilao e o tempo de
execuo dos arquivos de cdigo fonte C#, as bibliotecas de classes base, mdulos (assemblies),
e o CLR.
Alm dos servios de tempo de execuo, o .NET Framework tambm inclui uma biblioteca
abrangente com mais de 4000 classes organizadas em namespaces que fornecem uma variedade
de funcionalidades teis para tudo desde entrada e sada de arquivo at manipulao de
seqncia para anlise XML e controles de Windows Forms. Uma aplicao C# tpica usa
amplamente a biblioteca de classe do .NET Framework para manipular tarefas comuns de
"conexes internas".
Para obter mais informaes sobre a plataforma .NET Framework, consulte Viso geral sobre o
.NET Framework.
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.
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 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.
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,
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 Windows GUI (Windows Forms).
Aplicativos ASP.NET.
Servios XML da Web.
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.
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.
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.
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.
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.
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.
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 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.
Melhorias de desempenho.
Capacidade de facilmente usar componentes desenvolvidos em outras linguagens.
Tipos extensveis fornecidos por uma biblioteca de classes.
Novos recursos da linguagem como herana, interfaces e sobrecarga para programao
orientada a objetos; suporte a segmentao livre explcita que permite criao de aplicativos de
vrios segmentos, escalonveis; suporte a tratamento de exceo estruturada e atributos
personalizados.
Se voc usar o Microsoft Visual C++ .NET, voc pode escrever cdigo gerenciado usando o
Managed Extensions for C++, que fornece os benefcios de um ambiente de execuo gerenciado
como tambm o acesso a recursos poderosos e tipos de dados expressivos que voc est
familiarizado. Recursos de runtime adicionais incluem:
Voc tambm pode escrever cdigo gerenciado usando a linguagem C#, que fornece os
seguintes benefcios:
Alocando memria
Alocar memria de heap gerenciada mais rpido que a alocao de memria no gerenciada.
Pelo fato de que o Runtime aloca memria para um objeto adicionando um valor a um ponteiro,
ele quase to rpido quanto a alocao de memria da pilha (stack). Alm disso, porque novos
objetos que so alocados consecutivamente so armazenados contiguamente na heap
gerenciada, um aplicativo pode acessar os objetos muito rapidamente.
Liberando memria
O mecanismo otimizado do coletor de lixo determina o melhor momento para executar uma coleta
com base nas alocaes sendo feitas. Quando o coletor de lixo executa uma coleta, ele libera a
memria dos objetos que no esto sendo usados pelo aplicativo. Ele determina quais objetos
no esto mais sendo usados pelo exame das razes do aplicativo. Cada aplicativo tem um
conjunto de razes. Cada raiz refere-se a um objeto na heap gerenciada ou definida como nula.
Razes do aplicativo incluem ponteiros para objetos globais e estticos, variveis locais e
parmetros de objetos de referncia na pilha de um segmento, e registro da CPU. O coletor de
lixo tem acesso lista de razes ativas mantidas pelo runtime e pelo Compilador Just-In-Time
(JIT). Usando essa lista, ele examina as razes do aplicativo, e no processo cria um grfico que
contm todos os objetos que possam ser alcanados a partir as razes.
Objetos que no esto no grfico so inacessveis a partir das razes do aplicativo. O coletor de
lixo considera como lixo os objetos inacessveis e ir liberar a memria alocada para eles. Durante
uma coleta, o coletor de lixo examina a heap gerenciada, procurando pelos blocos de espao de
endereo ocupados por objetos inacessveis. Na medida em que ele descobre cada objeto
inacessvel, ele usa uma funo de cpia de memria para compactar os objetos acessveis na
memria, liberando os blocos de espaos endereo alocados para objetos inacessveis. Uma vez
que a memria para dos objetos acessveis tiver sido compactada, o coletor de lixo faz as
correes de ponteiros necessrias razes de forma que as razes do aplicativo apontem para os
objetos em seus novos locais. Ele tambm posiciona o ponteiro da heap gerenciadas aps o
ltimo objeto acessvel. Observe que memria compactada somente se uma coleta descobre um
nmero significativo de objetos inacessveis. Se todos os objetos na heap gerenciada sobrevivem
a uma coleta, no h necessidade de compactao de memria.
Para melhorar o desempenho, o tempo de execuo aloca memria para objetos grandes em uma
heap separada. O coletor de lixo libera automaticamente. a memria para objetos grandes
Entretanto, para evitar mover objetos grandes na memria, essa memria no compactada.
Geraes e Desempenho
Para otimizar o desempenho do coletor de lixo, a heap gerenciada est dividida em trs geraes:
0, 1, e 2. O algoritmo de coleta de lixo do tempo de execuo baseado em vrias generalizaes
que indstria de software de computador tem descoberto serem verdadeiras por experincias com
esquemas de coleta de lixo Primeiro, mais rpido compactar a memria para uma parte da heap
gerenciada do que para toda a memria gerenciada. Em segundo lugar, objetos mais recentes
tero vidas teis menores e objetos mais antigos tero vidas teis mais longas. Por fim, objetos
mais recentes tendem a ser relacionados entre si e acessados pelo aplicativo ao redor do mesmo
tempo.
Na verdade, o coletor de lixo executa uma coleta quando a gerao 0 est cheia. Se um aplicativo
tentar criar um novo objeto quando a gerao 0 est cheia, o coletor de lixo descobre que no
existe nenhum espao de endereo restante na gerao 0 para alocar para o objeto. O coletor de
lixo executa uma coleta em uma tentativa de liberar espao de endereo na gerao 0 para o
objeto. O coletor de lixo inicia examinando os objetos na gerao 0 em vez de todos os objetos na
heap gerenciada. Isso a abordagem mais eficiente, porque novos objetos costumam ter tempos
de vida curtos, e esperado que muitos dos objetos na gerao 0 no estejam mais em uso mais
pelo aplicativo quando uma coleta executada. Alm disso, uma nica coleta de gerao 0
freqentemente recupera memria suficiente para permitir ao aplicativo continuar criando novos
objetos.
Aps o coletor de lixo executar uma coleta de gerao 0, ele compacta a memria para os objetos
acessveis conforme explicado anteriormente neste tpico em Liberando memria. O coletor de
lixo ento promove esses objetos e considera esta parte da heap gerenciada como gerao 1.
Pelo fato de que objetos que sobrevivem a coletas costumam ter vidas teis mais longas, faz
sentido promov-los para uma gerao superior. Como resultado, o coletor de lixo no tem que
reexaminar os objetos em geraes 1 e 2 sempre que ele executa uma coleta de gerao 0.
Aps o coletor de lixo executar sua primeira coleta de gerao 0 e promover os objetos acessveis
na gerao 1, ele considera o resto da heap gerenciada como gerao 0. Ele continua a alocar
memria para novos objetos na gerao 0 at que a gerao 0 esteja cheia e que seja necessrio
executar outra coleta. Nesse ponto, o mecanismo de otimizao do coletor de lixo determina se
ele necessrio examinar os objetos em geraes mais antigas. Por exemplo, se uma coleta de
gerao 0 no recupera memria suficiente para o aplicativo concluir sua tentativa de criar um
novo objeto de forma bem sucedida, o coletor de lixo pode executar uma coleta de gerao 1, e
depois de gerao 0. Se isso no recuperar memria suficiente, o coletor de lixo pode executar
uma coleta de geraes 2, 1, e 0. Aps cada coleta, o coletor de lixo compacta os objetos
acessveis na gerao 0 e promove-os para gerao 1. Objetos na gerao 1 que sobrevivem a
coletas so elevados para gerao 2. Como o coletor de lixo oferece suporte somente a trs
geraes, objetos na gerao 2 que sobrevivem a uma coleta permanecem na gerao 2 at que
eles sejam determinados como inalcanveis em uma coleta futura.
Para a maioria dos objetos que seu aplicativo cria, voc pode confiar no coletor de lixo para
executar automaticamente as tarefas de gerenciamento de memria necessrias. Entretanto,
recursos no gerenciados requerem limpeza explcita. O tipo mais comum de recurso no
gerenciado um objeto que envolve um recurso do sistema operacional, como um identificador de
arquivo, identificador de janela, ou conexo de rede. Embora o coletor de lixo seja capaz de
controlar o tempo de vida de um objeto gerenciado que encapsula um recurso no gerenciado, ele
no tem conhecimento especfico sobre como limpar o recurso. Quando voc criar um objeto que
encapsula um recurso no gerenciado, recomendado que voc fornea o cdigo necessrio
para limpar o recurso no gerenciado em um mtodo Dispose pblico. Ao fornecer um mtodo
Dispose, voc permite que usurios do seu objeto explicitamente liberem sua memria quando
eles tiverem concludo com o objeto. Quando voc usa um objeto que encapsula um recurso no
gerenciado, voc deve estar ciente do Dispose e cham-lo conforme necessrio. Para obter mais
informaes sobre limpeza de recursos no gerenciados e um exemplo de um padro de design
para implementar Dispose, consulte Coleta Lixo.
Estabelece uma estrutura que ajuda a habilitar integrao entre linguagens, segurana de
tipos, e execuo de cdigo de alto desempenho.
Fornece um modelo orientado a objetos que oferece suporte implementao completa de
muitas linguagens de programao.
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.
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); } }
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
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.
Tipos e Namespaces
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.
Atributos fornecem metadados adicionais definidos pelo usurio. Atributos podem ser aplicados a
praticamente qualquer elemento de linguagem tipos, propriedades, mtodos e assim por diante.
Tipo de acessibilidade
Todos os tipos tm um modificador de acessibilidade que rege sua acessibilidade a outros tipos. A
tabela a seguir descreve a acessibilidade de tipo suportada pelo runtime.
Acessibilidade Descrio
Embora um tipo possa fazer referncia a tipos de outros mdulos e assemblies, um tipo
totalmente definido dentro de um mdulo. Nomes de tipo precisam somente ser exclusivos em um
assembly. Para identificar totalmente um tipo, o nome do tipo deve ser qualificado pelo assembly
que contm a implementao do tipo. Para mais informaes, consulte Especificando Nomes de
Tipos Totalmente Qualificados.
Um tipo pode herdar valores e comportamentos de outro tipo. O CTS no permite que tipos sejam
herdados de mais de um tipo base.
Um tipo pode implementar qualquer nmero de interfaces. Para implementar uma interface, um
tipo deve implementar todos os membros virtuais da interface. Um mtodo virtual pode ser
implementado por um tipo derivado e pode ser chamado esttica ou dinamicamente. Para obter
mais informaes sobre membros virtuais, consulte Membros de Tipos. Para obter mais
informaes sobre herana e interfaces, consulte Classes e Interfaces.
Membros de Tipos
Membros de Tipos
O ambiente de execuo permite que voc defina os membros do tipo: eventos, campos, tipos
aninhados, mtodos e propriedades. Cada membro tem uma assinatura. A tabela a seguir
descreve os membros usados no .NET Framework.
Membro Descrio
Evento Define um incidente ao qual pode-se responder e define mtodos para inscrever
em, cancelar a inscrio em e levantar um evento. Eventos so freqentemente
usados para informar outros tipos de alteraes de estado.
Campo Descreve e contm parte do estado do tipo. Campos podem ser de qualquer tipo
suportado pelo ambiente de execuo.
Tipo Define um tipo dentro do escopo do tipo delimitador.
aninhado
Mtodo Descreve as operaes disponveis no tipo. A assinatura do mtodo especifica os
tipos dos argumentos e o valor de retorno do mtodo.
O construtor um tipo especial de mtodo que cria novas instncias de um tipo.
Propriedade Nomeia um valor ou um estado do tipo e define mtodos para obter ou definir o
valor da propriedade. Propriedades podem ser tipos primitivos, colees de tipos
primitivos, tipos definidos pelo usurio ou colees de tipos definidos pelo usurio.
Propriedades so freqentemente usadas para manter a interface pblica de um
tipo, independente da representao real do tipo.
Caractersticas de um Membro
O CTS (Common Type System) permite que os membros possuam uma variedade de
caractersticas, mas as linguagens no necessariamente suportam todas elas. A tabela a seguir
descreve as caractersticas de um membro.
Pode ser
Caracterstica aplicada a Descrio
abstract Mtodos, O tipo no fornece a implementao do mtodo. Tipos
propriedades e que herdam mtodos abstratos e tipos que
eventos implementam interfaces com mtodos abstratos devem
fornecer uma implementao para o mtodo. A nica
exceo quando o tipo derivado um tipo abstrato.
Todos os mtodos abstratos so virtuais.
private, family, Todos Define a acessibilidade de um membro:
assembly, family e private
assembly, family ou Acessvel somente dentro do tipo do membro ou
assembly, ou public dentro de um tipo aninhado.
family
Acessvel dentro do tipo do membro e dentro de
um tipo derivado que herda do tipo do membro.
assembly
Acessvel somente no assembly no qual o tipo
definido.
family e assembly
Sobrecarga
Um tipo derivado herda todos os membros do seu tipo base, ou seja, esses membros esto
definidos no tipo derivado e disponveis para o mesmo. O comportamento, ou qualidades, de
membros herdados pode ser modificado de duas maneiras:
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:
Para obter informaes especficas sobre enumaraes, consulte Enumeraes no Common Type
System (CTS).
Tipos de valor so armazenados to eficientemente quanto tipos primitivos, mas voc pode
chamar mtodos neles, incluindo os mtodos virtuais definidos nas classes System.ValueType e
System.Object, assim como quaisquer mtodos definidos no prprio tipo de valor. Voc pode criar
instncias de tipos de valor, pass-los como parmetros, armazen-los como variveis locais, ou
armazen-los em um campo de outro tipo de valor ou objeto. Tipos valor no tm a sobrecarga
associada com o armazenamento de uma instncia de uma classe e eles no exigem
construtores.
Tipos de valor podem ter campos, propriedades e eventos. Eles tambm podem ter mtodos
estticos e no-estticos. Quando eles so convertidos (boxed), eles herdam os mtodos virtuais
de System.ValueType, e eles podem implementar zero ou mais interfaces.
Tipos de valor so autenticados (sealed), o que significa que nenhum outro tipo pode ser derivado
a partir deles. Entretanto, voc pode definir mtodos virtuais diretamente sobre o tipo de valor, e
esses mtodos podem ser chamados tanto no na forma convertida (boxed) quanto na no-
convertida (unboxed) do tipo. Embora voc no possa derivar outro tipo de um tipo de valor, voc
pode definir mtodos virtuais em um tipo de valor quando voc estiver usando uma linguagem em
que for mais conveniente trabalhar com mtodos virtuais do que com mtodos no-virtuais ou
estticos.
O exemplo a seguir mostra como construir um tipo de valor para nmeros complexos.
C#
using System; // Value type definition for a complex number representation. public struct Complex { public
double r, i; // Constructor. public Complex(double r, double i) { this.r = r; this.i = i; } // Returns one divided
by the current value. public Complex Reciprocal { get { if (r == 0d && i == 0d) throw new
DivideByZeroException(); double div = r*r + i*i; return new Complex(r/div, -i/div); } } // Conversion
operators. public static explicit operator double(Complex a) { return a.r; } public static implicit operator
Complex(double r) { return new Complex(r,0d); } // Basic unary operators. public static Complex operator +
(Complex a) { return a; } public static Complex operator - (Complex a) { return new Complex(-a.r, -a.i); } //
Basic binary operators for addition, subtraction, multiplication, and division. public static Complex operator
+ (Complex a, Complex b) { return new Complex(a.r + b.r, a.i + b.i); } public static Complex operator -
(Complex a, Complex b) { return new Complex(a.r - b.r, a.i - b.i); } public static Complex operator * (Complex
a, Complex b) { return new Complex(a.r*b.r - a.i*b.i, a.r*b.i + a.i*b.r); } public static Complex operator /
(Complex a, Complex b) { return a * b.Reciprocal; } // Override the ToString method so the value appears in
write statements. public override string ToString() { return String.Format("({0}+{1}i)", r, i); } } // Entry
point. public class ValueTypeSample { public static void Main() { Complex a = new Complex(0, 1); Complex b
= new Complex(0, -2); Console.WriteLine(); Console.WriteLine("a = " + a); Console.WriteLine("b = " + b);
Console.WriteLine(); Console.WriteLine("a + b = " + (a+b)); Console.WriteLine("a - b = " + (a-b));
Console.WriteLine("a * b = " + (a*b)); Console.WriteLine("a / b = " + (a/b)); Console.WriteLine();
Console.WriteLine("(double)a = " + (double)a); Console.WriteLine("(Complex)5 = " + (Complex)5); } }
A tabela a seguir fornece uma descrio de algumas das caractersticas que o tempo de execuo
permite para uma classe. (Caractersticas adicionais que esto disponveis atravs de classes de
Atributos no so includas nesta lista.) Sua linguagem pode no tornar todas essas
caractersticas disponveis.
Caracterstica Descrio
autenticada Especifica que outro tipo no pode ser derivado desse tipo.
implementa Indica que a classe usa uma ou mais interfaces, fornecendo implementaes
de membros da interface.
Abstrata Especifica que voc no pode criar uma instncia da classe. Para us-la, voc
deve derivar outra classe a partir dela.
Herda Indica que as instncias da classe podem ser usadas em qualquer lugar em
que a classe base for especificada. Uma classe derivada que herda de uma
classe base pode usar a implementao de qualquer mtodo virtual fornecido
pela classe base, ou a classe derivada pode substitu-los com sua prpria
implementao.
exportada ou no Indica se uma classe est visvel fora do Assembly em que ela est definida.
exportada S se aplica a classes de alto nvel.
Classes aninhadas tambm tm caractersticas membros. Para mais informaes, consulte Tipos
membros.
Membros da classe que no tm implementao so membros abstratos. Uma classe que tenha
um ou mais membros abstratos ela prpria abstrata; no possvel criar novas instncias dessa
classe. Algumas linguagens que direcionam o tempo de execuo permitem que voc marque
uma classe como abstrata mesmo que nenhum de seus membros seja abstrato. Voc pode usar
uma classe abstrata quando voc precisar encapsular um conjunto bsico de funcionalidades que
as classes derivadas podem herdar ou substituir quando for apropriado. Classes que no so
abstratas so chamadas de classes concretas.
Uma classe pode implementar qualquer nmero de interfaces, mas ela pode herdar apenas da
uma classe base. Todas as classes devem ter pelo menos um construtor, que inicializa novas
ocorrncias da classe.
Cada linguagem com suporte ao tempo de execuo fornece uma maneira para indicar que uma
classe ou membros da classe tem caractersticas especficas. Quando voc usa a sintaxe exigida
pela sua linguagem, a linguagem garante que as caractersticas da classe e seus membros so
armazenados (como Metadados) junto com a implementao da classe.
Observao
O valor de retorno no est definido para um delegado que tenha mais de um mtodo na sua lista
de invocao, mesmo que o delegado tenha um tipo de retorno.
Para delegados que representam vrios mtodos, o .NET Framework fornece mtodos de classes
de delegao Delegate. e MulticastDelegate para dar suporte a operaes como adicionar um
mtodo para a lista de invocao do um delegado (mtodo
System.Delegate.Combine(System.Delegate[])), remover um mtodo (mtodo
System.Delegate.Remove(System.Delegate,System.Delegate)) e obter a lista de invocao
(mtodo System.Delegate.GetInvocationList)
Observao
No necessrio usar esses mtodos para delegados manipuladores de eventos no C#, C++ e
Visual Basic, j que essas linguagens fornecem sintaxe para adicionar e remover manipuladores
de eventos.
Na verso 2.0 do .NET Framework, tambm possvel criar e abrir um delegado para um mtodo
de instncia. Um mtodo de instncia tem um parmetro da instncia implcito (representado por
this no C# ou Me no Visual Basic), e ele tambm pode ser representado por um tipo delegado que
expe este parmetro oculto. Ou seja, o tipo delegado deve ter um parmetro extra no incio da
sua lista formal de parmetros, do mesmo tipo da classe a qual o mtodo pertence. oferecido
suporte para o inverso desse cenrio, para que seja possvel vincular o primeiro argumento de um
mtodo esttico.
A criao de instncia aberta e delegados estticos fechados no possui suporte diretamente pelo Visual
Basic, C++ ou C#, para construtores de delegados. Em vez disso, use um dos mtodos de sobrecarga
System.Delegate.CreateDelegate que especifica objetos MethodInfo, como
System.Delegate.CreateDelegate(System.Type,System.Object,System.Reflection.MethodInfo,System.Boole
Na verso 2.0 do .NET Framework, os tipos de parmetro e retorno de um delegado devem ser
compatveis com os tipos de parmetro e retorno do mtodo que o delegado representa; os tipos
no precisam coincidir exatamente.
Observao
Nas verses 1.0 e 1.1 do .NET Framework, os tipos devem coincidir exatamente.
Por exemplo, um delegado com um parmetro do tipo Hashtable e um tipo de retorno de Object
pode representar um mtodo com um parmetro de tipo Object e um valor de retorno do tipo
Hashtable.
Cada delegado tem um mtodo BeginInvoke que permite a voc chamar o delegado
assincronamente, e um mtodo EndInvoke que limpa, posteriormente, os recursos. Esses
mtodos so gerados automaticamente para cada tipo delegado. Quando um delegado
chamado usando o mtodo BeginInvoke, o mtodo que o delegado representa executado em
um segmento pertencente ao do ThreadPool.
Para obter mais informaes e cdigos de exemplo, consulte Programao assncrona usando
delegados.
Valores de um tipo matriz so objetos. Objetos de matrizes so definidos como uma srie de
locais onde valores do tipo elemento de matriz so armazenados. O nmero de valores repetidos
determinado pelo posto e limites da matriz.
Tipos matriz so herdados do tipo System.Array. Esta classe representa todas as matrizes
independentemente do tipo de seus elementos ou sua posio. As operaes definidas em
matrizes so: alocao de matriz baseada no tamanho e na informao de limite inferior;
indexao de uma matriz para ler e escrever um valor; computao do endereo de um elemento
da matriz (ponteiro gerenciado) e consulta da ordem, limites e nmero total de valores
armazenados na matriz.
Matrizes com uma dimenso de limite inferior para seus elementos (s vezes chamado vetores)
igual a zero possui um tipo com base no tipo dos elementos da matriz, independentemente do
limite superior. Matrizes com mais de uma dimenso, ou com uma dimenso porm com limite
inferior diferente de zero, possuem o mesmo tipo se eles possuem o mesmo tipo de elemento e
ordem, independentemente do limite inferior da matriz. No h suporte para matrizes com
dimenses zero.
Uma interface pode ser declarada com qualquer acessibilidade, mas todos membros de
interface devem ter acessibilidade pblica.
Nenhuma permisso de segurana pode ser anexada a membros ou prpria interface.
Interfaces no podem definir construtores.
Cada linguagem deve fornecer regras para mapear uma implementao para a interface que
requer o membro, de maneira que mais de uma interface possa declarar um membro com a
mesma assinatura e esses membros possam ter implementaes separadas.
No Visual C++ 2002 e no Visual C++ 2003, __gc * foi usado para declarar um ponteiro
gerenciado. Este ser substitudo por um ^ no Visual C++ 2005, por exemplo ArrayList^ al = gcnew
ArrayList();.
O CTS fornece duas operaes com segurana de tipos em tipos ponteiro: carregar um valor e
gravar um valor para o local referenciado pelo ponteiro. Estas operaes com segurana de tipos
so compatveis com CLS.
O CTS (Common Type System) tambm fornece trs operaes aritmticas de endereos
baseadas em bytes para tipos ponteiro: adio e subtrao de inteiros a ponteiros, e subtrair um
ponteiro de outro. Os resultados das duas primeiras operaes aritmticas retornam um valor do
mesmo tipo que o ponteiro original. Estas operaes baseadas em bytes no so compatveis
com CLS.
Os metadados descrevem cada tipo e membro definido no seu cdigo de uma maneira neutra de
linguagem. Os metadados armazenam as seguintes informaes:
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.
Descrio dos tipos.
o Nome, visibilidade, classe base e interfaces implementadas.
o Membros (mtodos, campos, propriedades, eventos, tipos aninhados).
Atributos.
o Elementos descritivos adicionais que modificam tipos e membros.
Benefcios de Metadados
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.
Interoperabilidade de linguagem e facilidade de design baseado em componentes.
Visual C# Consolidado 433
Os metadados fornecem todas as informaes necessrias sobre cdigo compilado, para voc
herdar uma classe de um arquivo de escrita PE em uma linguagem diferente. Voc pode criar
uma instncia de qualquer classe escrita em qualquer linguagem gerenciada (qualquer
linguagem que atinge o Common Language Runtime), sem se preocupar com o
empacotamento explcito ou com o uso de cdigo de interoperabilidade personalizados.
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.
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.
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
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 As instrues da Microsoft Intermediate Language (MSIL) que compem o seu
MSIL 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.
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); } }
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).
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.
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.
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 segurana. Um assembly a unidade em que permisses so
solicitadas e concedidas. Para obter mais informaes sobre limites de segurana e como eles
se aplicam a assemblies, consulte Consideraes Sobre Segurana do Assembly.
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 referncia de escopo. O manifesto do assembly contm metadados
do assembly que so usados para resolver tipos e satisfazer solicitaes de recursos. Ele
especifica os tipos e recursos que so expostos fora do assembly. O manifesto tambm
enumera outros assemblies do qual ele depende.
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.
Ele forma uma unidade de implantao. Quando um aplicativo iniciado, somente os
mdulos assembly que o aplicativo chama inicialmente devem estar presente. Outros
assemblies, como recursos de localizao ou assemblies contendo classes utilitrias, podem
ser recuperados por demanda. Isso permite que aplicativos sejam mantidos simples e
pequenos no primeiro download. Para obter mais informaes sobre como implantar
assemblies, consulte Implantao de Aplicativos.
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.
Problemas de Versionamento
Esses dois problemas de versionamento combinados criam conflitos de DLL, onde a instalao de
um aplicativo pode, inadvertidamente, quebrar um outro existente. Isso ocorre porque foi instalado
um determinado componente de software, ou DLL, que no era totalmente compatvel com as
verses anteriores. Aps decorrida essa situao, o sistema no possui suporte para diagnosticar
e corrigir o problema.
O Microsoft Windows 2000 comeou a atacar por completo esses problemas. Ele fornece
dois recursos que corrigem parcialmente conflitos de DLL:
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.
O Windows 2000 bloqueia arquivos que vm com o sistema operacional no diretrio
System32, para que eles no possam ser substitudos quando novos aplicativos so
instalados.
O Common Language Runtime usa assemblys para continuar essa evoluo em direo de uma
soluo completa para conflitos de DLL.
A Soluo do Assembly
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.
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.
Assembly multi-arquivos
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
Informaes Descrio
Nome do assembly Uma seqncia de texto especificando o nome do assembly.
Nmero de verso Um nmero de verso principal e secundrio e um nmero de reviso e de
compilao. O Common Language Runtime usa esses nmeros para impor
uma poltica de verses.
Cultura Informaes sobre a cultura ou a linguagem suportada pelo assembly. Essas
informaes devem ser usadas somente para designar um assembly como
um assembly satlite contendo informaes especficas de cultura ou de
linguagem. (Um assembly com informaes de cultura automaticamente
considerado um assembly satlite.)
Informaes de A chave pblica do publisher, caso tenha sido dado ao assembly um nome
nomes fortes forte.
Lista de todos os Um hash de cada arquivo contido no assembly e um nome de arquivo.
arquivos no Observe que todos os arquivos que compem o assembly devem estar no
assembly mesmo diretrio que o arquivo que contm o manifesto do assembly.
Informaes de Informaes usadas pelo ambiente de execuo para mapear a referncia
Voc deve compartilhar assemblies instalando-os no cache global de assemblies somente quando
voc precisa faz-lo. Como diretriz geral, mantenha as dependncias de um assembly privadas, e
localize assemblies no diretrio de aplicativo a no ser que o compartilhamento de um Assembly
seja explicitamente necessrio. Alm disso, no necessrio instalar assemblies no cache global
de assemblies para torn-los acessveis para interoperabilidade COM ou cdigo no gerenciado.
Observao
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.
Use uma ferramenta de desenvolvimento chamada de ferramenta Global Assembly Cache
(Gacutil.exe), fornecida pelo o .NET Framework SDK
Use o Windows Explorer para arrastar mdulos assemblies para o cache.
Observao
Nos cenrios de implantao, use o Windows Installer 2.0 (site em ingls) para instalar assemblies
para o cache global de assemblies. Use o Windows Explorer ou a ferramenta Global Assembly
Cache apenas em cenrios de desenvolvimento, porque eles no fornecem contagem de
referncia do assembly e outros recursos fornecidos ao usar o Windows Installer.
Assemblies implantados no cache global de assemblies devem ter um nome forte. Quando um
Assembly adicionado ao cache global de assemblies, so executadas verificaes de
integridade em todos os arquivos que compem o Assembly. O cache executa essas verificaes
de integridade para garantir que um Assembly no foi violada, por exemplo, quando um arquivo foi
alterado mas o manifesto no refletir a alterao.
Voc pode garantir que um nome seja globalmente exclusivo assinando um assembly com um
nome forte. Especificamente, nomes fortes satisfazem os requisitos a seguir:
Quando voc referencia um assembly de nome forte, voc espera obter certos benefcios, como
verso e proteo de nomeao. Se o Assembly de nome forte ento referencia um Assembly
com um nome simples, que no tem esses benefcios, voc perde as vantagens que iria derivar
pelo uso de um Assembly de nome forte e reverte para conflitos de DLL. Por essa razo,
assemblies de nomes fortes podem apenas referenciar outros assemblies de nomes fortes.
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.
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
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.
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
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.
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 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:
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 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.
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.
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.
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.
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
NomeDaEmpresaNomeDaTecnologia
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.
Tipo de
Nome dado em Tipo de Tipo de Tipo de
da Visual dado em dado em dado em
Categoria classe Descrio Basic C# C++ JScript
Inteiro Byte Um inteiro de 8 bits sem Byte Byte char Byte
sinal.
SByte Um inteiro de 8 bits com SByte sbyte signed SByte
sinal. char
No compatvel com CLS.
Int16 Um inteiro de 16 bits com Short short short short
sinal.
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.
ADO.NET ADO.NET
Interoperabilidade Interoperabilidade
Reflexo Reflexo
Serializao Serializao
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:
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.
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.
Programao robusta
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();
}}
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(); } } }
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
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.
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.
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(); } }
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(); } }
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.
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
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
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.
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));
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"));
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);
The original character array: Where The new character array: Hello
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 );
TrimEnd
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);
C#
string MyString = "Hello, World!"; char[] MyChar = {'r','o','W','l','d','!',' '}; string NewString =
MyString.TrimEnd(MyChar); Console.WriteLine(NewString);
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);
Remover
C#
string MyString = "Hello Beautiful World!"; Console.WriteLine(MyString.Remove(5,10));
Nome do
mtodo Uso
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, '-'));
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, '-'));
Compare
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?"));
CompareOrdinal
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!"));
CompareTo
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 );
Igual a
C#
string MyString = "Hello World"; Console.WriteLine(MyString.Equals("Hello World"));
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));
StartsWith e EndsWith
C#
string MyString = "Hello World"; Console.WriteLine(MyString.StartsWith("Hello"));
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"));
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'));
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'));
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
ToUpper
C#
String MyString = "Hello World!"; Console.WriteLine(MyString.ToUpper());
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());
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-.
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!");
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.
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
C#
int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);
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.
Remover
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
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);
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}",
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.
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.
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\.@-]", ""); }
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
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})(\]?)$"); }
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.
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.
Observe que a ICollection interface genrica tem membros adicionais que no inclui a interface
nongeneric.
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.
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.
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
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 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.
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.
Considere fornecer sincronizao em sua classe. Consulte Colees e sincronizao
(segurana do segmento) Para obter detalhes.
Considerar a ativao de serializao para sua classe. Consulte Conceitos de serializao
Para obter detalhes.
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.
Voc precisa acessar cada elemento pelo ndice?
o O ArrayList e StringCollection Classes e a List classe genrica oferecem acesso a
seus elementos pelo ndice baseado em zero do elemento.
o O Hashtable, SortedList e SortedDictionary Classes genricos oferecem acesso a
seus elementos pela chave do elemento., ListDictionary e StringDictionary classes, e o
Dictionary
o O NameObjectCollectionBase e SortedList Classes genricos oferecem acesso a
seus elementos por um o ndice baseado em zero ou a chave do elemento. e
NameValueCollection classes, e o KeyedCollection
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.
Voc precisa pesquisas rpidas e recuperao de informaes?
Alguns idiomas fornecem uma instruo que oculta a complexidade da usando enumeradores
diretamente. A instruo C# foreach, a instruo C++ for each, e a instruo For Each Visual
Basic usam enumeradores.
Sobre Enumerators
Um enumerador flattens uma coleo para que os membros podem ser acessados
seqencialmente. Coleo diferentes classes podem ter diferentes seqncias. Por exemplo, um
enumerador para um ArrayList preserva um enumerador para um Hashtable exibe os elementos
acordo para o cdigo hash do elemento a ordem na qual os elementos so inseridos da coleo,
enquanto.
Em colees Generic no-, voc pode chamar Reset seguido por MoveNext para mover o
enumerador volta para o incio da coleo.
classes System.Collections podem ser feitas segmento seguro usando qualquer um dos
seguintes mtodos:
A Array classe no inclui um Synchronized mtodo e, embora ele possui uma SyncRoot
propriedade, a classe no pode ser derivada de. Portanto, uma matriz pode ser feita segmento
seguro somente atravs do mecanismo de bloqueio.
Algumas classes possuem mtodos que aceitam uma IComparer Implementao como um
parmetro. Quando esses mtodos so usados e o IComparer parmetro no uma referncia
nula (Nothing. no Visual Basic), os objetos esto sendo comparados no so necessrios para
implementar IComparable prprios No entanto, ele sempre uma boa prtica para implementar
IComparable Em todas as classes que podem ser usados como valores em uma coleo de lista
ou chaves em uma coleo do dicionrio.
A configurao de cultura atual do sistema pode afetar o comparaes e classifica dentro de uma
coleo. Por padro, comparaes e classifica nas Collections classes so confidenciais culture-.
Para ignorar a configurao de cultura e portanto obter comparao consistente e classificar
resultados, use o InvariantCulture. com overloads membro que aceitam uma CultureInfo Para
obter mais informaes, consulte Executar operaes String Insensitive Culture-em colees e
Executar operaes String Insensitive Culture-em matrizes.
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.
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
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.
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.
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.
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.
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
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
TValue
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:
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.
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 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.
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
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.
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
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.
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 486
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.
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.
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) { } }
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.
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."); } } }
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(); } } }
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.
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; }
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
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:.
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
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.
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); } } }
Para um exemplo completo que ilustra eventos raising e Handling, consulte Como aumentar e
Consume eventos:.
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()); } }
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); } }
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.
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 uma configurao de projeto com Create new solution configurations
selecionada.
Adicionar um novo projeto que ir ser implantado em vrias plataformas, um dos quais
novo.
Configuraes do projeto
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.
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
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):
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.
Compilar plataformas
Plataformas de compilao fornecem uma maneira de armazenar vrias verses de soluo e
propriedades de projeto aplicveis especificamente para direcionar plataformas. Por exemplo,
voc pode criar uma configurao do Debug que direciona para uma plataforma x 86, e uma
configurao do Debug que direciona para uma plataforma x64. A plataforma ativa pode ser
rapidamente acessada e alterada, permitindo que voc facilmente crie um projeto selecionando
vrias plataformas.
Visual Studio 2005 permite que voc configure seus aplicativos para direcionar para diferentes
plataformas, incluindo plataformas de 64 bits. Para obter mais informaes sobre suporte em
plataforma de 64 bits no Visual Studio 2005, consulte Aplicativos de 64 bits.
O Configuration Manager fornece uma maneira para voc adicionar rapidamente uma nova
plataforma de destino em seu projeto. Se voc selecionar uma das plataformas includas no Visual
Studio, as propriedades de seu projeto so modificadas para compil-lo para a plataforma
selecionada.
Observao
Se voc criar um novo nome para sua configurao, voc pode ter que modificar as configuraes
em Project Designer para direcionar a plataforma correta.
Observao
Projetos Visual J# no podem ser configurados para direcionar para diferentes plataformas.
Executar esta tarefa varia de acordo com a linguagem de programao que voc estiver usando.
Consulte os seguintes links para obter mais informaes:
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.
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.
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.
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.
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.
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.
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 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.
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.
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 obter informaes sobre como personalizar eventos de compilao para projetos do Visual
Basic, consulte Especificando eventos de compilao:.
Para obter informaes sobre como personalizar eventos de compilao para Projetos Visual C# e
Visual J# , consulte COMO: especificar eventos de compilao (c #, j #).
Para obter informaes sobre como personalizar eventos de compilao para projetos Visual C++
, consulte Especificando eventos de compilao.
Visual Studio 2005 permite que voc especifique como mais de um projeto executado quando
voc inicia o depurador.
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
Observao
Observao
Projeto
Configurao
Plataforma
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
Botes
Criar
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
Selecione Tudo
Desmarcar tudo
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.
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
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.
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
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.
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
Projeto
Configurao
Plataforma
Criar
Implantar
O depurador do Visual Studio .NET 2003 foi aprimorado pela adio dos seguintes recursos:
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.
Depurao de aplicativos escritos para o Common Language Runtime do Microsoft .NET
Framework, bem como aplicativos nativos Win32.
Anexar a um programa em execuo, tanto no computador host ou remoto.
Anexar automaticamente a processos do servidor para aplicativos ATL Server, aplicativos
ASP.NET da Web, e servios ASP.NET da Web quando estiverem depurando.
Depurao de vrios programas diferentes, iniciando vrios programas em uma nica
soluo do Visual Studio, ou anexando a outros programas que j esto sendo executados.
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
Segurana do Depurador
A capacidade de depurar um outro processo lhe concede poderes extremamente grandes que
voc no teria de outro modo, especialmente quando estiver depurando remotamente. Um
depurador mal-intencionado poderia inflingir danos amplos no computador que est sendo
depurado. Devido a isso, h restries sobre quem pode fazer a depurao. Para obter mais
informaes, consulte Permisses de depurao remota.
Aqui esto algumas recomendaes gerais que se aplicam a toda depurao gerenciada.
A depurao local geralmente mais segura do que a depurao remota. A depurao remota
aumenta a rea tatal de superfcie que pode ser investigada.
mais seguro depurar localmente, mas uma vez que, provavelmente, voc no tenha o Visual
Studio instalado no servidor da Web, a depurao local pode no ser prtica. Geralmente, a
depurao de Servios da Web feita remotamente, exceto durante o desenvolvimento, portanto
as recomendaes de segurana de depurao remota tambm se aplicam a depurao de
servios da Web. Aqui esto algumas recomendaes adicionais. Para obter mais informaes,
consulte Depurao Servios XML da Web.
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.
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:.
Para obter mais informaes, consulte HOW TO: definir depurao e configuraes de verso.
Express No No No No No
Padro No No No 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.
A depurao em SQL com o Microsoft Visual Studio 2005 requer o seguinte software no servidor:
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:
Para obter informaes sobre requisitos de sistema do Visual Studio 2005 por favor consulte
Requisitos de hardware do Visual Studio.
Depurao em SQL com o Microsoft SQL Server 2005 requer uma das seguintes edies do
Visual Studio 2005 :
Um projeto Visual Studio tem configuraes separadas para liberao e depurao de verses do
seu programa. Como os nomes sugerem, voc cria a Verso de depurao para depurao e a
verso de lanamento para a distribuio da verso final.
Se voc criar seu programa no Visual Studio, Visual Studio automaticamente cria essas
configuraes e define opes padro apropriadas e outras configuraes. Com as configuraes
padro:
Voc pode alternar entre verses de lanamento e de depurao usando a barra de ferramentas
padro ou o Gerenciador de configurao. Para obter mais informaes consulte COMO Criar e
Editar Configuraes:.
Observao
Quando voc instalou o Visual Studio, voc solicitado a escolher um conjunto de configuraes
de desenvolvimento para a linguagem de programao primria. Se voc escolher as
configuraes de desenvolvimento do Visual Basic, a ferramenta para escolher a configurao de
Procedimentos
Voc pode mudar as definies para uma configurao usando o <Project> Property Pages.
Dependendo do tipo de projeto, esta janela ser uma caixa de dilogo contendo um controle de
rvore no canto esquerdo para Categorias de navegao Visual C++ e sites da Web ou uma
janela com guias no painel editor de texto do Visual Studio.
Especifique qual depurador usar na caixa de listagem Debugger to launch. Sua escolha ir afetar
quais propriedades so visveis.
Setting Description
Debugger to launch Especifica o depurador a ser executado, com as seguintes opes:
Local Windows Debugger
Remote Windows Debugger
Web Service Debugger
MPI Cluster Debugger
Configurao Descrio
Debug Information Especifica o tipo de informaes de depurao a serem criadas para o
Format (/Z7, /Zd, Zi, projeto.
/ZI) A opo padro (/ZI) cria um banco de dados do programa (PDB) em
formato compatvel Edio e Continuao. Para obter mais informaes,
consulte /Z7, /Zd, /Zi, /ZI (formato de informaes de depurao).
Para obter detalhes, consulte Arquivos PDB e Arquivos DBG
Configurao Descrio
Optimization Especifica se o compilador deve otimizar o cdigo que ele produz. A otimizao
altera o cdigo que executado. O cdigo otimizado no corresponde mais ao
cdigo fonte, portanto a depurao difcil.
A opo padro (Disabled (/0d) suprime a otimizao. Voc pode desenvolver
com otimizao suprimida, e em seguida, ativ-la ao criar a verso de produo
do seu cdigo.
Configurao Descrio
Generate Debug Info Informa o vinculador para incluir informaes da depurao, que
(/DEBUG) tero o formato especificado por /Z7, /Zd, Zi, ou /ZI.
Generate Program Especifique o nome de um arquivo PDB nesta caixa. Voc deve
Express No No No No No
Standard No No No No No
Esta seo descreve as permisses necessrias para depurao SQL. Essas permisses so
apenas aqueles impostas pela depurao do SQL; no pode ser outra permisso necessria em
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
Um usurio que j tenha privilgios SysAdmin deve executar o seguinte:
sp_addsrvrolemember 'Domain\Name', 'sysadmin'
Observao
Guia Depurao
Configurao Descrio
Configuration Define o modo para compilar o aplicativo. Escolha entre Active (Debug),
Debug, Release, All Configurations.
Start Action Este grupo de controles especifica a ao que ir ocorrer quando voc
escolher iniciar no menu Depurar.
Start project o padro e inicia o projeto de inicializao para
depurao. Para obter mais informaes, consulte Escolhendo o projeto
de inicializao.
Start external program permite a voc iniciar e anexar a um
programa que no faz parte de um projeto Visual Studio. Para obter
mais informaes, consulte Anexar a um programa em execuo.
Start browser in URL permite a voc depurar um aplicativo da
Web.
Configurao Descrio
Ativar Esta opo deve ser desmarcada. Otimizao faz com que o cdigo que
otimizaes realmente executado seja diferente do cdigo fonte visto no Visual Studio, e
assim torna difcil depurao. Se o cdigo otimizado, smbolos no so
carregados por padro quando estiver depurando com Just My Code.
Gerar Definidos por padro nas verses de lanamento e de depurao, esta
informaes de configurao (equivalente a opo do compilador /debug) cria informaes da
depurao depurao ao tempo de compilao. O depurador usa essas informaes
para mostrar nomes de variveis e outras informaes em um formulrio til
quando voc est depurando. Se voc compila seu programa sem essas
informaes, a funcionalidade do Depurador ser limitada. Para obter mais
informaes, consulte /Debug.
Definir constante Definir esse smbolo permite compilao condicional das funes de sada da
DEBUG classe de depurao. Com esse smbolo definido, mtodos de classe de
depurao geram a sada para a Janela de sada. Sem esse smbolo,
mtodos da classe de depurao no so compilados e nenhuma sada
gerada. Este smbolo deve ser definido na Verso de depurao e no
definido na verso de lanamento. Definir esse smbolo em uma verso de
lanamento cria desnecessrio cdigo que torna o programa lento.
Definir constante Definir esse smbolo permite a compilao condicional das funes de sada
Trace da classe Rastrear. Com esse smbolo definido, os mtodos de classe de
rastreamento geram a sada para a Janela de sada. Sem esse smbolo,
mtodos de classe de rastreamento no so compilados e nenhuma sada de
rastreamento gerada. Esse smbolo definido por padro para as verses
de depurao e de lanamento.
No Visual C++, a opo /Fd nomeia o arquivo PDB criado pelo compilador. Quando voc cria um
projeto em Visual Studio usando assistentes, a opo /Fd definida para criar um PDB chamado
project.PDB.
Se voc criar seu aplicativo C/C++ usando um makefile, e voc especificar /ZI ou /Zi sem /Fd,
voc finaliza com dois arquivos PDB:
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:
Express No No Sim No No
Padro No No Sim No No
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 obter mais informaes sobre arquivos DBG, consulte o artigo no KB a seguir:
Este tpico contm as sees a seguir, que fornecem consideraes sobre a preparao para
depurar bibliotecas de classes:
No importa como voc inicie a depurao, certifique-se de criar a verso de depurao da DLL
primeiro e certifique-se que a verso de depurao est no local onde o aplicativo espera localiz-
lo. Isso pode parecer bvio, mas se voc esquecer desta etapa, o aplicativo pode localizar uma
verso diferente da DLL e carreg-la. O programa ento continuar a ser executado, enquanto
voc fica imaginando por que o ponto de interrupo nunca foi atingido. Quando voc estiver
depurando, voc pode verificar quais DLLs seu programa carregou abrindo o depurador na janela
Modules. A janela Modules lista cada DLL ou EXE carregados no processo que voc est
depurando. Para obter mais informaes, consulte Como: Usar a Janela Mdules (Mdulos).
O aplicativo que chama sua DLL pode ser escrito em cdigo gerenciado ou cdigo nativo. Se a
DLL gerenciada chamado pelo cdigo nativo e voc precisar depurar ambos, os depuradores
gerenciado e nativo devem ambos estar habilitados. Voc pode verificar isso na caixa de dilogo
ou janela <Project> Property Pages. Como fazer isso depende de como voc iniciou a
depurao do projeto de DLL ou o projeto do aplicativo que chama. Para obter mais informaes,
consulte HOW TO: Depurar no modo misto.
Quando voc cria um projeto de aplicativo console com o modelo de projeto, o Visual Studio cria
automaticamente as configuraes necessrias para as configuraes Debug e Release. Se
necessrio, voc pode alterar essas configuraes. Para obter mais informaes, veja
Configuraes do projeto para uma configurao de depurao no Visual Basic, Configuraes do
projeto para um C++ depurar configurao, Configuraes de projeto para depurar C# e J# e
HOW TO: definir depurao e configuraes de verso.
Cada um dos projetos nesta seo cria uma DLL. No possvel executar uma DLL diretamente;
ela deve ser chamada por um aplicativo (geralmente um EXE). Para obter mais informaes,
consulte Criando e gerenciando projetos Visual C++. O aplicativo de chamada pode:
Ser criado em outro projeto na mesma soluo Visual Studio que contm a biblioteca de
classes.
Um programa existente j implantado em um computador de teste ou produo.
Ser localizado na Web e acessado atravs de um URL.
Ser um aplicativo da Web que contm uma pgina da Web que incorpore a DLL.
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:.
Se o aplicativo de chamada um programa existente j implantado em um computador de
teste ou produo e j est sendo executado voc pode anexar a ele. Use este mtodo se a
DLL for um controle hospedado pelo Internet Explorer, ou um controle em uma pgina da Web.
Para obter mais informaes, consulte Como: Anexar a um Processo em 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.
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.
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:
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 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.
Aplicativo de console do C#
Aplicativo de console do Visual Basic
Aplicativo de console do J#
Aplicativo de console do C++ (.NET)
Aplicativo de console do C++ (Win32)
Voc talvez precisar especificar os argumentos para seu aplicativo de console na linha de
comando. Para obter mais informaes, consulte Configuraes do projeto para um C++ depurar
configurao, Configuraes do projeto para depurar a configurao no Visual Basic , ou
Configuraes de projeto para depurar C# e J#.
Um aplicativo de console usa a janela Console para aceitar uma entrada e para exibir mensagens
de sada. Para escrever na janela Console, o aplicativo deve usar o objeto Console em vez do
objeto Debug. Para escrever na janela Visual Studio Output, use o objeto Debug como de
costume. Verifique se voc sabe onde o aplicativo est gravando ou voc pode estar procurando
por mensagens no lugar errado. Para obter mais informaes, consulte Classe console, Depurar a
classe e Janela de sada.
Quando voc inicia um aplicativo do Visual Studio, a janela Console s vezes aparece por trs da
janela Visual Studio. Se voc tentar de iniciar seu aplicativo de console do Visual Studio, e nada
parece acontecer, tente mover a janela Visual Studio.
Dois tipos de projeto do Visual C++ (ATL Server Web Service e ATL Server Projects) esto
includos na Aplicativos da Web depurao preparao: porque as tcnicas de depurao usadas
com eles tm mais em comum com aplicativos da Web.
Property
Name Setting
Optimization Defina como Disabled (/0d). O cdigo otimizado mais difcil para depurar,
porque as instrues geradas no correspondem diretamente ao seu cdigo fonte.
Se voc encontrar o programa que possui um erro que aparece somente no
cdigo otimizado, voc pode ativar esta configurao, mas lembre que o cdigo
mostrado na janela Disassembly gerado de fonte otimizada que pode no
corresponder ao que voc v nas suas janelas de origem. Outros recursos, como
depurao, podem no se comportar conforme o esperado.
Generate Voc deve sempre definir esta opo para Yes (/DEBUG) para criar arquivos
debugging necessrios para depurao e smbolos de depurao. Quando o aplicativo
information entra em produo, voc pode definir ela como off.
Quando voc cria um projeto Windows Forms com o modelo de projeto, o Visual Studio cria
automaticamente as configuraes necessrias para Debug e Release. Se necessrio, voc pode
alterar essas configuraes na caixa de dilogo <project name> Property Pages. Para obter
mais informaes, consulte Configuraes para Debug e Release.
Visual C# Consolidado 527
Para obter mais informaes, consulte Alterando as configuraes de projeto para depurao C
ou C++.
Outra maneira de depurar um aplicativo de Windows Forms consiste em iniciar o aplicativo fora do
Visual Studio e anexar a ele. Para obter mais informaes, consulte Anexando a um programa em
execuo ou a vrios programas.
Aplicativos Win32 incluem aplicativos MFC e projetos ATL. Eles usam APIs Windows e podem
usar MFC ou ATL, mas no usam Common Language Runtime (CLR). No entanto, eles podem,
chamar cdigo gerenciado que usa o CLR.
O procedimento a seguir explica como depurar um projeto Win32 a partir do Visual Studio. Outra
maneira para depurar um aplicativo Win32 consiste em iniciar o aplicativo fora do Visual Studio e
anex-lo. Para obter mais informaes, consulte Anexando a processos em execuo.
Observao
Para o depurador anexar o cdigo C++ compilado com o /clr, o cdigo precisa emitir
DebuggableAttribute. Voc pode adicionar isso para que seu cdigo automaticamente por meio
da vinculao com a opo /ASSEMBLYDEBUG do vinculador.
Quando um aplicativo cliente chama um servio XML da Web, o depurador se anexa ao aplicativo
cliente e o processo ASP.NET, Aspnet_wp.exe, e o controle de chamadas SOAP, aps a cadeia
da pilha de chamadas para o processo do servio XML da Web.
Para obter mais informaes, consulte Servios XML da Web no cdigo gerenciado.
Quando voc cria um projeto Servio XML da Web com o modelo de projeto, o Visual Studio cria
automaticamente as configuraes necessrias para as configuraes de Debug e Release. Se
necessrio, voc pode alterar essas configuraes. Para obter mais informaes, consulte
Alterando as Configuraes do Projeto para configuraes de debug no C ou C++ e
Configuraes de Debug e Release.
Observe que aqueles tipos de projeto que criam DLLs como sada so agrupados em Depurao
de projetos DLL devido aos recursos comuns que eles compartilham.
Caso voc precise alterar a depurao padro e configuraes de verso criadas por Visual
Studio, poder fazer isso. Para obter mais informaes, consulte HOW TO: definir depurao e
configuraes de verso.
1. Clique com o boto direito do mouse no site da web no Solution Explorer, e selecione
Property Pages para abrir a caixa de dilogo Property Pages.
2. Clique em Start Options.
3. Defina Start Action como a pgina da Web que primeiro deve ser exibida.
4. Em Debuggers, certifique-se de que ASP.NET debugging verificada.
Para obter mais informaes, consulte Configuraes de Property Pages para Projetos da
Web.
Para iniciar a depurao, escolha Start no menu Debug. Se voc no ativou manualmente a
depurao, a caixa de dilogo Debugging Not Enabled ser exibida, o que lhe dar a opo de
ter um arquivo web.config automaticamente criado com depurao ativada, ou executando sem
depurao. Depois de esta caixa de dilogo fechar, as configuraes de projeto fazem com que o
Visual Studio inicie o navegador selecionado em <Project> Properties Pages e gere
dinamicamente uma pgina de teste. Na pgina de teste, voc pode digitar comandos e observar
os dados que so retornados pelo seu XML Web Services.
Depurando um aplicativo ATL Server muito semelhante a depurar um aplicativo Win32, com
alguns fatores adicionais a serem considerados.
Aplicativos ATL Server so implementados como extenses ISAPI. Para obter mais informaes,
consulte Tcnicas de depurao atl.
s vezes, convm depurar um executvel que no faz parte de um projeto Visual Studio . Pode
ser um executvel criado por voc fora do Visual Studio ou um executvel que voc recebeu de
outra pessoa.
A resposta normal para este problema iniciar o executvel fora do Visual Studio e anexar a ele
usando o depurador Visual Studio. Para obter mais informaes, consulte Anexando a processos
em execuo.
Anexar a um aplicativo requer algumas etapas manuais, portanto leva alguns segundos. Esse
pequeno atraso significa que anexar no ajudar se voc estiver tentando depurar um problema
que ocorre durante a inicializao. Alm disso, se voc estiver depurando um programa que no
espera uma entrada de usurio e termina rapidamente, voc pode no ter tempo para anexar a
ele. Se voc tiver o Visual C++ instalado, voc pode criar um projeto EXE para esse programa.
Observao
Nem todas as linguagens de programao oferecem suporte a projetos EXE. Instale o Visual C++
se voc precisar usar este recurso.
Express Edition No No No No No
Standard Edition No No No No No
Visual Studio oferece suporte remoto de depurao de uma mquina para outra. Quando voc
estiver realizando depurao remota, o computador host pode ser qualquer plataforma que
oferece suporte Visual Studio. O computador remoto pode ser uma plataforma 32 bits (Windows
98/Me, Windows 2000, Windows XP ou Windows Server 2003) ou 64 bit (IA64, IA64 modo WOW,
x64 ou x64 modo WOW).
Com o depurador do Visual Studio, voc pode depurar fonte compartilhada segura do Microsoft
MSDN Code Center Premium.
Este tpico explica como configurar e depurar o cdigo fonte Code Center Premium no Visual
Studio.
Antes que voc possa depurar a Code Center Premium secure shared source, voc deve
especificar um diretrio local para a fonte em sua mquina. Voc pode alterar este local, editando
uma chave do registro.
Para alterar o diretrio local padro para code center premium source
Depurar um aplicativo confiana parcial-pode ser um desafio, aplicativos de confiana parcial tem
diferentes permisses de segurana (e portanto tem um comportamento diferente) dependendo da
onde eles esto instalados. Se instalado a partir da Internet, um aplicativo com confiana parcial
ter algumas permisses. Se instalado de uma intranet local, ter mais permisses, e se instalado
no computador local, ela ter permisses totais. Voc tambm pode ter personalizado zonas, com
permisses personalizadas. Convm depurar um aplicativo com confiana parcial em qualquer ou
todas essas condies. Felizmente, Visual Studio facilita isso tambm.
Antes de iniciar uma sesso de depurao no Visual Studio, voc pode escolher a zona que voc
deseja simular um aplicativo instalado. Quando voc iniciar a depurao, o aplicativo ter
permisses apropriadas para um aplicativo com confiana parcial instalado a partir dessa zona.
Isso permite que voc veja o comportamento do aplicativo como ele apareceria a um usurio que
baixou ele da zona.
Se o aplicativo tenta executar uma ao que no tem permisso, ocorrer uma exceo. Nesse
momento, o assistente de exceo oferece a oportunidade de adicionar uma permisso extra que
permite voc reiniciar a sesso de depurao com permisses suficientes para evitar o problema.
Posteriormente, voc poder voltar atrs e consultar quais permisses voc adicionou durante a
depurao. Se voc teve que adicionar uma permisso durante a depurao, provavelmente isso
indica que voc precisar adicionar um User Consent Prompt nesse ponto no seu cdigo.
Para escolher uma zona para seu aplicativo com confiana parcial
1. No menu Project escolha Projectname Properties.
2. Nas pginas da propriedade Projectnameclique na pgina Security.
3. Selecione Enable ClickOnce Security Settings.
4. Em Zone your application will be installed from, clique na caixa de listagem e escolha a
zona que voc deseja simular o aplicativo que est sendo instalado.
A grade Permissions required by the application mostra todas as permisses
disponveis. A marca de seleo indica permisses concedidas ao seu aplicativo
5. Se a zona que voc escolher for (Custom), selecione correto as configuraes
personalizadas na coluna Setting da grade Permissions.
6. Clique OK para fechar as pginas de propriedades.
Para adicionar uma permisso extra quando uma exceo de segurana ocorre
1. A caixa de dilogo Exception Assistant ser exibida com a mensagem: SecurityException
was unhandled.
2. Na caixa de dilogo Exception Assistant em Actions, clique em Add Permission to the
Project.
3. A caixa de dilogo Restart Debug ser exibida.
o Se voc desejar reiniciar a sesso de depurao com a nova permisso, clique em
Yes.
o Se voc no desejar reiniciar ainda, clique em No.
Para exibir as permisses adicionadas durante a depurao extra
1. No menu Project escolha Projectname Properties.
2. Nas pginas de propriedades Projectname clique na pgina Security.
3. Procure na grade Permissions required by the application. Qualquer permisso extra
que voc adicionou possui dois cones na coluna Included: a marca de seleo normal, que
todas permisses includas possuem e um cone adicional que parece com um balo
contendo a letra " i ".
4. Use a barra de rolagem vertical para exibir a grade inteira Permissions required by the
application.
Express No No No No No
O Visual Studio agora oferece suporte a depurao de cluster MPI. Esse recurso permite que voc
depure programas paralelos executados em um cluster de computadores que se comunicam
atravs da Message Passing Interface (MPI).
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 Remote Debugging Monitor (msvsmon) deve estar em cada mquina no cluster.
Consulte Como: executar o monitor de depurao remota:.
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)
Voc pode depurar um aplicativo de 64 bits que esteja executando no computador local ou em um
computador remoto com oVisual Studio 2005.
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.
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:.
Diferenas no AppDomain.CurrentDomain.FriendlyName
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.
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.
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:
No Visual Basic e Visual C#, use o mtodo Assert do Debug ou do Trace, que esto no
namespace System.Diagnostics. Mtodos de classe Debug no so includos em uma verso de
lanamento do seu programa, para que eles no aumentem o tamanho ou reduzam a velocidade
do seu cdigo de entrega.
C++ no d suporte a mtodos de classe Debug. Voc pode obter o mesmo efeito, usando a
classe Trace com compilao condicional, tais como #ifdef DEBUG... #endif.
O mtodo Debug.Assert
[C#]
int IntegerDivide ( int dividend , int divisor ) { Debug.Assert ( divisor != 0 ); return ( dividend / divisor ); }
Quando voc executar este cdigo no depurador, a instruo de assero avaliada, mas na
verso de lanamento, a comparao no feita, portanto, no existir nenhuma sobrecarga
adicional.
Veja outro exemplo. Voc tem uma classe que implementa uma conta checking, da seguinte
forma:
[C#]
Antes que retirar dinheiro da conta, voc deseja verificar se o saldo da conta suficiente para
cobrir a quantidade que voc est preparando para saque. Voc pode escrever uma assero
para verificar o saldo:
[C#]
[C#]
[C#]
Se voc criar o projeto usando os assistentes Visual Studio, o smbolo Trace definido por padro
em Configuraes de lanamento e de depurao. O smbolo Debug definido por padro
somente na compilao de depurao.
Caso contrrio, para mtodos Trace funcionarem, o programa deve ter uma das opes a seguir
na parte superior do arquivo de origem:
Se voc precisa usar os mtodos de depurao em uma criao de verso C# ou Visual Basic,
voc dever definir o smbolo Debug em sua configurao de lanamento.
C++ no d suporte a mtodos de classe Debug. Voc pode obter o mesmo efeito, usando a
classe Trace com compilao condicional, tais como #ifdef DEBUG... #endif Voc pode definir
esses smbolos na caixa de dilogo <Project> Property Pages. Para obter mais informaes,
consulte Alterando configuraes do projeto para configurao de depurao no Visual Basic ou
Alterando Configuraes do projeto para configurao de depurao em C ou C++.
Declarar argumentos
System.Diagnostics.Trace.Assert(System.Boolean) e
System.Diagnostics.Debug.Assert(System.Boolean) levam at trs argumentos. O primeiro
argumento, que obrigatrio, a condio que deseja verificar. Se voc chamar
System.Diagnostics.Trace.Assert(System.Boolean) ou
System.Diagnostics.Debug.Assert(System.Boolean) com apenas um argumento, o mtodo
Assert verificar a condio e, se o resultado False, mostra o contedo da pilha de chamadas
na janela Output. O exemplo a seguir Mostra
System.Diagnostics.Trace.Assert(System.Boolean) e
System.Diagnostics.Debug.Assert(System.Boolean):
[C#]
[C#]
Debug.Assert ( stacksize > 0, "Out of stack space" ); Trace.Assert ( stacksize > 0, "Out of stack space" );
[C#]
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" ); Trace.Assert ( stacksize > 0, "Out
of stack space", "Failed in inctemp" );
Se voc executar o aplicativo no modo de interface do usurio, o mtodo Assert exibe a caixa de
dilogo Assertion Failed quando a condio falhar. As aes que ocorrem quando uma
declarao falha so controladas pela propriedade Listeners ou Listeners.
Para personalizar a sada dessa forma, o programa deve conter uma escuta, e voc deve herdar
de TraceListener e substituir seu mtodo
System.Diagnostics.TraceListener.Fail(System.String).
Voc pode definir itens em seu arquivo de configurao de programa, bem como em seu cdigo.
Para obter mais informaes, consulte System.Diagnostics.Trace.Assert(System.Boolean) ou
System.Diagnostics.Debug.Assert(System.Boolean).
Voc define ou remove uma instruo Stop editando seu cdigo fonte. Voc no pode definir ou
limpar instrues Stop usando comandos do depurador, como voc faria com um ponto de
interrupo.
Diferentemente de uma instruo End, a instruo Stop no redefine variveis ou retorna voc ao
modo de design. Voc pode escolher Continue no menu Debug para continuar executando o
aplicativo.
Quando voc executar um aplicativo do Visual Basic fora do depurador, uma instruo Stop
iniciar o depurador se a depurao Just-in-Time estiver ativada. Se a depurao Just-in-Time
no estiver ativada, a instruo Stop se comporta como se fosse uma instruo End, encerrando a
execuo. Nenhum evento QueryUnload ou Unload ocorrer, portanto voc deve remover todas
as instrues de Stop da verso final do seu aplicativo Visual Basic. Para obter mais informaes,
consulte Depurao Just-in-Time.
Para evitar a necessidade de remover instrues Stop, voc pode usar compilao condicional:
Outra alternativa usar uma instruo Assert em vez da instruo Stop. Uma instruo
Debug.Assert interrompe a execuo somente quando uma condio especificada no for
atendida e removida automaticamente quando voc criar uma verso Release. Para obter mais
informaes, consulte Itens no cdigo gerenciado. Se voc desejar que uma instruo Assert
sempre interrompa a execuo na verso de depurao, voc pode fazer isso:
Debug.Assert(false)
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!";
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.
O servio no poder executar nesse modo, mas voc pode depurar o mtodo OnStart e
verificar se ele est se comportando conforme esperado.
Observao
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.
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:
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
Desative a depurao de ncleo e depure no Visual Studio.
3. Reinicialize o computador.
4. Reinicie o Visual Studio e depurao.
Para depurar com o Kernel Debugger
1. Se o Kernel Debugger conectado, voc ver uma mensagem perguntando se voc
deseja para continuar a depurao. Clique no boto para continuar.
2. Voc pode obter um User break exception(Int 3) Se isso acontecer, digite o seguinte
comando KD para continuar a depurao:
gn
Express No No Nativo No
Padro No No Nativo No
A seo aborda alguns problemas comuns de depurao e tcnicas para aplicativos nativos. As
tcnicas abordadas nesta seo so tcnicas de alto nvel. Para a mecnica de usar o depurador
Visual Studio, consulte O depurador esquema obter.
Express No No Nativo No
Padro No No Nativo No
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.
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.
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.
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:
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:
Express No No Nativo No
Padro 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:
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.
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.
ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects VERIFY ( myFnctn(0)==1 ) // safe
Chama VERIFYmyFnctn em verses Debug e Release, portanto aceitvel para usar. Voc ainda
ter a sobrecarga de um chamada de funo desnecessria na verso Release, entretanto.
Express No No Nativo No
Padro No No Nativo No
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.
MFC fornece seu prprio conjunto de recursos para detectar vazamentos de memria em
programas MFC. Para obter mais informaes, consulte Detectar Leaks de memria no MFC.
Consulte tambm
Conceitos
Segurana do Depurador
Outros recursos
Depurao de cdigo nativo
Express No No Nativo No
Padro No No Nativo No
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.
O depurador fornece duas janelas para depurar cdigo de montagem embutido, a Disassembly
janela e a Registers janela.
Procedimento
Express No No Nativo No
Se voc est depurando um programa ATL, essas tcnicas depurao podem ser de uso para
voc.
Nesta seo
Como componentes Debug com + 1.0:
Descreve como para depurar um projeto 1.0 componente COM + no Visual Studio.
Mostra a definio voc deve adicionar ao seu cdigo para depurar QueryInterface
chamadas em ATL e os resultados.
Mostra a definio voc deve adicionar ao seu cdigo para referncia de rastreamento
contagens nas ATL e os resultados.
Sees relacionadas
Depurao e Error Reporting funes global
Lista funes na biblioteca ATL que fornecem til depurao e recursos de rastreamento.
Lista macros na Biblioteca ATL que fornecem til depurao e recursos de rastreamento.
Segurana do Depurador
Express No No Nativo No
Padro No No Nativo No
Se voc est depurando um programa MFC, essas tcnicas de depurao podem ser til.
Nesta seo
AfxDebugBreak
Descreve a AfxDebugBreak funo, que voc pode usar para pontos de interrupo
hardcode no cdigo fonte.
A macro Trace
Descreve e fornece exemplos das macros ATLTRACE e Trace MFC, que permitem que
voc se exibir mensagens do seu programa na janela de sada do depurador.
Fornece links para as classes da MFC e funes que detectar memria que alocada mas
nunca desalocadas. Incluir links: controlar alocaes de memria, ativando Diagnstico de
Memria, levando instantneos de memria, exibindo estatsticas de memria, e objeto
despejos.
Sees relacionadas
Reduzindo o tamanho de um construir Debug MFC
Fornece solues para grande quantidade de espao em disco usado pelo informaes da
depurao quando voc cria um Verso de depurao de um aplicativo MFC.
Assertions MFC
Descreve e fornece cdigo de exemplo para usar a ASSERT macro para verificar para
falhas de declarao.
Segurana do Depurador
Express No No Nativo No
Se voc est depurando um programa que usa a biblioteca de tempo de execuo C, essas
tcnicas de depurao podem ser til.
Nesta seo
Usar da biblioteca Debug CRT
Macros do relatrio
Links listas para Bloco do cliente conectar funes, funes do gancho de alocao,
ganchos de alocao e CRT alocaes de memria, e funes do gancho de relatrio.
Sees relacionadas
Depurao de cdigo nativo
Segurana do Depurador
Padro No No Nativo No
Como pode eu Debug Violations Access quando executando meu autnomo do programa?
Como eu eu depurar uma violao de acesso?
Como pode eu localizar sem se meus ponteiros so Corrupting um endereo de memria?
Como eu eu localizar sada quem Passing um valor do parmetro Wrong?
Quando chamada uma funo Hundreds de Times, quais chamada falha?
Onde procurar por erros de cdigo Win32?
Como pode eu manter foco ao nvel atravs de meu 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?
Esta seo fornece dicas sobre depurao aplicativos COM e controles ActiveX.
Express No No Nativo No
Padro No No Nativo No
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:
Ou-
Se voc tiver o projeto usado para criar o executvel, iniciar depurao desse projeto. Voc pode
abrir um arquivo de fonte para a DLL e definir pontos de interrupo nesse arquivo, mesmo que
ele seja no fizer parte do projeto usado para criar o executvel. Para obter mais informaes,
consulte Pontos de interrupo.
Se voc iniciar a depurao do projeto que cria a DLL, voc deve especificar o executvel que
deseja usar na depurao a DLL
Express No No Nativo No
Padro No No Nativo No
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.
Muito usando atributos pode simplificar programao C++. Para obter mais informaes, consulte
Atribudo programao conceitos.Alguns atributos so interpretados diretamente pelo compilador.
Outros atributos injetar cdigo em fonte de programa, que ento compila o compilador. Esse
cdigo injected torna programao fcil, reduzindo a quantidade de cdigo voc deve escrever. s
vezes, no entanto, um erro pode causar seu aplicativo para falhar durante sua execuo cdigo
injected. Quando isso acontece, provavelmente desejar para aspecto no cdigo injected. O
Visual Studio fornece duas maneiras para que voc possa ver injected cdigo:
Nesta seo
Depurar aplicativos da Web ASP.NET
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++)
Depurao SQL
Este tpico se aplica a:
Express No No No No No
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
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.
Fornece instrues detalhadas e exemplos para cada tipo de objeto de banco de dados
SQL Server que pode ser depurado.
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.
Descreve como criar objetos de banco de dados SQL CLR em Visual Studio usando o tipo
do projeto SQL Server.
Os mtodos usados com mais freqncia para rastreamento so os mtodos para gravar sada no
escutas: Write., Assert, WriteIf, WriteLineIfWriteLine e Fail Esses mtodos podem ser divididos
em duas categorias: Write. e Fail todos Emitir sada incondicionalmente, enquanto WriteIf,
WriteLine, WriteLineIf e Assert Testar uma Boolean condio, e escrever ou no gravar com
base no valor da condio e WriteIfWriteLineIf Emitir sada da condio true, e Assert emite
sada se a condio for false.
Ao criar o Rastreamento e depurao estratgia, voc deve pensar sobre a sada para ver como
voc deseja. Vrias Write instrues preenchidas com informaes no relacionadas criar um
log que difcil de ler. Por outro lado, usando WriteLine para colocar instrues relacionadas em
linhas separadas pode dificultar a distinguir quais informaes pertence juntos. Em geral, use
vrias Write instrues quando voc deseja combinar informaes de vrias fontes para criar uma
nica mensagem informativa, e a WriteLine instruo quando voc desejar criar uma mensagem
nica e completa.
C#
J#
Para verificar que determinadas condies existir antes ou aps voc executar um mtodo
Chame o Declarar mtodo.
C#
int I = 4; System.Diagnostics.Trace.Assert(I == 5, "I is not equal to 5.");
C#
Observao
Voc pode usar Assert com o rastreamento e depurao. Este exemplo envia a pilha de
chamadas para qualquer escuta na coleo Listeners. Para obter mais informaes, consulte
Declaraes em cdigo gerenciado e Mtodo Debug.Assert.
O Debug e Trace Classes enviar mensagens para objetos chamados escutas que receber e
processar essas mensagens. Um tal escuta para obter mais informaes, consulte Rastrear
Listeners., o DefaultTraceListener, criado e inicializado quando o rastreamento ou depurao
ativada; automaticamente Se voc desejar Trace ou Debug Sada para ser direcionado a
qualquer fontes adicionais, voc deve criar e inicializar escutas de rastreamento adicionais
Os ouvintes voc criar devem refletir suas necessidades individuais. Por exemplo, convm um
registro de texto de toda a sada de rastreamento. Nesse caso, voc deve criar uma escuta que
escreveu todas as sadas para um novo arquivo de texto quando ativado Por outro lado, voc
pode deseja exibir sada durante a execuo do aplicativo somente Nesse caso, voc pode criar
uma escuta que direcionado toda a sada para uma janela do console. O EventLogTraceListener
pode direcionar a sada de rastreamento para um log de eventos, e o TextWriterTraceListener
pode gravar a sada de rastreamento em um fluxo.
- ou -
o Se voc no desejar a escuta para receber a sada de rastreamento, no adicione-
lo coleo Listeners. Voc pode emitir sada atravs uma escuta independente da coleo
Listeners chamando os mtodos de sada de escuta na prpria. O exemplo a seguir mostra
como gravar uma linha em uma escuta que no esteja na coleo Listeners :
C#
myListener.WriteLine( "This output will not go to the Listeners collection");
3. Se a escuta no for um membro da coleo Listeners, talvez seja necessrio para chamar
o Flush mtodo para registrar a sada.
C#
// Flushes the buffers of all listeners in the Listeners collection. System.Diagnostics.Trace.Flush(); //
Flushes only the buffer of myListener. myListener.Flush();
Um dos novos recursos do .NET Framework verso 2.0 um sistema de rastreamento avanada.
O premise bsico inalterada: mensagens de rastreamento so enviadas atravs de opes para
escuta, que informou os dados para uma mdia de sada associados. Uma diferena principal para
verso 2.0 rastreamentos que podem ser iniciados a instncias da classe TraceSource. Destina
TraceSource a funcionar como um sistema de rastreamento avanada e pode ser usada em vez
do estticos mtodos do antigos Trace e Debug Classes de rastreamento.. O familiar Trace e
Debug Classes ainda existir, mas a prtica recomendada para usar a TraceSource classe para
rastreamento.
Para alterar o nvel no qual uma escuta grava uma mensagem de rastreamento
O arquivo de configurao inicializa as configuraes para a fonte de rastreamento no
momento o aplicativo inicializado. Para alterar essas configuraes Voc deve alterar o
arquivo de configurao e reiniciar o aplicativo ou programaticamente atualizar o aplicativo
usando o System.Diagnostics.Trace.Refresh mtodo. O aplicativo pode alterar propriedades
definidas pelo arquivo de configurao para substituir as configuraes especificadas pelo
usurio dinamicamente. Por exemplo, convm garantir que mensagens importantes sempre
so enviadas em um arquivo de texto, independentemente das configuraes atuais.
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(); // Change the event type for which tracing occurs. // The console trace
listener must be specified // in the configuration file. First, save the original // settings from the
configuration file. EventTypeFilter configFilter = (EventTypeFilter)mySource.Listeners["console"].Filter;
// Then create a new event type filter that ensures // critical messages will be written.
mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Critical); Activity2(); // Allow
the trace source to send messages to listeners // for all event types. This statement will override // any
settings in the configuration file. mySource.Switch.Level = SourceLevels.All; // Restore the original filter
settings. mySource.Listeners["console"].Filter = configFilter; Activity3(); mySource.Close(); return; }
static void Activity1() { mySource.TraceEvent(TraceEventType.Error, 1, "Error message.");
mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } static void Activity2() {
mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message.");
mySource.TraceInformation("Informational message."); } static void Activity3() {
mySource.TraceEvent(TraceEventType.Error, 4, "Error message.");
mySource.TraceInformation("Informational message."); } } }
Para usar opes de rastreamento, voc deve primeiro cri-los e coloc-los em seu cdigo No h
duas classes predefinidas do qual voc pode criar objetos Opo: a BooleanSwitch classe e a
TraceSwitch classe. Voc deve usar BooleanSwitch se voc cuidado somente sobre se ou no
Visual C# Consolidado 568
aparece uma mensagem de rastreamento; voc usaria TraceSwitch se necessrio para
discriminate entre nveis de rastreamento. Se voc pode definir suas prprias mensagens de
depurao e associ-los com nveis de rastreamento diferente. usado um TraceSwitch Voc
pode usar os dois tipos de opo com rastreamento ou depurao. Por padro, e a TraceSwitch.
est desativado estiver definido como nvel TraceLevel.Off um BooleanSwitch Opes de
rastreamento podem ser criado e colocada em qualquer parte do seu cdigo que pode utilizem.
Embora voc possa definir nveis de rastreamento e outras opes de configurao no cdigo,
recomendvel que voc usar o arquivo de configurao para gerenciar o estado de seu opes.
Isso ocorre porque permite gerenciar a configurao do comutaes no sistema de configurao
que voc maior flexibilidade Voc pode ativar e desativar vrias opes e alterar nveis sem
recompilar o aplicativo. Para obter mais informaes, consulte Configurando opes de
rastreamento.
Voc pode ter um ou Debug atributo condicional ativada para uma criao, ou ambos, ou
nenhum. o Trace Assim, existem quatro tipos de compilao: Debug, Trace, dois, ou nenhum.
Alguns compilaes de verso para implantao de produo podem conter nenhum; compilaes
de depurao mais conter ambos.
As pginas de propriedades
A linha de comando
(#CONST para Visual Basic e #define (para C#))
Para alterar as configuraes de compilao da caixa de dilogo pginas Propriedade
Visual C# Observao
Dica
Para compilar mais de um arquivo do aplicativo, deixe um espao em branco entre os nomes de
arquivo, por exemplo, MyApplication1.vb MyApplication2.vb MyApplication3.vb ou
MyApplication1.cs MyApplication2.cs MyApplication3.cs.
Diretiva Significado
vbc Compilador do Visual Basic
csc Compilador C#
/r: Referencia um conjunto externo (exe ou dll)
/d: Define um smbolo de compilao condicional
Observao
Voc dever soletrar Trace ou Debug com letras maisculas. Para obter mais informaes sobre
os comandos de compilao condicional, digite vbc /? (para Visual Basic) ou csc /? (no C#). No
prompt de comando Para obter mais informaes, consulte Criando a partir da linha de comando
(C#) ou Chamar o Compiler de linha de comando (Visual Basic).
Observao
Do d: quando voc est pronto para compilar, ou pode escolher Build do menu ou Build use o
mtodo de linha de comando mas sem digitar para definir smbolos de compilao condicional.
Fontes de rastreamento podem ser criado e inicializado com ou sem o uso de arquivos de
configurao. A abordagem recomendada consiste em usar arquivos de configurao para facilitar
a reconfigurao dos rastreamentos produzido pelo rastreamento fontes em tempo de execuo.
Usando o DebuggerDisplayAttribute
O DebuggerDisplayAttribute Construtor tem um argumento nico: uma seqncia para ser exibido
na coluna Valor para. instncias do tipo This string can contain braces ({ and }). O texto contido
em um par de chaves avaliado como uma expresso. Por exemplo, faz com o seguinte cdigo
C# ". Count = 4 " a ser exibida ao sinal de mais (+) est selecionado para expandir a exibio
depurador para uma instncia de MyHashtable
Usando o DebuggerBrowsableAttribute
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
Usando o DebuggerTypeProxy
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-.
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; } } } }
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.
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.
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.
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.
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>
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
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.
-ou-
// C# return "Hello World";
Isso define um ponto de interrupo. Voc dever ver um ponto vermelho aparecendo na
margem e um realce vermelho na linha de cdigo.
3. No menu Debug, selecione Start Without Debugging.
O XML Web service inicia a execuo no Internet Explorer, mas o depurador no est
conectado.
4. No menu Debug, selecione Attach to Process. Voc tambm pode clicar emAttach to
Process no menu Tools.
5. Clique em Show processes from all users.
Observao
Se voc estiver atravs de uma sesso de servio de terminal ou de rea de trabalho remota,
voc tambm deve selecionar Show processes in all sessions.
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!";
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.
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.
Passo-a-passo: Depurao da funo SQL CLR definida pelo usurio com valores em tabela
Express No No No No No
Standard No No No No No
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.
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
Express No No No No No
Padro No No No No No
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.
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.
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
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.
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.
Express No No No No No
Standard No No No No No
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.
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.
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
Express No No No No No
Padro No No No No No
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.
SELECT dbo.OrderCount()
Express No No No No No
Standard No No No No No
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.
Express No No No No No
Standard No No No No No
Esta seo contm exemplos demonstrando a depurao para todos os tipos de objeto de banco
de dados T-SQL.
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.
Express No No No No No
Padro No No No No No
Este exemplo usa o banco de dados AdventureWorks, que tem uma tabela Sales.Currency com
um disparador UPDATE disparador. O exemplo inclui um procedimento armazenado que atualiza
uma linha na tabela, fazendo com que o disparador seja acionado. Defina pontos de interrupo
no disparador, e atravs da execuo do procedimento armazenado com parmetros diferentes,
voc pode seguir caminhos de execuo diferentes no disparador.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na ajuda
dependendo de seu configuraes ou edio ativas. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Esse o cdigo para o procedimento armazenado que faz com que o disparador seja acionado.
Express No No No No No
Standard No No No No No
O exemplo cria um procedimento armazenado que chama a funo vrias vezes. O procedimento
armazenado chama a funo com parmetros diferentes, para que voc possa seguir caminhos
de execuo diferentes atravs da funo. O exemplo tambm ilustra como saltar de um objeto T-
SQL, o procedimento armazenado, para outro, a funo. As etapas so semelhantes quelas em
Passo-a-passo: Depurao de um procedimento T-SQL armazenado.
Voc tambm pode fazer Direct Database Debugging (depurao de banco de dados direta)
entrando na funo no Server Explorer.
Isso o cdigo para o procedimento armazenado que chama a funo definida pelo usurio.
Express No No No No No
Standard No No No No No
Este exemplo mostra como criar e depurar um procedimento armazenado T-SQL com depurao
direta no banco de dados (Direct Database Debugging), em outras palavras, entrar no
procedimento armazenado usando Server Explorer. Tambm ilustra diferentes tcnicas de
depurao, como definio de pontos de interrupo, exibio de itens de dados, e assim por
diante.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daqueles descritos na Ajuda
dependendo de suas configuraes ativas ou de edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para ajud-lo efetivamente a desenvolver aplicativos seguros, voc deve ter uma compreenso
fundamental dos conceitos de segurana e recursos de segurana das plataformas para as quais
voc ir desenvolver. Voc tambm deve ter uma compreenso de tcnicas de codificao
segura.
Defenda seu cdigo com As Dez Principais Dicas De Segurana Que Todo Desenvolvedor Deve
Conhecer (http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnsecure/HTML/appsec.asp)
Descreve os problemas realmente importantes que voc deve tomar cuidado para no
comprometer seus dados ou seu sistema.
Cada desenvolvedor deve ser familiarizado com os seguintes conceitos de segurana Acesso
cdigo para gravar eficaz aplicativos selecionando o Common Language Runtime:
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.
Permisses
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.
Observe que usurio irrestrita e nveis empresa no resultem em Irrestrito sendo concedidas a um
conjunto. Nvel do computador define vrias restries, e todos os nveis trs so considerados
como um todo, como a conceder permisso resultante permisses no irrestritas. Para obter
mais informaes, consulte Modelo de diretiva de segurana.
Grupos de cdigos contm uma condio de membro, definir uma permisso associao, e
atributos grupo cdigo. A evidncia que apresenta um conjunto para o Runtime comparado com
a condio de membro que voc especificar para um grupo de cdigos. Se um conjunto fornece
prova que corresponda a condio de membro, ele ser permitido entrada para o grupo de cdigo.
Os administradores identificar, categorizar conjuntos de mdulos (assemblies) em grupos de
cdigos, especificando condies de membro, e define a esses grupos cdigo permisso
atribuio. Opcionalmente, atributos grupo cdigo pode ser usado para especificar que nenhum
nvel de diretiva abaixo do nvel atual deve ser considerada ou que nenhum cdigo grupo exceto a
verso atual deve ser considerada ao atribuir permisso.
Os seguintes tipos de prova interna podem ser usados como condies de membro:
Voc pode reduzir ou aumentar as permisses a conjuntos de mdulos (assemblies) com base em
qualquer combinao dessas condies de membro. Porque condies de membro personalizada
pode ser criado, a lista anterior no representa cada possibilidade. Para obter mais informaes,
consulte Prova.
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 Use este assistente para identificar um aplicativo pelas informaes Editor
aplicativo ou nome forte e Aumentar nvel do aplicativo de confiana.
Ajustar Use este assistente para aumentar ou diminuir permisses a conjuntos de
configuraes de mdulos (assemblies) proveniente de uma das seguintes zonas: Meu
segurana computador, intranet local, Internet, sites confiveis e sites no confiveis.
Criar um pacote de Use este assistente para criar um pacote Windows Installer para implantar a
implantao diretiva de segurana em uma empresa.
Para obter mais informaes sobre usando os assistentes, consulte o Ferramenta .NET
Framework Configuration (Mscorcfg.msc).
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.
Para fazer isso, aplicando ou Exclusive atributo a um grupo de cdigo, usando um das
ferramentas de diretiva de segurana. o LevelFinal
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.
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.
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.
Se voc estiver administrando um diretiva que afeta todos os usurios em um computador
especfico, verifique as adies Diretiva no nvel da mquina.
Se voc estiver administrando uma diretiva para um determinado usurio ou grupo de
usurios, verifique as adies Diretiva no nvel do usurio.
Sistema de arquivos
Porque o Runtime avalia Diretiva corporativa primeiro, voc pode aplicar o LevelFinal atributo a
um grupo de cdigo nesse nvel para excluir os nveis inferiores de fazer alteraes de diretiva.
Sem o LevelFinal atributo, menor nveis de diretiva pode remover permisses do conjunto
concesso final, possivelmente causando instabilidade no aplicativo. No entanto, mesmo se voc
no se aplicam o LevelFinal atributo, nveis inferiores sero pde para aumentar a concesso
final definido porque todos os nveis de diretiva so intersected durante a resoluo de diretiva.
Voc pode considerar Administrar diretiva nesse nvel quando cada pessoa em sua empresa usa
um aplicativo e voc desejar para certificar-se que ele sempre receber permisso suficiente para
executar.
Voc pode considerar Administrar diretiva de segurana neste nvel nas situaes a seguir:
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.
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
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.
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.
Compilando o cdigo
Incluir uma referncia para System.Security.dll.
Incluir e System.Text Espao para nome., System.Security.Cryptography a System,
System.IO
Como Microsoft Internet Explorer pode atuar como um host para controles gerenciados e
componentes, suas configuraes de segurana afetam execuo gerenciado. O controle
gerenciado pode executar no Internet Explorer, a menos controles ActiveX e scripts so ativados
no.
Exemplo
C#
//The request is placed at the assembly level. using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestMinimum, Unrestricted = true)] namespace
MyNamespace { using System; using System.Security; //The hypothetical class log is in this namespace.
using LogNameSpace; public class MyClass { public MyClass() { } public static void Main(string[] args) {
//Put any code that requires optional permissions in the try block. try { Log MyLog = new Log();
MyLog.MakeLog(); Console.WriteLine("The Log has been created."); } //Catch the security exception and
inform the user that the //application was not granted FileIOPermission. catch(SecurityException) {
Console.WriteLine("This application does not have permission to write to the disk."); } } } }
O cdigo anterior cria o arquivo de log e exibir a seguinte mensagem para o console se ele tiver
permisses suficientes:
2. Criar uma nova instncia da classe GenericPrincipal e inicializar-lo com o objeto criado
GenericIdentity anteriormente e uma matriz de seqncias de caracteres que representam
as funes que voc deseja associado a este objeto. O exemplo de cdigo a seguir
especifica uma matriz de seqncias de caracteres que representam uma funo
Administrador e uma funo do usurio. O GenericPrincipal depois est inicializado com o
anterior GenericIdentity e a matriz de seqncia.
C#
String[] MyStringArray = {"Manager", "Teller"}; GenericPrincipal MyPrincipal = new
GenericPrincipal(MyIdentity, MyStringArray);
3. Use o cdigo a seguir para conectar o objeto para o segmento atual. Isso importante em
situaes onde o principal deve ser validado vrias vezes, ele deve ser validado pelo outros
cdigo em execuo em seu aplicativo, ou ele deve ser validado por um
PrincipalPermission objeto. Ainda poder realizar validao baseada em funo no objeto
principal sem anex-los para o segmento. Para obter mais informaes, consulte Substituir
um objeto principal.
C#
Thread.CurrentPrincipal = MyPrincipal;
Exemplo
C#
using System; using System.Security.Principal; using System.Threading; public class Class1 { public static int
Main(string[] args) { // Create generic identity. GenericIdentity MyIdentity = new
GenericIdentity("MyIdentity"); // Create generic principal. String[] MyStringArray = {"Manager", "Teller"};
GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyStringArray); // Attach the principal
to the current thread. // This is not required unless repeated validation must occur, // other code in your
application must validate, or the // PrincipalPermisson object is used. Thread.CurrentPrincipal =
MyPrincipal; // Print values to the console. String Name = MyPrincipal.Identity.Name; bool Auth =
MyPrincipal.Identity.IsAuthenticated; bool IsInRole = MyPrincipal.IsInRole("Manager");
Console.WriteLine("The Name is: {0}", Name); Console.WriteLine("The IsAuthenticated is: {0}", Auth);
Console.WriteLine("Is this a Manager? {0}", IsInRole); return 0; } }
Se cdigo repetidamente deve executar validao baseada em funo, o primeiro dos seguintes
procedimentos produz menos sobrecarga. Quando cdigo precisa para fazer validaes baseada
em funo apenas uma vez, voc pode criar um WindowsPrincipal objeto, usando o segundo
dos procedimentos a seguir.
3. Quando o objeto principal foi criada, pode usar um dos vrios mtodos para validar-lo.
Para obter mais informaes, consulte Verificaes de segurana baseada em funo.
Para uma demanda imprescindvel, voc pode chamar o Demand mtodo do objeto
PrincipalPermission para determinar se o objeto principal atual representa a identidade
especificado, funo, ou ambos. Supondo que um objeto corretamente construdo
C#
MyPrincipalPermission.Demand();
Exemplo
O exemplo de cdigo a seguir usa uma verificao imprescindvel para garantir que um
GenericPrincipal Correspondncias o PrincipalPermission objeto. Uma verificao
imprescindvel til quando vrios mtodos ou outros conjuntos de mdulos no domnio do
aplicativo deve fazer determinations baseada em funo. Enquanto este exemplo extremamente
simples, ele ilustra o comportamento associado a uma demanda baseada em funo.
C#
using System; using System.Security.Permissions; using System.Security.Principal; using System.Security;
using System.Threading; using System.Security.Cryptography; public class MainClass { public static int
Main(string[] args) { Console.WriteLine("Enter '1' to use the proper identity or " + "any other character to
use the improper identity."); if(Console.ReadLine() == "1") { // Create a generic identity. GenericIdentity
MyIdentity = new GenericIdentity("MyUser"); // Create a generic principal. String[] MyString =
{"Administrator", "User"}; GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyString);
Thread.CurrentPrincipal = MyPrincipal; } PrivateInfo(); return 0; } public static void PrivateInfo() { try { //
Create a PrincipalPermission object. PrincipalPermission MyPermission = new
PrincipalPermission("MyUser", "Administrator"); // Demand this permission. MyPermission.Demand(); //
Print secret data. Console.WriteLine( "\n\nYou have access to the private data!"); } catch(SecurityException
e) { Console.WriteLine(e.Message); } } }
Se voc estiver preocupado com que seu cdigo pode ser usado para acessar recursos do
sistema de forma mal-intencionada, voc pode solicitar que ele nunca ser concedida uma
permisso especfica. Por exemplo, um aplicativo que navega dados em um arquivo mas nunca
modifica os dados podem recusar quaisquer permisses de gravao arquivo. No caso de um erro
ou um ataque malicioso, esse cdigo no pode danificar os dados no qual ele funciona.
Permite que RequestRefuse um grande conjunto de permisses para ser solicitado como
opcional permisses, garantindo determinadas permisses especficas que no esto na
concesso.
Exemplo
C#
O exemplo anterior no recebeu permisso para criar o arquivo e gera uma exceo de
segurana. A instruo catch intercepta a exceo e o aplicativo exibe a mensagem a seguir para
o console:
Voc pode facilmente solicitar permisses pela aplicao Atributos que representam as
permisses que voc deseja solicitao para o nvel Conjunto de seu cdigo. Voc usar os
atributos podem variar, dependendo as permisses que voc est solicitando. Solicitaes so
compilado no e avaliadas pelo tempo de execuo quando seu cdigo carregado na memria
durante a execuo. do seu aplicativo manifesto de conjunto de mdulos (assembly) o
Metadados
O exemplo a seguir mostra como solicitar permisso para acessar cdigo no gerenciado.
Observe que ele usa um SecurityPermissionAttribute. e especifica dois valores), e um sinalizador
que indica qual permisso est sendo solicitado um SecurityAction valor que especifica o tipo de
solicitao de permisso est sendo feita, no caso: (RequestMinimum Nesse caso,
SecurityPermissionFlag.UnmanagedCode especifica uma solicitao de permisso de cdigo no
gerenciada. A assembly: sintaxe informa o compilador que o atributo est sendo aplicada no nvel
do conjunto.
Exemplo
C#
//The request is placed at the assembly level. using System.Security.Permissions;
[assembly:SecurityPermissionAttribute(SecurityAction.RequestMinimum, Flags =
SecurityPermissionFlag.UnmanagedCode)] namespace MyNamespace { using System; using
System.Runtime.InteropServices; public class MyClass { public MyClass() { } public void MyMethod() {
//Perform interoperation with unmanaged code here. } } }
Exemplo
C#
//The attribute is placed at the assembly level. using System.Security.Permissions;
[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")] namespace
MyNamespace { using System; using System.Runtime.InteropServices; public class MyClass { public
MyClass() { } public void MyMethod() { //Perform operations that require permissions here. } } }
Exemplo
C#
//The request is placed at the assembly level. using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestOptional, Unrestricted = true)] namespace
MyNamespace { using System; using System.Security; //The hypothetical class log is in this namespace.
using LogNameSpace; public class MyClass { public MyClass() { } public static void Main(string[] args) {
//Put any code that requires optional permissions in the try block. try { Log MyLog = new Log();
MyLog.MakeLog(); Console.WriteLine("The Log has been created."); } //Catch the security exception and
inform the user that the //application was not granted FileIOPermission. catch(SecurityException) {
Console.WriteLine("This application does not have permission to write to the disk."); } } } }
O cdigo anterior cria o arquivo de log e exibir a seguinte mensagem para o console se ele tiver
permisses suficientes:
Assimtrica chaves particulares nunca devem ser armazenadas verbatim ou em texto sem
formatao para o computador local. Se voc precisar armazenar uma chave particular, voc
deve usar um continer de chave Para obter mais informaes sobre recipientes chave, consulte a
seo CryptoAPI na documentao do Platform SDK em http://msdn.microsoft.com.
O exemplo a seguir demonstra como criar uma chave assimtrica, salv-lo em um continer de
chave, recuperar a chave em uma hora posterior e excluir a chave do continer.
C#
using System; using System.IO; using System.Security.Cryptography; public class StoreKey { public static
void Main() { try { // Create a key and save it in a container. GenKey_SaveInContainer("MyKeyContainer");
// Retrieve the key from the container. GetKeyFromContainer("MyKeyContainer"); // Delete the key from
the container. DeleteKeyFromContainer("MyKeyContainer"); // Create a key and save it in a container.
GenKey_SaveInContainer("MyKeyContainer"); // Delete the key from the container.
DeleteKeyFromContainer("MyKeyContainer"); } catch(CryptographicException e) {
Console.WriteLine(e.Message); } } public static void GenKey_SaveInContainer(string ContainerName) { //
Create the CspParameters object and set the key container // name used to store the RSA key pair.
Sada
Key added to container: <RSAKeyValue> Key Information A</RSAKeyValue> Key retrieved from
container : <RSAKeyValue> Key Information A</RSAKeyValue> Key deleted. Key added to container:
<RSAKeyValue> Key Information B</RSAKeyValue> Key deleted.
Um conjunto que implementa uma permisso personalizada, ou implementa qualquer outro objeto
de segurana personalizado que no est includo no .NET Framework, deve ser adicionado
lista do conjunto totalmente confivel. Voc pode fazer isso usando o Ferramenta Diretiva de
segurana para acesso de cdigo (Caspol.exe). No uma lista separada para cada nvel de
diretiva. A lista do conjunto totalmente confivel concede seus membros para o nvel de diretiva
relacionadas confiana total. Isso necessrio para manter o Runtime de executar resolues da
diretiva circular.
Para adicionar um conjunto que implementa um objeto de segurana personalizados para a lista
do conjunto totalmente confivel
1. Antes de adicionar um conjunto a diretiva de segurana, voc deve dar-lhe um nome de
alta segurana e coloc-lo no cache de conjunto global Para obter mais informaes sobre
como trabalhar com conjuntos e o cache de conjunto de mdulos global, consulte Criando e
usando conjuntos Named STRONG-.
2. Digite o seguinte comando no prompt de comando:
[caspol -enterprise | -user | -machine] addfulltrust AssemblyFile
Especificar a opo Nvel diretiva antes da addfulltrust opo.Se voc omitir a opo
Nvel de diretiva, listas Caspol.exe a permisso define como o nvel de diretiva padro. Para
administradores de computadores, o nvel padro o nvel de diretiva da mquina; para
outros, ele o nvel de diretiva de usurio.
O comando a seguir adiciona MyCustomPermissionSet.exe lista o nvel de diretiva de
usurio na montagem totalmente confivel.
caspol user addfulltrust MyCustomPermissionSet.exe
Adicionar um conjunto a uma lista do conjunto totalmente confivel no no garante que ele ir
receber confiana total pelo sistema da diretiva como um todo, mas apenas que ele ir receber
confiana total no nvel de diretiva onde ele estiver listado. Por exemplo, se voc incluir o conjunto
MyCustomPermission.exe para o nvel de diretiva de usurio totalmente confivel Lista do
conjunto, mas MyCustomPermission.exe recebe direitos de execuo apenas de diretiva da
mquina, MyCustomPermission.exe eventualmente seria concedida apenas direitos de execuo.
Portanto, importante lembrar que colocar um conjunto na lista do conjunto totalmente confivel
somente ajuda evite criar resolues da diretiva circular para o nvel de diretiva onde ele estiver
listado. Isso no garante que o conjunto realmente implementar a permisso personalizada recebe
uma concesso confiana total.
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) voc pode usar para
exibir uma lista simples de grupos de cdigo pertencentes a um nvel de diretiva, ou uma lista que
inclui os nomes e descries dos grupos de cdigo.
Use a ferramenta .NET Framework Configuration (Mscorcfg.msc) para modificar uma permisso
em um conjunto de permisso.
Observao
Use a ferramenta .NET Framework Configuration (Mscorcfg.msc) para adicionar uma permisso a
um conjunto de permisso.
Observao
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) sempre que voc usa
uma opo que altera a diretiva de segurana, avisa sobre a alterao de diretiva especfico que
est prestes a ocorrer. Se voc estiver familiarizado com Caspol.exe e considere desses avisos
desnecessrios, voc pode desativ-los.
Antes como desativar este recurso, considere que geralmente muito mais fceis de serem
confirmar uma alterao de diretiva. antes que ele para corrigir a diretiva posteriormente
Voc pode usar a ferramenta .NET Framework Configuration (Mscorcfg.msc) para alterar
condies de membro em relao a grupos de cdigos.
Configuraes de segurana indesejado se algumas vezes, aplicam a um conjunto porque ele por
engano pertence ou no pertence a algum grupo de cdigos. Esses efeitos colaterais pode
ocorrer quando os grupos de cdigos so adicionadas ou excludas de nveis de diretiva. Do
Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) para facilitar ainda mais a
localizar esses problemas no cdigo os nveis de diretiva ' hierarquias de grupo, voc pode usar
para listar todos os grupos de cdigo pertence a um conjunto.
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) voc pode usar para
administrar uma diretiva de usurio para um usurio que no seja o usurio atual.
Para administrar diretiva de usurio para um usurio que no seja o usurio atual
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
Para listar ou resolver toda a diretiva nveis para um usurio que no seja o usurio atual
Voc pode usar a ferramenta .NET Framework Configuration (Mscorcfg.msc) para alterar os
conjuntos de permisses associados a um grupo de cdigos.
Voc pode usar para solucionar problemas que podem causar um conjunto para no executar ou
para acessar recursos protegidos ou executado quando no deveria. o Ferramenta Diretiva de
segurana para acesso de cdigo (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.
Observao
Um aplicativo talvez precise controlar o acesso a um recurso em uma maneira atravs de que no
haja suporte pelas permisses fornecidos com o SDK do .NET Framework. Por exemplo, um
aplicativo pode usar os registros de pessoal onde cada registro de funcionrio armazenado em
um arquivo separado;, nesse caso, acesso Leitura e Gravao deve ser controlado
independentemente em diferentes tipos de dados Funcionrios. O desenvolvedor de aplicativos
deve fornecer uma classe de permisso que permite que o aplicativo para que esse nvel de
detalhes de acesso para um arquivo.
Exemplo
O exemplo a seguir mostra como as informaes para uma permisso podem exibidas no arquivo
XML.
O <IPermission> elemento, class atributo, e version Atributo so presente para cada permisso
no arquivo XML. O class atributo aponta para a classe e conjunto que implementam a permisso
personalizada. A seqncia valor para este atributo pode estar em qualquer formato discutido no
Especificando tipo nomes totalmente qualificados, mas ser provavelmente estar no formato
mostrado no exemplo.
A <IPermission> marca pode conter outros atributos ou elementos filho definidos pelo
desenvolvedor que descrevem o estado da permisso. No exemplo anterior, o Unrestricted
atributo definido pela classe CustomPermission.
Cuidado
Antes de adicionar a permisso a diretiva de segurana, voc talvez precise alterar o arquivo XML
para que o estado da permisso atenda s suas necessidades. Consulte a documentao do
aplicativo para saber sobre os atributos especficos para a permisso e como alterar seu estado.
Cada grupo de cdigo que est associado ao conjunto de permisses modificado conceder a
nova permisso para cdigo que um membro do grupo do cdigo. Para saber como adicionar
uma permisso personalizada a um conjunto de permisses, consulte Configurar conjuntos de
permisses usando a ferramenta Configurao .NET Framework.
Ocasionalmente, talvez seja necessrio para redefinir uma diretiva de segurana para os padres
aps algumas alteraes da diretiva criar efeitos colaterais indesejveis. A diretiva de segurana
padro fornece segurana adequada para seu computador em maioria das situaes.
Observao
Voc pode desfazer a redefinio usando a recover opo se nenhuma alterao de diretiva
forem feitas aps a reset chamada.
When you use the Code Access Security Policy tool (Caspol.exe) to add a code group to a code
group hierarchy, you must define both a membership condition and a permission set for the new
code group. You must also define the label or name of the parent code group in which you are
adding the new code group. Optionally, you can also set other flags on the code group. For more
information about these flags, see Code Access Security Policy Tool (Caspol.exe).
Observao
You cannot use the addgroup option to add a code group to more than one level at a time. Each
such addition must be made separately because different code group labels and the availability of
certain permission sets can cause confusion.
The following procedures describe how to perform some of the most common code group addition
tasks.
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
Use the pub option, and specify a certificate file, a signed file, or the hexadecimal
representation of an X.509 certificate.
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.
caspol addgroup 1 site www.microsoft.com Intranet
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
Use the custom option, and specify an XML file that contains the XML serialization of the
custom membership condition.
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.
Cuidado
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.
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.
Exemplo
<configuration> <runtime> <gcConcurrent enabled="false"/> </runtime> </configuration>
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>
Para saber como especificar uma base de cdigo, consulte Especificar local um conjunto na.
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para adicionar o conjunto da diretiva do
editor a cache de conjunto global.
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) voc pode usar para
remover grupos de cdigos das hierarquias de grupo de cdigo. Quando voc exclui um grupo de
cdigo que tenha grupos de cdigos filho, voc tambm excluir os grupos de cdigos filho. Voc
no pode copiar parte de uma hierarquia de grupo de cdigo para outra parte do grupo de cdigos
ou para outra hierarquia de grupo de cdigo. Portanto, a excluso de um grupo de cdigo pai
destri qualquer comportamento de segurana que foi definido na sua hierarquia filho.
Cuidado
Como ele altamente pode afetar a segurana, tome cuidado extremos quando voc exclui grupos
de cdigos.
Exemplo
<configuration> <system.runtime.remoting> <application> </application> <channels> <channel
id="MyChannel" type="MyChannel,MyChannelAssembly" > <clientProviders> <formatter ref="soap">
</formatter> <provider type="Channels.AuthenticationSink,MyChannels" /> </clientProviders>
</channel> </channels> </system.runtime.remoting> </configuration>
Voc pode alterar o contedo de uma permisso especfica definida por importar um novo arquivo
XML que contm um conjunto de permisses que substitui o conjunto de permisses original. O
conjunto de permisses somente mutveis fornecido pelo SDK do .NET Framework o
Everything conjunto de permisso. Do Ferramenta Diretiva de segurana para acesso de cdigo
Observao
Use a ferramenta .NET Framework Configuration (Mscorcfg.msc) para criar uma permisso
definido para uma determinada nvel e associ-lo a um grupo de cdigos nova ou existente.
Observao
Colocar um conjunto na lista do conjunto totalmente confivel fornece confiana total ao conjunto
somente no nvel. Se o conjunto no estiver na lista de confiana total em todos os outros nveis, o
conjunto no ter confiana total mas sim a interseo da qual concedido por aqueles outros
nveis.
O arquivo XML pode conter um conjunto de permisso (com ou sem uma permisso
personalizada) que contm as permisses do aplicativo precisa ser executado. Voc pode
importar a permisso definir em Diretiva de segurana usando o Ferramenta Configurao
estrutura .NET (Mscorcfg.msc) ou usando o Ferramenta Code Access Security Policy
(Caspol.exe).
Cuidado
Antes de adicionar permisso definida como diretiva de segurana, voc talvez precise alterar o
arquivo XML para que o estado das permisses atenda s suas necessidades. Consulte a
documentao do aplicativo para saber sobre os atributos especficos para a permisso e como
alterar seu estado.
Os Ferramenta Code Access Security Policy (Caspol.exe) ships com o .NET Framework SDK e
oferece suporte script para alterar a diretiva de segurana. Voc pode usar Caspol.exe para
adicionar novos conjuntos de permisses, mas no para modificar permisso conjuntos. Se o
arquivo XML tiver somente uma permisso um conjunto de permisses e voc no desejar
adicionar a permisso usando Caspol.exe, voc deve coloc a permisso entre um conjunto de
permisses.
Os desenvolvedores podem desejar certificar-se que um conjunto compartilhado que est criando
funciona corretamente com vrios aplicativos. Em vez de continuamente colocar o conjunto no
cache de conjunto global durante o ciclo de desenvolvimento, o desenvolvedor pode criar uma
varivel de ambiente DEVPATH que aponta para o diretrio de sada da compilao para o
conjunto.
O conjunto compartilhado deve ser localizvel pelo tempo de execuo. Para especificar uma
pasta particular para resolver conjunto referncias usam o <codeBase> Element ou
<probing> Element Em uma configurao arquivo, conforme descrito em Especificar local um
conjunto na. Voc tambm pode colocar o conjunto em um subdiretrio do diretrio do aplicativo.
Para obter mais informaes, consulte Como o tempo de execuo localiza conjuntos de mdulos
(assemblies).
Observao
O exemplo a seguir mostra como para fazer com que o tempo de execuo para procurar por
conjuntos em diretrios especificados pela varivel do ambiente DEVPATH.
Exemplo
<configuration> <runtime> <developmentMode developerInstallation="true"/> </runtime>
</configuration>
Observao
COMO: Registrar um Objeto Ativado pelo Servidor e um Objeto Ativado pelo Cliente para um
Domnio de Aplicativo de Host
Exemplo
<configuration> <system.runtime.remoting> <application> <service> <wellknown mode = "SingleCall" type
= "myType,myAssembly" objectUri = "myType.soap" /> <activated type="MyActivatedType, TypeAssembly"
/> </service> </application> </system.runtime.remoting> </configuration>
Do Ferramenta Diretiva de segurana para acesso de cdigo (Caspol.exe) voc pode usar para
exibir a diretiva de segurana (hieraquia de grupo de cdigo) e uma lista de conjuntos de
permisses conhecidos para todos os nveis de diretiva ou para um nvel nico diretiva.
Ter Grupos de cdigos um nmero de referncia e, opcionalmente, um nome. Voc pode usar um
para se referir a grupos de cdigos especficos.
Aps a hierarquia de grupo de cdigo uma lista dos conjuntos nomeados de permisso
conhecido em que nvel de diretiva e uma lista de conjuntos confiana total, tambm conhecidos
como conjuntos de diretiva.
Voc pode usar para adicionar permisso define como um grupo de cdigos. o Ferramenta
Diretiva de segurana para acesso de cdigo (Caspol.exe) Antes voc pode associar uma
permisso nomeada definido com um grupo de cdigos, ele deve ser conhecido no nvel de
diretiva do grupo de cdigo. Antes que voc possa adicionar permisso definida com nvel de
diretiva do grupo de cdigo, voc deve cri-lo como um arquivo XML.
Use a chggroup opo de para alterar o nome, condio de membro, conjunto de permisses,
sinalizadores, ou a descrio de um grupo de cdigos. o Ferramenta Diretiva de segurana para
acesso de cdigo (Caspol.exe)Voc pode alterar um, alguns, ou todos os esses atributos de grupo
de cdigo
O comando a seguir associa permisso Internet definido com o grupo 1.3. de cdigos e desliga
o -exclusive Sinalizador.
caspol chggroup 1.3. Internet exclusive off
Cuidado
Alterar um grupo de cdigos pode ter largura repercusses para segurana. Use esta opo com
cuidado.
O exemplo a seguir, mostra como para criar com um nome que diferente de " http " e utiliz-la
de um aplicativo do servidor. um HttpChannel
Exemplo
<configuration> <system.runtime.remoting> <application> <service> <wellknown type="Type,Assembly"
mode="Singleton" objectUri="endpoint" /> </service> <channels> <channel ref="OtherChannel"/>
</channel> </application> <channels> <channel id="OtherChannel" type="CompleteTypeInformation
including versiong and strong-name information" /> </channels> </system.runtime.remoting>
</configuration>
Consulte tambm
Voc pode usar para Ativar segurana e a. o Ferramenta Diretiva de segurana para acesso de
cdigo (Caspol.exe) Quando a segurana de acesso ao cdigo desativada, todas as demandas
de acesso ao cdigo xito. Desativar a segurana de acesso ao cdigo torna o sistema vulnervel
a ataques por cdigo mal-intencionado, como vrus e worms. A desativao de segurana obtm
alguns desempenho extra mas s deve ser feito quando outras medidas de segurana ter sido
seguidas para ajudar a proteger exemplos de segurana do sistema. Exemplos de outras
precaues de segurana incluem desconectando de redes pblicas, fisicamente proteger
computadores, e assim por diante.
Use a ferramenta .NET Framework Configuration (Mscorcfg.msc) para remover uma permisso de
um conjunto de permisso.
Observao
Tarefas de diretiva de
segurana Descrio
Novo Criar um novo arquivo de diretiva. Use esta opo para criar e implantar
novos arquivos de nvel de diretiva sem afetar a diretiva no computador
atual.
Abrir Abra um nvel de diretiva. Use esta opo para abrir arquivos criados
usando a New opo de diretiva.
Redefinir tudo Redefinir todos os nveis de diretiva para o padro.
Ajustar Segurana Ajuste o nvel de segurana para cada zona.
Avaliar Conjunto de Exibir as permisses concedidas a um conjunto ou os grupos de
Mdulos (Assembly) cdigos que conceder permisses a um conjunto.
Confiar assembly Atribuir um nvel de confiana a um conjunto.
Criar um pacote de Criar e implantar a diretiva de segurana em uma rede.
implantao
Exemplo do cdigo
3. Definir uma classe do operador CRM que deriva da classe ServicedComponent. Por
exemplo, o cdigo a seguir mostra uma classe CRMWorker que deriva diretamente de
ServicedComponent.
C#
[Transaction] public class CRMWorker:ServicedComponent { }
4. Implementar um mtodo pblico que cria um objeto Clerk e confirma ou anula a transao.
O mtodo deve atualizar o log do CRM usando o objeto Clerk. Por exemplo, o cdigo a
seguir mostra um mtodo CRMMethod que atualiza o log do CRM e confirma ou anula a
transao.
C#
public void CRMMethod(string fileName, bool bCommit) { // Create clerk object. Clerk clerk = new
Clerk(typeof(CRMCompensator), "CRMCompensator", CompensatorOptions.AllPhases);
clerk.WriteLogRecord(fileName); clerk.ForceLog(); if (bCommit) ContextUtil.SetComplete(); else
ContextUtil.SetAbort(); }
Observao
Voc deve aplicar o JustInTimeActivation atributo para o compensador; caso contrrio anular
chamado duas vezes.
2. Definir uma classe e implementar o mtodo principal para criar uma instncia da
classe do operador CRM, e chamar esse mtodo que cria o objeto Clerk CRM.
Por exemplo, o cdigo a seguir cria um objeto do tipo CRMWorker e chama o
mtodo CRMMethod para criar o objeto Clerk CRM.
C#
class CRM { public static int Main() { string logfilename = "crm.log";
Console.WriteLine("Creating a managed CRM worker object..."); CRMWorker crmworker
= new CRMWorker(); Console.WriteLine("Demonstrating a worker commit...");
crmworker.CRMMethod(logfilename, true); Console.WriteLine("Demonstrating a worker
Exemplo
C#
using System; using System.IO; using System.Reflection; using System.EnterpriseServices; using
System.EnterpriseServices.CompensatingResourceManager; [assembly:
ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationCrmEnabled] [assembly:
AssemblyKeyFile("crm.key")] namespace CrmServer { [Transaction] // Create a Worker class. public class
CRMWorker:ServicedComponent { public void CRMMethod(string fileName, bool bCommit) { // Create
clerk object. Clerk clerk = new Clerk(typeof(CRMCompensator), "CRMCompensator",
CompensatorOptions.AllPhases); clerk.WriteLogRecord(fileName); clerk.ForceLog(); if (bCommit)
ContextUtil.SetComplete(); else ContextUtil.SetAbort(); } } // Create class derived from Compensator class.
[JustInTimeActivation] public class CRMCompensator:Compensator { bool bBeginPrepareCalled = false;
bool bPrepareRecordCalled = false; bool bBeginCommitCalled = false; bool bCommitRecordCalled = false;
bool bBeginAbortCalled = false; bool bAbortRecordCalled = false; String _fileName; public override void
BeginPrepare() { bBeginPrepareCalled = true; } public override bool PrepareRecord(LogRecord rec) { Object
o = rec.Record; _fileName = o.ToString(); bPrepareRecordCalled = true; return false; } public override bool
EndPrepare() { if (!bBeginPrepareCalled) {return false;} if (!bPrepareRecordCalled) {return false;} if
(_fileName==null) {return false;} // This is a Prepare Phase success. return true; } public override void
BeginCommit(bool fRecovery) { bBeginCommitCalled = true; } public override bool
CommitRecord(LogRecord rec) { bCommitRecordCalled = true; return true; } public override void
EndCommit() { if (!bBeginCommitCalled) {return;} if (!bCommitRecordCalled) {return;} if
(_fileName==null) {return;} // This is a Commit Phase success. } public override void BeginAbort(bool
fRecovery) { bBeginAbortCalled = true; } public override bool AbortRecord(LogRecord rec) {
bAbortRecordCalled = true; Object o = rec.Record; _fileName = o.ToString(); return true; } public override
void EndAbort() { if (!bBeginAbortCalled) {return;} if (!bAbortRecordCalled) {return;} if (_fileName==null)
{return;} // This is an Abort Phase success. } } }
2. Aplicar atributos para indicar como cada conjunto, classe, ou mtodo deve interagir com
funcionalidade com +.
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. }
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
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); } }
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() {} }
Este exemplo mostra como usar o esttico SetComplete e SetAbort mtodos da classe
System.EnterpriseServices.ContextUtil. Para obter mais informaes sobre esses mtodos,
consulte Votao em uma transao automticas.
Exemplo
C#
//Try to do something crucial to the transaction in progress. if( !DoSomeWork() ) { ContextUtil.SetAbort();
//Something goes wrong. } else { ContextUtil.SetComplete(); //All goes well. }
Compilando o cdigo
Exemplo
C#
using System.EnterpriseServices; [ assembly: ApplicationName("BankComponent")] [ assembly:
ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")] public class Account : ServicedComponent {
static void Main() {} }
Compilando o cdigo
Para criar um objeto agrupado e definir seu tamanho e tempo limite limita
1. Definir uma classe que deriva da classe System.EnterpriseServices.ServicedComponent, e
aplique o ObjectPoolingAttribute atributo classe. Por exemplo, o cdigo a seguir define
uma classe denominada TestObjectPooling e define e CreationTimeout propriedades para a
classe. o MinPoolSize, MaxPoolSize
C#
Exemplo
C#
[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeout=20000)] public class
TestObjectPooling : ServicedComponent { public void Perform () { // Method contents go here. } protected
override void Activate() { // Called when removed from the pool. } protected override void Deactivate() { //
Called before deactivating or placing back in pool. } protected override bool CanBePooled() { // Called after
Deactivate. Indicate your vote here. return true; } }
O procedimento a seguir descreve como criar um mtodo de servio da Web que usa transaes
automticas. Se ocorrer uma exceo enquanto um mtodo de servio da Web est participando
em uma transao, ASP.NET anula automaticamente a transao. Da mesma forma, se nenhuma
exceo ocorrer, a transao confirmada automaticamente.
2. Definir uma classe que deriva da classe WebService. Por exemplo, o cdigo a seguir
define uma classe denominado Pedidos que deriva da classe WebService.
C#
public class Orders : WebService { }
3. Para cada mtodo Web que deve participar automaticamente de uma transao, aplicar o
WebMethodAttribute atributo, e definir a opo da transao. Por exemplo, no cdigo a
seguir o atributo WebMethod aplicado para o DeleteAuthor mtodo, e a TransactionOption
propriedade definida como TransactionOption.RequiresNew.
Exemplo
C#
<%@ WebService Language="C#" Class="Orders" %> <%@ assembly name="System.EnterpriseServices"
%> using System; using System.Data; using System.Data.SqlClient; using System.Web.Services; using
System.Web.Util; using System.EnterpriseServices; public class Orders : WebService { [
WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int DeleteAuthor(string
lastName) { String deleteCmd = "DELETE FROM authors2 where au_lname='" + lastName + "'" ;
SqlConnection sqlConn = new SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver");
SqlCommand myCommand = new SqlCommand(deleteCmd,sqlConn); // If a Web service method is
participating in a transaction and an // exception occurs, ASP.NET automatically aborts the transaction. //
Likewise, if no exception occurs, then the transaction is // automatically committed.
myCommand.Connection.Open(); return myCommand.ExecuteNonQuery(); } }
Este exemplo mostra como definir a propriedade SoapVRoot " MyVRoot ".
Exemplo
C#
[ApplicationActivation(ActivationOption.Library, SoapVRoot="MyVRoot")]
Compilando o cdigo
Exemplo
C#
[Transaction(TransactionOption.Required, Isolation=TransactionIsolationLevel.Serializable, Timeout=10)]
Compilando o cdigo
Este exemplo mostra como para fornecer o nome do aplicativo, usando o conjunto - atributo
ApplicationName.
Compilando o cdigo
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Exemplo do cdigo
2. Crie duas classes que derivar da classe definida na etapa 1 e defina o atributo de
transaes para ambas as classes. Por exemplo, o cdigo a seguir declara duas classes
CTransaction1 e CTransaction2 derivar de classe Base, e tm seu conjunto de atributos de
transaes.
C#
[Transaction] public class CTransaction1 : Base { // Insert your transaction logic here. }
[Transaction] public class CTransaction2 : Base { // Insert your transaction logic here. }
3. Criar um aplicativo do cliente que usa as classes criadas na etapa 2 para testar o recurso
BYOT.
1. Criar uma instncia de uma das classes definidas na etapa 2. Por exemplo, o
cdigo a seguir cria uma instncia da classe CTransaction1.
C#
class BYOTDemonstration { static void Main() { CTransaction1 tx1 = new CTransaction1(); } }
2. Recuperar a transao COM + DTC atual do objeto criado no 3.a etapa. Por
exemplo, o cdigo a seguir recupera o objeto transaes a partir da propriedade
Transaction pblica da classe CTransaction1.
C#
Exemplo
C#
using System; using System.Reflection; using System.EnterpriseServices; [assembly:
AssemblyKeyFileAttribute("byotdemo.snk")] public class Base : ServicedComponent { public Object
Transaction { get { return ContextUtil.Transaction; } } } [Transaction] public class CTransaction1 : Base { //
Insert your transaction logic here. } [Transaction] public class CTransaction2 : Base { // Insert your
transaction logic here. } class BYOTDemonstration { static void Main() { /* Create a transactional object, and
then get its transaction. */ CTransaction1 tx1 = new CTransaction1(); Console.WriteLine("Created
transaction1."); Object tx = tx1.Transaction; Console.WriteLine("Got the transaction of transaction1.");
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Console.WriteLine("Created transaction2 using the transaction of transaction1."); } }
Exemplo
C#
[PrivateComponent] public class CPrivate : ServicedComponent
Compilando o cdigo
Este exemplo mostra como definir o tipo de ativao para " Servidor ".
Exemplo
C#
using System.EnterpriseServices; [ assembly: ApplicationActivation(ActivationOption.Server)] public class
Account : ServicedComponent { static void Main() {} }
Compilando o cdigo
Exemplo
C#
[Synchronization] public class TestSync : ServicedComponent
Compilando o cdigo
O procedimento a seguir descreve como preparar uma classe para participar de uma transao
automtica.
Este exemplo mostra como habilitar ativao JIT e desativao e de uma classe.
Exemplo
C#
[JustInTimeActivation] public class TestJITObjectPooling : ServicedComponent
Compilando o cdigo
Exemplo
C#
[Transaction(TransactionOption.Supported)] public class Account : ServicedComponent { [AutoComplete]
public void Debit(int amount) { // Do some database work. Any exception thrown here aborts the //
transaction; otherwise, transaction commits. } }
Compilando o cdigo
Exemplo do cdigo
O servio QC COM + fornece uma maneira de uma classe componente para ser chamado
assincronamente USAR O enfileiramento de mensagens Microsoft. Para obter mais informaes
Para implementar um componente enfileirado que exibe uma mensagem de forma assncrona
1. Importar espao para nome System.EnterpriseServices.
C#
using System.EnterpriseServices;
3. Definir uma interface na fila, e aplique o InterfaceQueuing atributo interface. Por exemplo
o cdigo a seguir mostra o atributo InterfaceQueuing aplicada para a IQComponent interface
que tenha um nico mtodo DisplayMessage.
C#
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
Exemplo
C#
using System.Reflection; using System.EnterpriseServices; [assembly: ApplicationName("QCDemoSvr")]
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationQueuing(Enabled=true,
Exemplo do cdigo
O procedimento e exemplo a seguir mostram como para implementar uma classe de evento e
coletor de eventos que implementam uma interface de eventos comuns, mais um editor para
acionar um evento. Para obter mais informaes sobre como usar o modelo flexvel coupled
Eventos COM +, consulte Eventos flexvel Coupled.
Exemplo
C#
using System; using System.IO; using System.Reflection; using System.EnterpriseServices; using
System.Runtime.InteropServices; [assembly: ApplicationName("EventDemo")] [assembly:
ApplicationActivation(ActivationOption.Library)] [assembly: AssemblyKeyFile("EventDemoSvr.snk")]
namespace EventDemo { public interface ILceMsg { void EventMethod(string message); } [EventClass]
public class LceClass : ServicedComponent, ILceMsg { public void EventMethod(string message){} } public
class LceSink : ServicedComponent, ILceMsg { public void EventMethod(string message) {
MessageBox.Show(message, "Event sink"); } } }
Para configurar construo de objeto e definir a seqncia de inicializao padro para uma
classe
1. Definir uma classe que deriva direta ou indiretamente a partir da
System.EnterpriseServices.ServicedComponent classe. Por exemplo, o cdigo a seguir
mostra uma classe TestObjectConstruct que deriva diretamente da classe
System.EnterpriseServices.ServicedComponent.
C#
using System; using System.EnterpriseServices; using System.Data; using System.Data.SqlClient;
public class TestObjectConstruct : ServicedComponent { }
4. No aplicativo do cliente, criar uma instncia da classe do componente sem especificar uma
seqncia de construo, para que o padro usado. Por exemplo, o cdigo a seguir cria
Visual C# Consolidado 652
uma instncia da classe TestObjectConstruct, e a seqncia de construo padro ser
"Initial Catalog=Northwind;Data Source=.\\SQLServerInstance;Trusted_Connection=yes".
C#
public class App { public static void Main() { TestObjectConstruct order = new TestObjectConstruct();
order. ConnectToDatabase(); } }
O System.Reflection espao para nome contm vrios mtodos para obter informaes de um
conjunto de mdulos (assembly). Esta seo demonstra um dos mtodos. Para obter informaes
adicionais, consulte Viso geral de reflexo.
Exemplo
C#
using System; using System.Reflection; class Asminfo1 { public static void Main(string[] args) {
Console.WriteLine ("\nReflection.MemberInfo"); //Get the Type and MemberInfo. //Insert the fully
qualified class name inside the quotation marks in the following statement. Type MyType
=Type.GetType("System.IO.BinaryReader"); MemberInfo[] Mymemberinfoarray =
MyType.GetMembers(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Insta
nce|BindingFlags.DeclaredOnly); //Get and display the DeclaringType method. Console.Write("\nThere are
{0} documentable members in ", Mymemberinfoarray.Length); Console.Write("{0}.", MyType.FullName);
foreach (MemberInfo Mymemberinfo in Mymemberinfoarray) { Console.Write("\n" +
Mymemberinfo.Name); } } }
Um conjunto de Arquivo nico, que o tipo mais simples do conjunto, contm informaes de tipo
e implementao,, bem como o Manifesto do conjunto. Voc pode usar Compiladores de linha de
comando ou Visual Studio 2005 Para criar um conjunto de Arquivo nico. Por padro, o
compilador cria um arquivo de montagem com uma extenso.exe.
Observao
Para Visual Studio 2005 C# e Visual Basic pode ser usada somente para criar conjuntos de
Arquivo nico. Se voc deseja criar vrios arquivos conjuntos, use Compiladores de linha de
comando ou Visual Studio 2005 com as extenses Managed do C++.. ou Visual Studio 2005 Com
o Managed Extensions para C++
Os procedimentos a seguir mostram como criar conjuntos de Arquivo nico usando Compiladores
de linha de comando.
C#
csc myCode.cs
Visual Basic
vbc myCode.vb
Para criar um conjunto com uma extenso.exe e especificar o nome do arquivo de sada
C#
Um conjunto de biblioteca semelhante a uma biblioteca de classes. Ele contm tipos que sero
referenciados por outros conjuntos, mas ele tem nenhum ponto de entrada para iniciar a
execuo.
C#
Visual Basic
Um host Runtime de idioma comum cria domnios aplicativos automaticamente quando eles so
necessrios. No entanto, voc pode criar seus prprios domnios aplicativos e carreg-los esses
conjuntos que voc deseja gerenciar pessoal. Voc tambm pode criar domnios de aplicativo do
qual voc executar cdigo.
O exemplo a seguir cria um novo domnio do aplicativo, atribui o nome MyDomain, e seguida,
imprime o nome de domnio host e domnio de aplicativo filho recm-criado para o console.
Exemplo
C#
using System; using System.Reflection; class AppDomain1 { public static void Main() {
Console.WriteLine("Creating new AppDomain."); AppDomain domain =
AppDomain.CreateDomain("MyDomain"); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
}}
Procedimentos
Para exibir os nomes de conjuntos totalmente qualificados no cache de conjunto global usando a
ferramenta .NET Framework Configuration
1. Clique no Start boto, aponte para Administrative Tools, e clique em Microsoft .NET
Framework Configuration
2. Clique em Manage the Assembly Cache e, clique em View List of Assemblies in the
Assembly Cache.
Para obter informaes sobre como usar a ferramenta Global Assembly Cache para exibir os
nomes de conjuntos, totalmente qualificados Consulte Como Visualizar o Contedo da Cache
Global de Assemblies.
Para obter mais informaes sobre como definir atributos do conjunto, como verso, cultura e
nome do conjunto, consulte Definir atributos Assembly. Para obter mais informaes sobre dar um
conjunto um nome de alta segurana, consulte Criando e usando assemblies de nome forte.
Exemplo
O exemplo de cdigo a seguir mostra como exibir o nome totalmente qualificado de um conjunto
que contm uma classe especificada para o console.
C#
using System; using System.Reflection; class asmname { public static void Main() { Type t =
typeof(System.Data.DataSet); string s = t.Assembly.FullName.ToString(); Console.WriteLine("The fully
qualified assembly name containing the specified class is {0}.", s); } } Imports System Imports
System.Reflection Imports Microsoft.VisualBasic ' For a class not contained in mscorlib.dll, compile this code
with ' the /r:<dllname> option; for example,compile the code below using: ' vbc asmname.vb
/r:System.Data.dll /r:System.dll /r:System.Xml.dll ' If the class is contained in mscorlib.dll, the
/r:<dllname> compiler option is unnecessary. Class asmname Public Shared Sub Main() Dim t As Type =
GetType(System.Data.DataSet) Console.WriteLine("The fully qualified assembly name containing the
specified class is {0}.", t.Assembly.FullName.ToString()) End Sub 'Main End Class 'asmname
Observao
O exemplo a seguir cria uma instncia da classe AppDomainSetup, usa esta classe para criar um
novo domnio do aplicativo, grava as informaes ao console, e depois descarrega o domnio do
aplicativo.
Exemplo
C#
using System; using System.Reflection; class AppDomain4 { public static void Main() { // Create application
domain setup information. AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = "f:\\work\\development\\latest"; // Create the application domain.
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // Write application
domain information to the console. Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase); // Unload the
application domain. AppDomain.Unload(domain); } }
Voc pode usar para exibir informaes linguagem intermediria (MSIL) Microsoft em um arquivo.
o Disassembler MSIL (Ildasm.exe) Se o arquivo sendo examinado for um conjunto, essas
informaes podem incluir atributos do conjunto,, bem como referncias a outros mdulos e
conjuntos. Essas informaes podem ser til para determinar se um arquivo um conjunto ou
parte de um conjunto, e se o arquivo possui referncias a outros mdulos ou conjuntos.
O exemplo a seguir inicia com " Um Hello, bsico " World programa. Depois compilar o programa,
use Ildasm.exe para desmontar o conjunto Hello.exe e exibir o manifesto do conjunto.
Imports System Public Module modmain Sub Main() Console.WriteLine ("Hello World using Visual Basic!")
End Sub End Module using System; class MainApp { public static void Main() { Console.WriteLine("Hello
World using C#!"); } } #using <mscorlib.dll> using namespace System; void main() {
Console::WriteLine(L"Hello World using Managed Extensions!"); }
A tabela a seguir descreve cada diretiva no conjunto do manifesto da montagem Hello.exe usado
no exemplo.
Diretiva Descrio
.assembly extern Especifica outro conjunto que contm itens referenciados pelo mdulo
<assembly name> atual (, neste exemplo, mscorlib).
.publickeytoken <token> Especifica o smbolo da chave real da montagem referenciada.
.ver <version number> Especifica o nmero de verso da montagem referenciada.
.assembly <assembly Especifica o nome do conjunto.
name>
.hash algorithm <int32 Especifica o algoritmo hash usado.
value>
.ver <version number> Especifica o nmero de verso do conjunto.
.module <file name> Especifica o nome dos mdulos que compem o conjunto. Neste
exemplo, o conjunto consiste em apenas um arquivo.
.subsystem <value> Especifica o ambiente do aplicativo necessrio para o programa. Neste
exemplo, o valor 3 indica que este executvel executado de um
console.
corflags Atualmente um campo reservado nos metadados.
Uma referncia em tempo de compilao ocorre quando voc indicar o compilador para que seu
conjunto faz referncia outro conjunto explicitamente. Quando voc usar em tempo de compilao
referncia, automaticamente o compilador obtm a chave pblica do conjunto de nome seguro de
destino e coloca-na referncia do conjunto da montagem sendo compilada.
Observao
Um conjunto de nome seguro s pode usar tipos de outros conjuntos de nome seguro. Caso
contrrio a segurana do conjunto de nome seguro deve ser comprometida.
Por exemplo:
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:
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>
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."); } } }
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para remover um conjunto de cache de
conjunto global.
O SDK do .NET Framework tambm fornece uma extenso Shell do Windows chamado que voc
pode usar para remover conjuntos de cache de conjunto global. o Visualizador cache do conjunto
(Shfusion.dll),
Observao
Gacutil.exe serve apenas para fins de desenvolvimento e no deve ser usado para instalar
conjuntos de produo no cache de conjunto global.
O exemplo a seguir instala um conjunto com o nome hello.dll de arquivo no cache de conjunto
global.
gacutil -i hello.dll
Esta seo descreve o procedimento utilizado para criar um conjunto de vrios arquivos e fornece
um exemplo completo que ilustra cada uma das etapas no procedimento.
Observao
O Visual Studio 2005 IDE de C# e Visual Basic poder somente usar para criar conjuntos de
Arquivo nico. Se voc desejar criar vrios arquivos conjuntos, deve usar os compiladores de
linha de comando ou Visual Studio 2005 com Visual C++.. ou Visual Studio 2005 com Visual C++
O exemplo a seguir ilustra a etapa 1 do procedimento acima, por compilao arquivos com
espaos para nome referido por outros arquivos. Este exemplo inicia com alguns cdigo simples
para o Stringer arquivo. Espao para nome chamado myStringer com uma classe chamado
StringerStringer. A Stringer classe contm um mtodo chamado StringerMethod que grava uma
nica linha para o console.
C#
// Assembly building example in the .NET Framework SDK. using System; namespace myStringer { public
class Stringer { public void StringerMethod() { System.Console.WriteLine("This is a line from
StringerMethod."); } } }
Visual Basic
vbc /t:module Stringer.vb
C#
csc /t:module Stringer.cs
Especificando o module parmetro com a /t: opo de compilador indica que o arquivo deve ser
compilado como um mdulo em vez de como um conjunto. O compilador produz um mdulo
chamado Stringer.netmodule, que pode ser adicionado a um conjunto.
Na Etapa dois do procedimento acima, voc deve compilar mdulos com referncias a outros
mdulos. Essa etapa usa a /addmodule opo de compilador. No exemplo a seguir, um mdulo
de cdigo chamado Client tem um mtodo ponto Main de entrada que referencia um mtodo no
mdulo Stringer.dll criado na etapa 1.
C#
using System; using myStringer; //The namespace created in Stringer.netmodule. class MainClientApp { //
Static method Main is the entry point method. public static void Main() { Stringer myStringInstance = new
Stringer(); Console.WriteLine("Client code executes"); //myStringComp.Stringer();
myStringInstance.StringerMethod(); } }
Visual Basic
vbc /addmodule:Stringer.netmodule /t:module Client.vb
C#
csc /addmodule:Stringer.netmodule /t:module Client.cs
Especificar a /t:module opo porque este mdulo ir ser adicionado a uma montagem em uma
etapa futura. Especificar a /addmodule opo porque o cdigo em Client Referncias criado pelo
cdigo em Stringer.netmodule um espao para nome. O compilador produz um mdulo chamado
Client.netmodule que contm uma referncia a outro mdulo, Stringer.netmodule.
Observao
C#
csc /t:module Stringer.cs csc Client.cs /addmodule:Stringer.netmodule
C#
csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
Do Vinculador do conjunto (AL.exe) voc pode usar para criar um conjunto de uma coleo de
compilado mdulos de cdigo.
Do Disassembler MSIL (Ildasm.exe) voc pode usar para examinar o contedo de um conjunto ou
determinar se um arquivo um conjunto ou um mdulo.
Observao
Exemplo
C#
using System; using System.Reflection; public class Asmload0 { public static void Main () { // Use the file
name to load the assembly into the current application domain. Assembly a =
Assembly.LoadFrom("adname.exe"); //Get the type to use. Type myType = a.GetType("adname"); //Get the
method to call. MethodInfo mymethod = myType.GetMethod("adnamemethod"); //Create an instance.
Object obj = Activator.CreateInstance(myType); //Execute the adnamemethod method.
mymethod.Invoke(obj,null); } }
Voc deve ter um par de chaves de criptografia para assinar um conjunto com um nome de alta
segurana. Para obter mais informaes sobre como criar um par de chaves, consulte Como criar
um par de chaves pblica / Private:.
Para criar e assinar um conjunto com um nome de alta segurana usando o vinculador assembly
No prompt de comando, digite o seguinte comando:
al /out:<assembly name> <module name> /keyfile:<file name>
Neste comando, assembly name o nome da montagem para entrar com um nome de alta
segurana, module name o nome do mdulo do cdigo usado para criar o conjunto, e file
name o nome do recipiente ou arquivo que contm o par de chaves.
O exemplo a seguir assina o conjunto MyAssembly.dll com um nome de alta segurana usando o
arquivo sgKey.snk de chave.
C#
[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]
Observao
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para exibir o contedo do cache de
montagem global.
O SDK do .NET Framework tambm fornece uma extenso Shell do Windows chamado que voc
pode usar para exibir o contedo do cache de conjunto global. o Visualizador cache do conjunto
(Shfusion.dll),
Para assinar um conjunto com um nome de alta segurana, voc deve ter um par de chaves
pblica / particular Criptografia esse par de chaves pblica e privada usado durante a
compilao para criar um conjunto de nome seguro. Voc pode criar um par de chaves usando o
Ferramenta nome forte (SN.exe). Par de Chaves arquivos geralmente tm uma extenso.snk.
sn -k sgKey.snk
Se voc pretende atrasar a assinatura um conjunto e voc controlar o par de chaves toda (que
improvvel fora cenrios de teste), voc pode usar o seguinte comandos para gerar um par de
chaves e ento extrair a chave pblica em um arquivo separado. Primeiro, crie o par de chaves:
sn -k keypair.snk
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.
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#
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
C#
csc /t:library MyApp.cs /win32res:myresource.res
A maneira mais simples para produzir conjuntos de interoperabilidade primrias consiste em usar
o Importador de Biblioteca de Tipos (TLBIMP.exe).
Primrio um conjunto interoperacional dependente com um nmero de verso que seja diferente
da biblioteca de tipos original no localizvel quando instalado no diretrio atual. Voc deve
registrar Principal conjunto interoperacional do dependente no Registro do Windows ou use a
/reference Opo para ter certeza que localiza TLBIMP.exe a DLL dependente.
Voc tambm poder dispor vrias verses de uma biblioteca de tipos. Para obter instrues,
consulte Como Empacotar Vrias Verses de Bibliotecas de Tipos.
Exemplo
O exemplo a seguir importa a biblioteca LibUtil.tlb de tipos COM e assina o conjunto LibUtil.dll
com um nome de alta segurana usando o arquivo CompanyA.snk de chave. Omitindo um nome de
espao para nome especfico, este exemplo produz o espao para nome LibUtil padro.
Para um nome mais descritivo). (usando, o exemplo a seguir substitui o nome de arquivo do
conjunto padro e nome namespace nomeao diretriz. LibraryName o VendorName
Uma abordagem menos usada para produzir uma biblioteca de tipos envolve criar um conjunto de
interoperabilidade primrio manualmente no cdigo fonte, usando uma linguagem que
compatvel com o COM comum especificao (cls), como C# idioma. Essa abordagem til
quando uma biblioteca de tipos no est disponvel.
Observao
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
tlbimp Loanlib.dll
Se voc estiver familiarizado com o modelo baseado em delegate-evento fornecido pelo .NET
Framework, no Consulte Manipulando e disparando eventos. Para obter detalhes especficos que
se aplicam a este tpico, consulte Disparar um evento na mesma seo.
O exemplo a seguir mostra um servidor gerenciado como a origem de eventos e um cliente COM
como o coletor de eventos. O servidor gerenciado declara ButtonEvents como uma interface do
coletor de eventos e se conecta a interface a Button classe. O cliente no gerenciado cria uma
instncia da classe Button e implementa a interface do coletor de eventos.
Visual Basic
' Managed server (event source) Option Explicit Option Strict Imports System Imports
System.Runtime.InteropServices Namespace EventSource Public Delegate Sub ClickDelegate(x As Integer, y
As Integer) Public Delegate Sub ResizeDelegate() Public Delegate Sub PulseDelegate() ' Step 1: Defines an
event sink interface (ButtonEvents) to be ' implemented by the COM sink. <GuidAttribute("1A585C4D-3371-
48dc-AF8A-AFFECC1B0967"), _ InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _ Public
Interface ButtonEvents Sub Click(x As Integer, y As Integer) Sub Resize() Sub Pulse() End Interface ' Step 2:
Connects the event sink interface to a class ' by passing the namespace and event sink interface '
("EventSource.ButtonEvents, EventSrc"). <ComSourceInterfaces(GetType(ButtonEvents))> _ Public Class
Button Public Event Click As ClickDelegate Public Event Resize As ResizeDelegate Public Event Pulse As
PulseDelegate Public Sub CauseClickEvent(x As Integer, y As Integer) RaiseEvent Click(x, y) End Sub Public
Sub CauseResizeEvent() RaiseEvent Resize() End Sub Public Sub CausePulse() RaiseEvent Pulse() End Sub
End Class End Namespace using System; using System.Runtime.InteropServices; namespace EventSource {
public delegate void ClickDelegate(int x, int y); public delegate void ResizeDelegate(); public delegate void
PulseDelegate(); // Step 1: Defines an event sink interface (ButtonEvents) to be // implemented by the COM
sink. [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967") ]
H duas maneiras para personalizar um wrapper Callable Runtime (RCW). Se voc pode
modificar a fonte interface Definition Language (IDL), voc pode aplicar atributos de arquivo (tlb)
de biblioteca Tipo e importar a biblioteca de tipos Como alternativa, voc pode aplicar atributos
especficos interop-a tipos importados e gerar um novo conjunto. Suporte para personalizar RCWs
padro limitado por esses atributos.
Ativao livre registro-para componentes baseado em .NET apenas um pouco mais complicado
que ele para componentes COM. A instalao requer dois manifestos:
Para informaes sobre elementos manifesto e seus atributos, procure por " Reference
Manifests Application " na Biblioteca do MSDN.
3. Identificar o proprietrio do manifesto. No exemplo a seguir, myComApp Verso 1 possui o
arquivo de manifesto.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-
microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32"
name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" />
Voc pode instalar um manifesto de aplicativo no mesmo diretrio como o aplicativo COM. Como
alternativa, voc pode adicion-lo como um recurso para arquivo.exe do aplicativo. Para obter
mais informaes, procure por " conjuntos lado a lado na Biblioteca do MSDN ".
Uma pista que essa funo requer um retorno de chamada a presena do argumento
lpEnumFunc. comum para ver o lp prefixo (ponteiro longo) combinado com o Func
sufixo do nome do argumentos que se um ponteiro para uma funo de retorno de
chamada. Para obter documentao sobre funes Win32, consulte Microsoft Platform
SDK.
2. Crie a funo de retorno de chamada gerenciado. O exemplo declara um tipo delegate,
que utiliza dois argumentos chamado CallBack, (hwnd e lparam.) O primeiro argumento
um identificador para a janela; o segundo argumento definido pelo aplicativo. Nesta
verso, ambos os argumentos devem ser inteiros.
Funes de retorno de chamada geralmente retornam valores diferentes de zero para
indicar xito e zero para indicar falha. Este exemplo explicitamente define o valor de retorno
para true para continuar a enumerao.
3. Criar um representante e transfira-como um argumento para a EnumWindows funo.
Chamar plataforma converte o representante em um formato de retorno de chamada
familiarizado automaticamente.
4. Verifique o coletor de lixo que no no recuperou o representante antes a funo de
retorno de chamada conclua seu trabalho. Quando voc passar um representante como um
parmetro, ou passar um representante contido como um campo em uma estrutura, ela
permanece uncollected para a durao da chamada. Portanto, como o caso no seguinte
exemplo de enumerao, a funo de retorno de chamada completa seu trabalho antes da
chamada retorna e no requer nenhuma ao adicional pelo chamador gerenciado.
Se, no entanto, a funo de retorno de chamada pode ser chamada depois retorna a
chamada, o chamador gerenciado dever executar etapas para garantir que o
representante permanece uncollected at terminar a funo de retorno de chamada. Para
Mtodos com Relatar Erros, retornando HRESULTs; Mtodos .NET relat-los por organizando
excees. Tempo de Execuo trata a transio entre os dois. Cada classe de exceo no .NET
Framework mapeia para um HRESULT.
Classes de exceo definida pelo usurio podem especificar qualquer HRESULT apropriado.
Essas classes de exceo dinamicamente podem alterar o HRESULT a ser retornado quando a
exceo gerada, definindo o HResult campo no objeto de exceo. Informaes adicionais
sobre a exceo fornecidas para o cliente por meio da IErrorInfo interface, que implementado
no objeto .NET durante o processo no gerenciado.
Se voc criar uma classe que estende System.Exception, deve definir o campo HRESULT
durante construo. Caso contrrio, a classe base atribui o valor HRESULT. Voc pode mapear
novas classes de exceo para um HRESULT existente, fornecendo o valor no construtor a
exceo .
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
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.
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
2. No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
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.
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.
Observao
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; } }
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.
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 ); } }
Embora ele no seja necessrio para registrar conjuntos de interoperabilidade primrias a menos
que voc pretende usar Visual Studio, registro oferece duas vantagens:
regasm CompanyA.UtilLib.dll
Opcionalmente, voc pode dispor mais de uma verso de uma biblioteca de tipos. Por exemplo,
voc pode indicar um conjunto de interoperabilidade primrio que oferece suporte tipo verses de
biblioteca 1.0 e 1.1.
Quando voc desserializar um objeto, o formato transporte determina voc se ir criar um objeto
fluxo ou arquivo. Aps o formato de transporte determinado, voc pode chamar ou Deserialize
mtodos, conforme necessrio. o Serialize
Como Usar Ferramenta de Definio de Esquema XML para Gerar Classes e Documentos de
Esquema XML
A ferramenta definio de esquema XML (XSD.exe) permite que voc para gerar um esquema
XML que descreve uma classe ou para gerar a classe definido por um esquema XML. Os
procedimentos a seguir mostram como executar essas operaes.
A ferramenta s pode processar esquemas que fazem referncia a W3C (World Wide Web
Consortium) XML Especificao de maro de 2001 16. Em outras palavras, o espao para
nome Esquema XML deve estar " http://www.w3.org/2001/XMLSchema " que mostrado no
exemplo a seguir.
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace=""
xmlns:xs="http://www.w3.org/2001/XMLSchema">
O esquema (ou esquemas) sero gravadas, comeando com " a schema0.xsd " Nome.
Exemplo do cdigo
Usando voc pode gerar mais de um fluxo XML com o mesmo conjunto de classes. o
XmlSerializer Convm fazer isso porque dois servios XML da Web diferentes exigem as mesmas
informaes bsicas, com apenas pequenas diferenas. Por exemplo, imagine dois servios XML
da Web que processam pedidos de livros, e assim ambos requerem nmeros ISBN. One service
uses the tag <ISBN> while the second uses the tag <BookID>. Voc ter uma classe denominada
Book que contm um campo chamado ISBN. Por padro, quando uma instncia da classe Book for
serializado, ele poder, usar o nome membro (ISBN) como o nome do elemento marca. Para o
primeiro servio XML da Web, este conforme esperado. Mas para enviar o fluxo XML para o
servio da Web XML segundo, voc deve substituir a serializao para que seja BookID nome
elemento a marca na.
Por exemplo, fornecido uma Book classe, voc pode derivar a partir dele e criar uma ExpandedBook
classe que tenha mais de algumas propriedades No entanto, voc dever instruir para aceitar o
tipo derivado quando serializing ou deserializing. o XmlSerializer Isso pode ser feito, criando uma
XmlElementAttribute instncia e definindo sua Type propriedade para o tipo classe derivada.
Adicionar a uma XmlAttributes instncia. o XmlElementAttribute Em seguida, adicione a uma
XmlAttributeOverrides instncia, especifica o tipo seja substitudo e o nome do membro que aceite
a classe derivada. o XmlAttributes Isso mostrado no exemplo a seguir.
Exemplo
C#
public class Orders { public Book[] Books; } public class Book { public string ISBN; } public class
ExpandedBook:Book { public bool NewEdition; } public class Run { public void SerializeObject(string
filename) { // Each overridden field, property, or type requires // an XmlAttributes instance. XmlAttributes
attrs = new XmlAttributes(); // Creates an XmlElementAttribute instance to override the // field that returns
Book objects. The overridden field // returns Expanded objects instead. XmlElementAttribute attr = new
XmlElementAttribute(); attr.ElementName = "NewBook"; attr.Type = typeof(ExpandedBook); // Adds the
element to the collection of elements. attrs.XmlElements.Add(attr); // Creates the XmlAttributeOverrides
instance. XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides(); // Adds the type of the class
that contains the overridden // member, as well as the XmlAttributes instance to override it // with, to the
XmlAttributeOverrides. attrOverrides.Add(typeof(Orders), "Books", attrs); // Creates the XmlSerializer
using the XmlAttributeOverrides. XmlSerializer s = new XmlSerializer(typeof(Orders), attrOverrides); //
Writing the file requires a TextWriter instance. TextWriter writer = new StreamWriter(filename); // Creates
the object to be serialized. Orders myOrders = new Orders(); // Creates an object of the derived type.
ExpandedBook b = new ExpandedBook(); b.ISBN= "123456789"; b.NewEdition = true; myOrders.Books =
new ExpandedBook[]{b}; // Serializes the object. s.Serialize(writer,myOrders); writer.Close(); } public void
DeserializeObject(string filename) { XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
XmlAttributes attrs = new XmlAttributes(); // Creates an XmlElementAttribute to override the // field that
returns Book objects. The overridden field // returns Expanded objects instead. XmlElementAttribute attr =
new XmlElementAttribute(); attr.ElementName = "NewBook"; attr.Type = typeof(ExpandedBook); // Adds
the XmlElementAttribute to the collection of objects. attrs.XmlElements.Add(attr);
attrOverrides.Add(typeof(Orders), "Books", attrs); // Creates the XmlSerializer using the
XmlAttributeOverrides. XmlSerializer s = new XmlSerializer(typeof(Orders), attrOverrides); FileStream fs =
new FileStream(filename, FileMode.Open); Orders myOrders = (Orders) s.Deserialize(fs);
Console.WriteLine("ExpandedBook:"); // The difference between deserializing the overridden // XML
document and serializing it is this: To read the derived // object values, you must declare an object of the
Exemplo do cdigo
Porque uma mensagem SOAP criado usando XML, o XmlSerializer pode ser usado para
serializar classes e gerar mensagens SOAP codificado. O XML resultante obedea seo 5 do
documento " simples Protocolo de acesso a objetos " (SOAP) 1.1 W3C (World Wide Web
Consortium) (www.w3.org). Quando voc est criando um servio XML da Web que se comunica
atravs mensagens SOAP, voc pode personalizar o fluxo XML aplicando um conjunto de
atributos SOAP especial s classes e membros de classes Para obter uma lista de atributos,
consulte Atributos que controlam serializao SOAP codificado.
Dois problemas que ocorrem quando enviar grandes conjuntos de dados em mensagens do
servio da Web so:
O exemplo de cdigo a seguir mostra o mtodo web no cliente que desativa o buffer do ASP.NET.
Ele tambm mostra a implementao do lado do cliente da interface IXmlSerializable que chunks
os dados no mtodo WriteXml.
C#
[WebMethod] [System.Web.Services.Protocols.SoapDocumentMethodAttribute (ParameterStyle=
SoapParameterStyle.Bare)] public SongStream DownloadSong(DownloadAuthorization Authorization, string
filePath) { // Turn off response buffering. System.Web.HttpContext.Current.Response.Buffer = false; //
Return a song. SongStream song = new SongStream(filePath); return song; }
...[XmlSchemaProvider("MySchema")] public class SongStream : IXmlSerializable { private const string ns =
"http://demos.Contoso.com/webservices"; private string filePath; public SongStream(){ } public
SongStream(string filePath) { this.filePath = filePath; } // This is the method named by the
XmlSchemaProviderAttribute applied to the type. public static XmlQualifiedName
MySchema(XmlSchemaSet xs) { // This method is called by the framework to get the schema for this type. //
We return an existing schema from disk. XmlSerializer schemaSerializer = new
XmlSerializer(typeof(XmlSchema)); string xsdPath = null; // NOTE: replace the string with your own path.
xsdPath = System.Web.HttpContext.Current.Server.MapPath("SongStream.xsd"); XmlSchema s =
(XmlSchema)schemaSerializer.Deserialize( new XmlTextReader(xsdPath), null); xs.XmlResolver = new
XmlUrlResolver(); xs.Add(s); return new XmlQualifiedName("songStream", ns); } void
IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) { // This is the chunking code. // ASP.NET
buffering must be turned off for this to work. int bufferSize = 4096; char[] songBytes = new char[bufferSize];
FileStream inFile = File.Open(this.filePath, FileMode.Open, FileAccess.Read); long length = inFile.Length;
// Write the file name. writer.WriteElementString("fileName", ns,
Path.GetFileNameWithoutExtension(this.filePath)); // Write the size. writer.WriteElementString("size", ns,
length.ToString()); // Write the song bytes. writer.WriteStartElement("song", ns); StreamReader sr = new
StreamReader(inFile, true); int readLen = sr.Read(songBytes, 0, bufferSize); while (readLen > 0) {
writer.WriteStartElement("chunk", ns); writer.WriteChars(songBytes, 0, readLen);
writer.WriteEndElement(); writer.Flush(); readLen = sr.Read(songBytes, 0, bufferSize); }
writer.WriteEndElement(); inFile.Close(); } System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
{ throw new System.NotImplementedException(); } void IXmlSerializable.ReadXml(System.Xml.XmlReader
Compilando o cdigo
O cdigo usa espaos para nome a seguir: System.,
System.XmlSystem.Web.Services.Protocols,
System.Web.ServicesSystem.Runtime.Serialization, System.Xml.Serialization e
System.Xml.Schema
Para serializar um objeto, primeiro criar o objeto que est para ser serializado e definir suas
propriedades pblicas e campos. Para fazer isso, voc deve determinam o formato de transporte
em que o fluxo XML para ser armazenado, como um fluxo ou como um arquivo. Por exemplo, se
o fluxo XML deve ser salvo em um formulrio permanente, criar um FileStream objeto.
Observao
Para obter mais exemplos de serializao XML, consulte Exemplos de serializao XML.
Code Example
Esto espaos para nome XML contidos, as instncias da classe XmlSerializerNamespaces deve
conformidade com a especificao W3C (World Wide Web Consortium) (www.w3.org) chamado "
Namespaces em XML. "
Espaos para nome XML fornecem um mtodo para qualificao os nomes de elementos XML e
atributos XML em documentos XML. Um nome qualificado consiste de um prefixo e um nome
local, separados por dois-pontos. O prefixo funciona apenas como um espao reservado; ele
mapeado para um URI que especifica um espao para nome. A combinao de espao para
nome URI universalmente gerenciado e o nome local produz um nome que garantida seja
universalmente exclusivo.
O exemplo a seguir cria e adiciona dois pares prefixo e espao para nome ao objeto. an
XmlSerializerNamespaces, O cdigo cria um XmlSerializer que usado para serializar uma
instncia da classe Books. O cdigo chama o Serialize mtodo com o XML para conter espaos
para nome prefixed permitindo o XmlSerializerNamespaces.
C#
using System; using System.IO; using System.Xml; using System.Xml.Serialization; public class Run { public
static void Main() { Run test = new Run(); test.SerializeObject("XmlNamespaces.xml"); } public void
SerializeObject(string filename) { XmlSerializer mySerializer = new XmlSerializer(typeof(Books)); // Writing
a file requires a TextWriter. TextWriter myWriter = new StreamWriter(filename); // Creates an
XmlSerializerNamespaces and adds two // prefix-namespace pairs. XmlSerializerNamespaces
myNamespaces = new XmlSerializerNamespaces(); myNamespaces.Add("books",
"http://www.cpandl.com"); myNamespaces.Add("money", "http://www.cohowinery.com"); // Creates a
Book. Book myBook = new Book(); myBook.TITLE = "A Book Title"; Price myPrice = new Price();
myPrice.price = (decimal) 9.95; myPrice.currency = "US Dollar"; myBook.PRICE = myPrice; Books myBooks
= new Books(); myBooks.Book = myBook; mySerializer.Serialize(myWriter,myBooks,myNamespaces);
Exemplo do cdigo
O exemplo de cdigo a seguir serializes um arquivo em duas maneiras: primeiro, sem substituindo
o comportamento a XmlSerializer classe, e em segundo lugar, por substituindo o comportamento.
O exemplo contm uma classe denominada Group com vrios membros. Diversos atributos,, como
o SoapElementAttribute, que foi. aplicado a membros de classe Quando a classe serializado com
o SerializeOriginal mtodo, os atributos controlar o contedo da mensagem SOAP. Quando o
SerializeOverride mtodo chamado, o comportamento do para esses atributos (conforme
adequado). seja substitudo, criando vrios atributos e definio das propriedades da XmlSerializer
uma SoapAttributes
C#
using System; using System.IO; using System.Xml; using System.Xml.Serialization; using
System.Xml.Schema; public class Group { [SoapAttribute (Namespace = "http://www.cpandl.com")] public
string GroupName; [SoapAttribute(DataType = "base64Binary")] public Byte [] GroupNumber;
[SoapAttribute(DataType = "date", AttributeName = "CreationDate")] public DateTime Today;
[SoapElement(DataType = "nonNegativeInteger", ElementName = "PosInt")] public string PostitiveInt; //
This is ignored when serialized unless it is overridden. [SoapIgnore] public bool IgnoreThis; public
GroupType Grouptype; [SoapInclude(typeof(Car))] public Vehicle myCar(string licNumber) { Vehicle v;
if(licNumber == "") { v = new Car(); v.licenseNumber = "!!!!!!"; } else { v = new Car(); v.licenseNumber =
licNumber; } return v; } } public abstract class Vehicle { public string licenseNumber; public DateTime
makeDate; } public class Car: Vehicle { } public enum GroupType { // These enums can be overridden. small,
O Padro Unicode define valores de cdigo de dgitos em vrios scripts. Por exemplo, valores
cdigo no intervalo 09E6 U + a + U 09EF especificam Bengali dgitos de 0 a 9, e valores cdigo no
intervalo U + FF10 a + U FF19 Especificar dgitos de 0 a 9 largura total. No entanto, somente os
dgitos Unicode que o .NET Framework analisa como decimais so dgitos ASCII de 0 a 9,
especificado pelo U + 0030 atravs u+0039 os valores de cdigo. O .NET Framework analisa
todos os outros dgitos Unicode como caracteres. Portanto, uma tentativa de analisar uma
seqncia de Bengali dgitos no intervalo 09E6 U + a + U 09EF usando o Decimal.Parse mtodo
throws uma exceo.
O exemplo de cdigo a seguir usa o Decimal.Parse mtodo para analisar seqncias de valores
de cdigo Unicode que especificam dgitos em scripts diferentes. As tentativas para analisar
dgitos ASCII e dgitos ASCII especificado como valores de cdigo Unicode xito. As tentativas
para analisar os valores cdigo Unicode de largura total dgitos, dgitos indo-arbico, e dgitos
Bengali falhar e Acione uma exceo.
Exemplo
C#
using System; public class TestClass { public static void Main() { // Parses a string of ASCII digits 1-5. String
strDigits = "12345"; // Parsing succeeds. Parse(strDigits); // Parses a string of ASCII Digits 1-5 specified //
as Unicode code values. String strUdigits = "\u0031\u0032\u0033\u0034\u0035"; // Parsing succeeds.
Parse(strUdigits); // Parses a string of Fullwidth digits 1-5 specified as // Unicode code values. String
strFdigits = "\uFF11\uFF12\uFF13\uFF14\uFF15"; // Parsing fails. Parse(strFdigits); // Parses a string of
Arabic-Indic digits 1-5 specified as // Unicode code values. String strAdigits =
"\u0661\u0662\u0663\u0664\u0665"; // Parsing fails. Parse(strAdigits); // Parses a string of Bengali digits
1-5 specified as // Unicode code values. String strBdigits = "\u09E7\u09E8\u09E9\u09EA\u09EB"; //
Parsing fails. Parse(strBdigits); } public static void Parse(String str) { try { Decimal dc = Decimal.Parse(str);
Console.WriteLine("Parsing string {0} succeeded: {1}\n",str, dc); } catch (Exception e) {
Console.WriteLine("Parsing string {0} failed", str); Console.WriteLine(e.ToString());
Console.WriteLine("\n"); } } }
The predefined cultures provided with the .NET Framework and the Windows operating system
provide information such as the language and calendar used in a country/region, and the text
conventions used to format, parse, and compare strings, dates, and numbers. No entanto, voc
pode criar uma cultura personalizados se o cultures predefinidas no fornecer as informaes seu
aplicativo requer.
C#
// This example demonstrates the System.Globalization.Culture- // AndRegionInfoBuilder Register method.
// Compile this code example with a reference to sysglobl.dll. using System; using System.Globalization;
class Sample { public static void Main() { CultureAndRegionInfoBuilder cib = null; try { // Create a
CultureAndRegionInfoBuilder object named "x-en-US-sample". Console.WriteLine("Create and explore the
CultureAndRegionInfoBuilder...\n"); cib = new CultureAndRegionInfoBuilder( "x-en-US-sample",
CultureAndRegionModifiers.None); // Populate the new CultureAndRegionInfoBuilder object with culture
information. CultureInfo ci = new CultureInfo("en-US"); cib.LoadDataFromCultureInfo(ci); // Populate the
new CultureAndRegionInfoBuilder object with region information. RegionInfo ri = new RegionInfo("US");
cib.LoadDataFromRegionInfo(ri); // Display some of the properties of the CultureAndRegionInfoBuilder
object. Console.WriteLine("CultureName:. . . . . . . . . . {0}", cib.CultureName);
Console.WriteLine("CultureEnglishName: . . . . . . {0}", cib.CultureEnglishName);
2. Criar uma matriz que especifica os tipos de parmetro para o mtodo dinmico. Neste
exemplo, o nico parmetro est um int. (Integer), para que tenha apenas um elemento da
matriz no Visual Basic
C#
Type[] methodArgs = {typeof(int)};
Observao
Ele no necessrio para dar nomes mtodos Dinmico, e eles no podem ser chamados pelo
nome. Vrios mtodos dinmicos podem ter o mesmo nome. No entanto, o nome aparece em
pilhas de chamada e pode ser til para depurao.
4. O tipo do valor de retorno especificado como long. O mtodo est associado ao mdulo
que contm a Example classe, que contm o cdigo de exemplo. Qualquer mdulo
carregado pode ser especificado. O mtodo dinmico age como um mdulo - nvel static
mtodo no Visual Basic). (Shared
C#
DynamicMethod squareIt = new DynamicMethod( "SquareIt", typeof(long), methodArgs,
typeof(Example).Module);
5. Emitir o corpo de mtodo. Neste exemplo, um ILGenerator objeto usado para emitir a
linguagem intermediria Microsoft (MSIL). Como alternativa, um DynamicILInfo objeto pode
ser usado em conjunto com geradores de cdigo no gerenciado para emitir o corpo de
mtodo um DynamicMethod.
O MSIL, neste exemplo carrega o argumento, que para um long, duplicatas. na pilha,
converte-e multiplica os dois nmeros an int, o long, Isso deixa o resultado quadrado na
pilha, e o mtodo tem a ver tudo retorno.
C#
ILGenerator il = squareIt.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Conv_I8);
il.Emit(OpCodes.Dup); il.Emit(OpCodes.Mul); il.Emit(OpCodes.Ret);
2. Criar uma matriz que especifica os tipos de parmetro para o mtodo dinmico. Se o
representante que representa o mtodo deve ser vinculado a um objeto, o primeiro
parmetro deve corresponder ao tipo o representante est vinculado. Neste exemplo, no
so dois parmetros, do tipo Example e tipo int (Integer no Visual Basic.)
C#
Type[] methodArgs2 = { typeof(Example), typeof(int) };
3. Criar um DynamicMethod. No, neste exemplo o mtodo tem nome. O tipo do valor de
retorno especificado como int (Integer no Visual Basic.) O mtodo tem acesso aos
membros da classe Example privada e protegidos.
C#
DynamicMethod multiplyHidden = new DynamicMethod( "", typeof(int), methodArgs2,
typeof(Example));
4. Emitir o corpo de mtodo. Neste exemplo, um ILGenerator objeto usado para emitir a
linguagem intermediria Microsoft (MSIL). Como alternativa, um DynamicILInfo objeto
pode ser usado em conjunto com geradores de cdigo no gerenciado para emitir o corpo
de mtodo um DynamicMethod.
O MSIL, neste exemplo carrega o primeiro argumento, que uma instncia da classe
Example, e ele usa para carregar o valor de um campo particular da instncia do tipo int. O
segundo argumento carregado e os dois nmeros so multiplicados. Se o resultado for
maior do que int o valor ser truncado e os bits mais significativos sero descartados. O
mtodo retorna, com o valor de retorno na pilha.
C#
ILGenerator ilMH = multiplyHidden.GetILGenerator(); ilMH.Emit(OpCodes.Ldarg_0); FieldInfo
testInfo = typeof(Example).GetField("test", BindingFlags.NonPublic | BindingFlags.Instance);
ilMH.Emit(OpCodes.Ldfld, testInfo); ilMH.Emit(OpCodes.Ldarg_1); ilMH.Emit(OpCodes.Mul);
ilMH.Emit(OpCodes.Ret);
Observao
Voc pode chamar o CreateDelegate mtodo vrias vezes para criar representantes vinculados a
outras instncias do tipo de destino.
6. O cdigo a seguir vincula o mtodo a uma nova instncia da classe Example cujo campo
particular de teste definido para 42. Isto , sempre que o representante for chamado a
instncia do Example passado para o primeiro parmetro do mtodo.
7. O representante OneParameter usado porque o primeiro parmetro do mtodo sempre
receber a instncia do Example. Quando o representante invocado, somente o parmetro
segundo necessrio.
C#
Exemplo
O segundo mtodo dinmico tem dois parmetros, do tipo Example e tipo int (Integer no Visual
Basic.) Quando o mtodo dinmico for criado, ela est vinculada a uma instncia do Example,
usando um representante genrico que tem um argumento do tipo int. O representante no tem
um argumento do tipo Example porque o primeiro parmetro do mtodo sempre receber a
instncia do Example limite. Quando o representante invocado, somente o int argumento
fornecido. Este mtodo dinmico acessa um campo particular da classe Example e retorna o
produto do campo particular e o int argumento.
O exemplo de cdigo define representantes podem ser usadas para executar os mtodos.
C#
using System; using System.Reflection; using System.Reflection.Emit; public class Example { // The
following constructor and private field are used to // demonstrate a method bound to an object. private int
test; public Example(int test) { this.test = test; } // Declare delegates that can be used to execute the
completed // SquareIt dynamic method. The OneParameter delegate can be // used to execute any method
with one parameter and a return // value, or a method with two parameters and a return value // if the
delegate is bound to an object. // private delegate long SquareItInvoker(int input); private delegate TReturn
OneParameter<TReturn, TParameter0> (TParameter0 p0); public static void Main() { // Example 1: A
simple dynamic method. // // Create an array that specifies the parameter types for the // dynamic method.
In this example the only parameter is an // int, so the array has only one element. // Type[] methodArgs =
{typeof(int)}; // Create a DynamicMethod. In this example the method is // named SquareIt. It is not
necessary to give dynamic // methods names. They cannot be invoked by name, and two // dynamic methods
can have the same name. However, the // name appears in calls stacks and can be useful for // debugging. //
// In this example the return type of the dynamic method // is long. The method is associated with the
module that // contains the Example class. Any loaded module could be // specified. The dynamic method is
like a module-level // static method. // DynamicMethod squareIt = new DynamicMethod( "SquareIt",
typeof(long), methodArgs, typeof(Example).Module); // Emit the method body. In this example ILGenerator
is used // to emit the MSIL. DynamicMethod has an associated type // DynamicILInfo that can be used in
conjunction with // unmanaged code generators. // // The MSIL loads the argument, which is an int, onto
the // stack, converts the int to a long, duplicates the top // item on the stack, and multiplies the top two
items on the // stack. This leaves the squared number on the stack, and // all the method has to do is return.
// ILGenerator il = squareIt.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Conv_I8);
il.Emit(OpCodes.Dup); il.Emit(OpCodes.Mul); il.Emit(OpCodes.Ret); // Create a delegate that represents
the dynamic method. // Creating the delegate completes the method, and any further // attempts to change
the method (for example, by adding more // MSIL) are ignored. The following code uses a generic // delegate
that can produce delegate types matching any // single-parameter method that has a return type. //
OneParameter<long, int> invokeSquareIt = (OneParameter<long, int>)
squareIt.CreateDelegate(typeof(OneParameter<long, int>)); Console.WriteLine("123456789 squared = {0}",
Compilando o cdigo
O cdigo contm as instrues C# using (Imports. no Visual Basic) necessrio para
compilao
H referncias do conjunto adicionais so necessrias.
Compilar o cdigo na linha de comando usando csc.exe, vbc.exe, ou CL.exe. Para
compilar o cdigo no Visual Studio, coloque-o em um modelo de projeto de aplicativo de
console.
Informaes sobre tipos genricos so obtidas no mesmo modo como informaes sobre outros
tipos: examinando um Type objeto que representa o tipo genrico. A diferena princpio que um
tipo genrico tem uma lista de Type objetos que representam seus parmetros tipo genrico. O
primeiro procedimento nesta seo examina tipos genricos.
Voc pode criar um Type objeto que representa um tipo construdo pelos argumentos Tipo de
ligao com os parmetros Tipo de uma definio de tipo genrico. O segundo procedimento
demonstra isso.
4. Para cada argumento Tipo, determinar se ela um parmetro tipo (por exemplo, em uma
definio de tipo genrico) ou um tipo que foi especificado para um parmetro de tipo (por
exemplo, em um tipo construdo), usando a IsGenericParameter propriedade.
C#
Console.WriteLine(" List {0} type arguments:", typeParameters.Length); foreach( Type tParam in
typeParameters ) { if (tParam.IsGenericParameter) { DisplayGenericParameter(tParam); } else {
Console.WriteLine(" Type argument: {0}", tParam); } }
5. No sistema do tipo, um parmetro tipo genrico representado por uma instncia do Type,
exatamente como so tipos comuns. O cdigo a seguir exibe a posio de um Type objeto
que representa um parmetro tipo genrico Nome e parmetro. A posio de parmetro
trivial informaes aqui; ele de mais interesse quando voc est examinando um
parmetro tipo que foi usado como um argumento Tipo de outro tipo genrico.
C#
private static void DisplayGenericParameter(Type tp) { Console.WriteLine(" Type parameter: {0}
position {1}", tp.Name, tp.GenericParameterPosition);
Um tipo genrico como um modelo. Voc no pode criar instncias dela a menos que voc
especifique reais tipos para seus parmetros tipo genrico. Para fazer isso em tempo de
execuo, usar reflexo, requer o MakeGenericType mtodo.
1. Obter um Type objeto que representa o tipo genrico. O cdigo a seguir obtm o tipo
Dictionary genrico de duas maneiras diferentes: por meio do
System.Type.GetType(System.String) mtodo sobrecarregar com uma seqncia que
descreve o tipo, e por chamar o GetGenericTypeDefinition mtodo com o tipo
Dictionary<String, Example> construdo no Visual Basic). (Dictionary(Of String, Example) O
MakeGenericType mtodo requer uma definio de tipo genrico.
C#
// Use the typeof operator to create the generic type // definition directly. To specify the generic type
definition, // omit the type arguments but retain the comma that separates // them. Type d1 =
typeof(Dictionary<,>); // You can also obtain the generic type definition from a // constructed class.
In this case, the constructed class // is a dictionary of Example objects, with String keys.
Dictionary<string, Example> d2 = new Dictionary<string, Example>(); // Get a Type object that
represents the constructed type, // and from that get the generic type definition. The // variables d1
and d4 contain the same type. Type d3 = d2.GetType(); Type d4 = d3.GetGenericTypeDefinition();
2. Construir uma matriz de argumentos Tipo para substituir para os parmetros tipo. A matriz
deve conter o nmero correto de Type Objetos, na mesma ordem em que aparecem na
lista de parmetros tipo. Neste caso, a chave (primeiro parmetro tipo) seja do tipo String, e
os valores no dicionrio so instncias de uma classe denominada Example.
C#
Type[] typeArgs = {typeof(string), typeof(Example)};
4. Use a CreateInstance sobrecarga mtodo para criar um objeto do tipo construdo. O cdigo
a seguir armazena duas instncias da classe Example no objeto resultante Dictionary<String,
Example>.
C#
object o = Activator.CreateInstance(constructed);
Exemplo
O exemplo de cdigo define um conjunto de tipos de teste, incluindo um tipo genrico que ilustra
restries de parmetro, tipo e mostra como para exibir informaes sobre esses tipos.
O exemplo constri um tipo a partir da Dictionary classe, criando uma matriz de argumentos Tipo
e chamar o MakeGenericType mtodo. Compara o Type objeto construdo uso
MakeGenericType com um Type objeto obtido usando typeof o programa (GetType. no Visual
Basic), demonstrar que eles sejam os mesmos Da mesma forma, o programa usa o
GetGenericTypeDefinition mtodo para obter a definio do tipo construdo, tipo genrico e
compara-o para o Type objeto que representa a Dictionary classe.
C#
using System; using System.Reflection; using System.Collections.Generic; using
System.Security.Permissions; // Define an example interface. public interface ITestArgument {} // Define an
example base class. public class TestBase {} // Define a generic class with one parameter. The parameter //
has three constraints: It must inherit TestBase, it must // implement ITestArgument, and it must have a
parameterless // constructor. public class Test<T> where T : TestBase, ITestArgument, new() {} // Define a
class that meets the constraints on the type // parameter of class Test. public class TestArgument : TestBase,
ITestArgument { public TestArgument() {} } public class Example { // The following method displays
information about a generic // type. private static void DisplayGenericType(Type t) {
Console.WriteLine("\r\n {0}", t); Console.WriteLine(" Is this a generic type? {0}", t.IsGenericType);
Console.WriteLine(" Is this a generic type definition? {0}", t.IsGenericTypeDefinition); // Get the generic
type parameters or type arguments. Type[] typeParameters = t.GetGenericArguments(); Console.WriteLine("
List {0} type arguments:", typeParameters.Length); foreach( Type tParam in typeParameters ) { if
(tParam.IsGenericParameter) { DisplayGenericParameter(tParam); } else { Console.WriteLine(" Type
argument: {0}", tParam); } } } // The following method displays information about a generic // type
parameter. Generic type parameters are represented by // instances of System.Type, just like ordinary types.
private static void DisplayGenericParameter(Type tp) { Console.WriteLine(" Type parameter: {0} position
{1}", tp.Name, tp.GenericParameterPosition); Type classConstraint = null; foreach(Type iConstraint in
tp.GetGenericParameterConstraints()) { if (iConstraint.IsInterface) { Console.WriteLine(" Interface
constraint: {0}", iConstraint); } } if (classConstraint != null) { Console.WriteLine(" Base type constraint: {0}",
tp.BaseType); } else Console.WriteLine(" Base type constraint: None"); GenericParameterAttributes
Compilando o cdigo
O cdigo contm as instrues C# using (Imports. no Visual Basic) necessrio para
compilao
H referncias do conjunto adicionais so necessrias.
Compilar o cdigo na linha de comando usando csc.exe, vbc.exe, ou CL.exe. Para
compilar o cdigo no Visual Studio, coloque-o em um modelo de projeto de aplicativo de
console.
O primeiro procedimento mostra como criar um mtodo genrico simples com dois parmetros
tipo, e como aplicar restries de classe, restries interface, e restries especiais com os
parmetros tipo.
O segundo procedimento mostra como para emitir o corpo mtodo, e como usar os parmetros do
mtodo genrico do tipo para criar instncias de tipos genricos e para chamar seus mtodos.
Importante
Um mtodo no genrico apenas porque ela pertence a um tipo genrico e usa os parmetros
Tipo do mesmo tipo. Um mtodo somente se tiver sua prpria lista de Parmetro tipo genrico.
Um mtodo genrico pode aparecer em um tipo nongeneric, como no exemplo. Para obter um
exemplo de um mtodo nongeneric em um tipo genrico, consulte Como Definir um Tipo Genrico
com Emisso de Reflexo.
3. Define o tipo o mtodo genrico pertence. O tipo no tem a ser genrico. Um mtodo
genrico pode pertencer a qualquer um tipo genrico ou nongeneric. Neste exemplo, o tipo
uma classe, no genricas, e nomeado DemoType.
C#
TypeBuilder demoType = demoModule.DefineType("DemoType", TypeAttributes.Public);
9. Definir o tipo de retorno para o mtodo, usando o SetReturnType mtodo. Neste exemplo,
uma instncia do TOutput ser retornada.
C#
factory.SetReturnType(TOutput);
10. Emitir o mtodo corpo, usando ILGenerator. Para obter detalhes, consulte o procedimento
To Emit the Method Body de acompanhamento.
Importante
11. Conclua o tipo que contm o mtodo e salvar o conjunto. O procedimento To Invoke the
Generic Method acompanha mostra duas maneiras de chamar o mtodo concludo.
C#
// Complete the type. Type dt = demoType.CreateType(); // Save the assembly, so it can be examined
with Ildasm.exe. demoAssembly.Save(asmName.Name+".dll");
2. Emitir cdigo para criar uma instncia do TOutput, usando a sobrecarga mtodo genrico
do mtodo System.Activator.CreateInstance. Usar essa sobrecarga requer o tipo
especificado para que um construtor sem parmetros, que a razo para adicionar essa
restrio para TOutput. Criar o mtodo genrico construdo, passagem TOutput para
MakeGenericMethod. Aps emissor cdigo para chamar o mtodo, emitir cdigo para
armazen-lo na varivel retVal usando Stloc_S o local
C#
MethodInfo createInst = typeof(Activator).GetMethod("CreateInstance", Type.EmptyTypes);
MethodInfo createInstOfTOutput = createInst.MakeGenericMethod(TOutput);
ilgen.Emit(OpCodes.Call, createInstOfTOutput); ilgen.Emit(OpCodes.Stloc_S, retVal);
3. Emitir cdigo para convertido para ICollection(Of TInput) o novo TOutput objeto e armazen-
lo na varivel ic local.
C#
ilgen.Emit(OpCodes.Ldloc_S, retVal); ilgen.Emit(OpCodes.Box, icollOfTInput);
ilgen.Emit(OpCodes.Castclass, icollOfTInput); ilgen.Emit(OpCodes.Stloc_S, ic);
6. Emitir cdigo para o loop. A primeira etapa para marcar a parte superior do loop, por
chamada MarkLabel com o loopAgain rtulo. Agora instrues filial que usam o rtulo ser
Branch a esse ponto no cdigo. A prxima etapa para empurrar o TOutput objeto,
convertido em ICollection(Of TInput), na pilha. Ele no necessrio imediatamente, mas
precisa fazer na posio para chamar o Add mtodo. Em seguida a matriz de entrada
empurrada na pilha, em seguida, a index varivel que contm o ndice atual para a matriz. O
Ldelem cdigo operao aparece o ndice e a matriz desativar a pilha e coloca o elemento
matriz indexada na pilha. Agora a pilha est pronta para a chamada para o
System.Collections.Generic.ICollection.Add( mtodo, que exibido coleo e o novo
elemento desativar a pilha e adiciona o elemento para a coleo.
O restante do cdigo no loop Incrementa o ndice e testa para ver se o loop For concludo:.
O ndice e um inteiro de 32 bits so 1 pressionado na pilha e adicionado, deixando a soma
na Pilha; a soma armazenada na index MarkLabel chamado para definir este ponto
como o ponto de entrada para o loop. O ndice carregado novamente. A matriz de entrada
pressionado na pilha, e Ldlen emitted para obter seu tamanho. O ndice e o
comprimento so agora na pilha, e Clt emitted para compar-las. Se o ndice for menor
que o comprimento, Brtrue_S ramificaes volta para o incio do loop.
C#
ilgen.MarkLabel(loopAgain); ilgen.Emit(OpCodes.Ldloc_S, ic); ilgen.Emit(OpCodes.Ldloc_S, input);
ilgen.Emit(OpCodes.Ldloc_S, index); ilgen.Emit(OpCodes.Ldelem, TInput);
ilgen.Emit(OpCodes.Callvirt, mAdd); ilgen.Emit(OpCodes.Ldloc_S, index);
ilgen.Emit(OpCodes.Ldc_I4_1); ilgen.Emit(OpCodes.Add); ilgen.Emit(OpCodes.Stloc_S, index);
ilgen.MarkLabel(enterLoop); ilgen.Emit(OpCodes.Ldloc_S, index); ilgen.Emit(OpCodes.Ldloc_S,
input); ilgen.Emit(OpCodes.Ldlen); ilgen.Emit(OpCodes.Conv_I4); ilgen.Emit(OpCodes.Clt);
ilgen.Emit(OpCodes.Brtrue_S, loopAgain);
7. Emitir cdigo para empurrar o TOutput objeto na Pilha e retornar do mtodo. As variveis
retVal locais e ic ambos contiverem referncias ao novo TOutput; ic usada apenas para
acessar o System.Collections.Generic.ICollection.Add( mtodo.
C#
ilgen.Emit(OpCodes.Ldloc_S, retVal); ilgen.Emit(OpCodes.Ret);
2. Para chamar a vinculados as mtodo, use o Invoke mtodo. O cdigo a seguir cria uma
matriz de Object, contendo uma matriz de seqncias de caracteres, como seu nico
elemento e passa-como lista de argumentos do mtodo genrico. O primeiro parmetro do
Invoke uma referncia nula porque o mtodo static. O valor de retorno convertido em
List(Of String), e o primeiro elemento exibido.
C#
object o = bound.Invoke(null, new object[]{arr}); List<string> list2 = (List<string>) o;
Console.WriteLine("The first element is: {0}", list2[0]);
3. Para chamar o mtodo usando um representante, voc deve ter um representante que
corresponda a assinatura do mtodo genrico construdo Uma maneira fcil para fazer isso
para criar um representante genrico. O cdigo a seguir cria uma instncia do
representante D genrico definida no cdigo de exemplo, usando a
System.Delegate.CreateDelegate(System.Type,System.Reflection.MethodInfo) sobrecarga
mtodo, e chama o representante. Representantes executar melhor que vinculados as
chamadas.
C#
Type dType = typeof(D<string, List <string>>); D<string, List <string>> test; test = (D<string, List
<string>>) Delegate.CreateDelegate(dType, bound); List<string> list3 = test(arr);
Console.WriteLine("The first element is: {0}", list3[0]);
4. O mtodo emitted tambm pode ser chamado de um programa que se refere ao conjunto
salvo.
Exemplo
O exemplo de cdigo a seguir cria um tipo nongeneric, DemoType,. com um mtodo genrico,
Factory Este mtodo tem dois parmetros tipo genrico, TInput Para especificar um tipo de entrada
e TOutput Para especificar um tipo de sada. O TOutput parmetro TYPE est restrita para
implementar ICollection<TInput> (ICollection(Of TInput). no Visual Basic), para ser um tipo de
referncia, e para que um construtor sem parmetros
O mtodo tem um parmetro formal, que uma matriz de TInput. O mtodo retorna uma instncia
TOutput que contm todos os elementos da matriz de entrada. Pode TOutput ser qualquer tipo a
coleo genrica que implementa a ICollection interface genrico.
Observao
Uma boa maneira para aprender a emitir cdigo para gravar um programa que executa a tarefa
voc est tentando se emitir, e use o Disassembler para examinar o MSIL produzido pelo
compilador Visual Basic, C#, ou Visual C++.
C#
using System; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; //
Declare a generic delegate that can be used to execute the // finished method. // public delegate TOut
D<TIn, TOut>(TIn[] input); class GenericMethodBuilder { // This method shows how to declare, in Visual
Basic, the generic // method this program emits. The method has two type parameters, // TInput and
TOutput, the second of which must be a reference type // (class), must have a parameterless constructor
(new()), and must // implement ICollection<TInput>. This interface constraint // ensures that
ICollection<TInput>.Add can be used to add // elements to the TOutput object the method creates. The
method // has one formal parameter, input, which is an array of TInput. // The elements of this array are
copied to the new TOutput. // public static TOutput Factory<TInput, TOutput>(TInput[] tarray) where
TOutput : class, ICollection<TInput>, new() { TOutput ret = new TOutput(); ICollection<TInput> ic = ret;
foreach (TInput t in tarray) { ic.Add(t); } return ret; } public static void Main() { // The following shows the
usage syntax of the C# // version of the generic method emitted by this program. // Note that the generic
parameters must be specified // explicitly, because the compiler does not have enough // context to infer the
type of TOutput. In this case, TOutput // is a generic List containing strings. // string[] arr = {"a", "b", "c",
"d", "e"}; List<string> list1 = GenericMethodBuilder.Factory<string, List <string>>(arr);
Console.WriteLine("The first element is: {0}", list1[0]); // Creating a dynamic assembly requires an
AssemblyName // object, and the current application domain. // AssemblyName asmName = new
AssemblyName("DemoMethodBuilder1"); AppDomain domain = AppDomain.CurrentDomain;
AssemblyBuilder demoAssembly = domain.DefineDynamicAssembly(asmName,
AssemblyBuilderAccess.RunAndSave); // Define the module that contains the code. For an // assembly with
one module, the module name is the // assembly name plus a file extension. ModuleBuilder demoModule =
demoAssembly.DefineDynamicModule(asmName.Name, asmName.Name+".dll"); // Define a type to
contain the method. TypeBuilder demoType = demoModule.DefineType("DemoType",
TypeAttributes.Public); // Define a public static method with standard calling // conventions. Do not specify
the parameter types or the // return type, because type parameters will be used for // those types, and the
type parameters have not been // defined yet. // MethodBuilder factory =
demoType.DefineMethod("Factory", MethodAttributes.Public | MethodAttributes.Static); // Defining
generic type parameters for the method makes it a // generic method. To make the code easier to read, each
// type parameter is copied to a variable of the same name. // string[] typeParameterNames = {"TInput",
"TOutput"}; GenericTypeParameterBuilder[] typeParameters =
factory.DefineGenericParameters(typeParameterNames); GenericTypeParameterBuilder TInput =
typeParameters[0]; GenericTypeParameterBuilder TOutput = typeParameters[1]; // Add special constraints.
// The type parameter TOutput is constrained to be a reference // type, and to have a parameterless
constructor. This ensures // that the Factory method can create the collection type. //
TOutput.SetGenericParameterAttributes( GenericParameterAttributes.ReferenceTypeConstraint |
GenericParameterAttributes.DefaultConstructorConstraint); // Add interface and base type constraints. //
The type parameter TOutput is constrained to types that // implement the ICollection<T> interface, to
ensure that // they have an Add method that can be used to add elements. // // To create the constraint, first
use MakeGenericType to bind // the type parameter TInput to the ICollection<T> interface, // returning the
type ICollection<TInput>, then pass // the newly created type to the SetInterfaceConstraints // method. The
constraints must be passed as an array, even if // there is only one interface. // Type icoll =
Compilando o cdigo
O cdigo contm as instrues C# using (Imports. no Visual Basic) necessrio para
compilao
H referncias do conjunto adicionais so necessrias.
Compilar o cdigo na linha de comando usando csc.exe, vbc.exe, ou CL.exe. Para
compilar o cdigo no Visual Studio, coloque-o em um modelo de projeto de aplicativo de
console.
Como Usar Assinatura Completa para Dar a um Assembly Dinmico um Nome Forte
Um conjunto dinmico pode ser fornecido um nome de alta segurana usando assinatura parcial
ou completo assinatura. Do AssemblyName para assinatura parcial, a chave pblica deve ser
especificada no passado para o DefineDynamicAssembly mtodo. O Common Language Runtime
aloca o espao dentro do arquivo executvel (PE) porttil para um BLOB de assinatura nome de
alta segurana, mas na verdade no no assinar o conjunto. O conjunto resultante pode
totalmente entrar em uma etapa Post-Processing usando ferramentas fornecidas no SDK do .NET
Framework.
Para completo assinatura, um par de chaves pblica / particular deve ser fornecido. Essas
entidades so normalmente armazenadas em um arquivo ou disco ou em um recipiente de chave
Propriedade por uma API criptografia Cryptographic Provider (CSP) Service. Chaves de baixa
segurana so geralmente gerado pelo CSPs baseados em software e exportado para um arquivo
para que eles podem ser verificados em sistemas de gerenciamento de cdigo de fonte durante o
desenvolvimento do projeto. Chaves de alta segurana geralmente so gerados por hardware que
geralmente ajuda a evitar exportao das teclas para razes de segurana. Tais pares de chaves
s podem ser acessados indiretamente por um recipiente de chave. O par de chaves nome de alta
segurana especificado usando a System.Reflection.StrongNameKeyPair classe.
O exemplo a seguir demonstra uso completo assinatura para dar um conjunto dinmico um nome
de alta segurana.
Exemplo
C#
FileStream fs = new FileStream("SomeKeyPair.snk", FileMode.Open); StrongNameKeyPair kp = new
StrongNameKeyPair(fs); fs.Close(); AssemblyName an = new AssemblyName(); an.KeyPair = kp;
AppDomain appDomain = Thread.GetDomain(); AssemblyBuilder ab =
appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
Observao
No use o contexto somente Reflection-para carregar uma verso de mscorlib.dll de uma verso
do .NET Framework diferente da verso no contexto de execuo.
Observao
Atributos aplicados para o conjunto ou seu contedo para podem ser definidos no conjunto, ou
que pode ser definida em outro conjunto carregado do contexto somente Reflection-. No
possvel saber antecipadamente onde os atributos so definidos.
Exemplo
O exemplo de cdigo define um atributo com dois Construtores e uma propriedade personalizado.
O atributo aplicado ao conjunto, para um tipo declarado no conjunto, para um mtodo do tipo, e
para um parmetro do mtodo. Quando executado, o conjunto carrega prprio para o contexto
somente Reflection-e exibe informaes sobre os atributos personalizados que foram aplicadas
para ele e para os tipos e membros que ele contm.
Observao
Para simplificar exemplo de cdigo, o conjunto carrega e examina prprio. Normalmente, voc no
deve esperar localizar o mesmo conjunto carregado no contexto de execuo e o contexto
somente Reflection-.
Este tpico mostra como criar um tipo genrico simples com parmetros dois tipo, como aplicar
restries de classe, restries de interface, e restries especiais aos parmetros tipo, e como
criar membros que usam os parmetros os tipo de classe como tipos de parmetro e tipos de
retorno.
Importante
Um mtodo no genrico apenas porque ela pertence a um tipo genrico e usa os parmetros
Tipo do mesmo tipo. Um mtodo somente se tiver sua prpria lista de Parmetro tipo genrico.
A maioria dos mtodos em tipos genricos so no genricos, como no exemplo. Para obter um
exemplo de emissor um mtodo genrico, consulte Como Definir um Mtodo genrico com
Emisso de Reflexo.
5. Adicionar restries especiais aos parmetros tipo. Neste exemplo, parmetro TFirst tipo
restrito para tipos que tenham construtor sem parmetros, e para tipos de referncia.
C#
TFirst.SetGenericParameterAttributes( GenericParameterAttributes.DefaultConstructorConstraint |
GenericParameterAttributes.ReferenceTypeConstraint);
7. Definir um campo. Neste exemplo, o tipo do campo especificado pelo parmetro TFirst
tipo. Derivar GenericTypeParameterBuilder de Type, portanto, voc pode utilizar
parmetros tipo genrico em qualquer lugar um tipo pode ser usado.
C#
FieldBuilder exField = myType.DefineField("ExampleField", TFirst, FieldAttributes.Private);
8. Definir um mtodo que usa os parmetros Tipo do tipo genrico. Observe que esses
mtodos so no genricos a menos que tenham suas prprias listas de Parmetro tipo. O
cdigo a seguir define um static mtodo (Shared. (List(Of TFirst)) que contm todos os
elementos da matriz que usa uma matriz de TFirst e retorna) no Visual Basic No Visual
Basic um List<TFirst> Para definir esse mtodo, necessrio para criar o tipo List<TFirst>,
chamando MakeGenericType na definio tipo genrico, List<T>. (The T is omitted when
you use the typeof operator (GetType in Visual Basic) to get the generic type definition.) O
tipo de parmetro criado, usando o MakeArrayType mtodo.
C#
Type listOf = typeof(List<>); Type listOfTFirst = listOf.MakeGenericType(TFirst); Type[]
mParamTypes = {TFirst.MakeArrayType()}; MethodBuilder exMethod =
myType.DefineMethod("ExampleMethod", MethodAttributes.Public | MethodAttributes.Static,
listOfTFirst, mParamTypes);
9. Emitir o corpo de mtodo. O corpo de mtodo consiste de operao trs trs 8087 que
carregam a matriz entrada na pilha, chamar o List<TFirst> Construtor que leva
IEnumerable<TFirst> (que faz todo o trabalho de colocar os elementos entrados para a lista),
e retornar (deixando o novo List objeto na Pilha). A parte difcil do emissor esse cdigo
estiver obtendo o construtor.
No h suporte para o GetConstructor mtodo no portanto, possvel para obter o
Construtor de List<TFirst> diretamente. a GenericTypeParameterBuilder, Primeiro,
necessrio para obter o construtor da definio List<T> do tipo genrico e que a converte
para chamar um mtodo para o construtor correspondente de List<TFirst>.
Leva o construtor usado para este exemplo de cdigo um IEnumerable<T>. Observe,
contudo, no a definio da interface genrica do IEnumerable tipo genrico que este ; em
vez disso, o parmetro T do List<T> tipo deve ser substitudo para o parmetro T de tipo de
IEnumerable<T>. (This seems confusing only because both types have type parameters
Observao
A definio tipo genrico expresso como IEnumerable<> Quando voc usa o typeof operador em
C#, ou IEnumerable(Of ) Quando voc usa o GetType operador no Visual Basic.
11. Chamar o mtodo. ExampleMethod No genricas, mas o tipo ele pertence a genrico;
portanto, a fim de obter uma MethodInfo que pode ser chamado ele necessrias para criar
um tipo construdo da definio do tipo para Sample. O tipo construdo usa a Example classe,
que satisfaa as restries em TFirst porque ele um tipo de referncia e tem um construtor
sem parmetros padro, e a ExampleDerived classe que satisfaa as restries no TSecond.
(O cdigo para ExampleDerived pode ser encontrado na seo a cdigo exemplo.) Esses
dois tipos so passados para MakeGenericType para criar o tipo construdo. O
MethodInfo ento obtida atravs do GetMethod mtodo.
C#
Type[] typeArgs = {typeof(Example), typeof(ExampleDerived)}; Type constructed =
finished.MakeGenericType(typeArgs); MethodInfo mi = constructed.GetMethod("ExampleMethod");
12. O cdigo a seguir cria uma matriz de Example Objetos, coloca essa matriz em uma matriz
do tipo Object que representa os argumentos do mtodo para ser chamado, e transmite-los
para o Invoke mtodo. O primeiro argumento do mtodo Invoke uma referncia nula
porque o mtodo static.
C#
Example[] input = {new Example(), new Example()}; object[] arguments = {input}; List<Example>
listX = (List<Example>) mi.Invoke(null, arguments); Console.WriteLine( "\nThere are {0} elements
in the List<Example>.", listX.Count);
Exemplo
O parmetro TSecond tipo usado para demonstrar restries classe e interface, usando a classe
base e interfaces, e o parmetro TFirst de tipo usado para demonstrar restries especiais.
O exemplo de cdigo define um campo e um mtodo usando parmetros tipo a classe para o
tipo de campo e para o parmetro e retornar tipo do mtodo.
O programa inclui um mtodo que lista informaes sobre um tipo genrico, e um mtodo que lista
as restries especiais em um parmetro tipo. Esses mtodos so usados para exibir informaes
sobre a classe concluda Sample.
C#
using System; using System.Reflection; using System.Reflection.Emit; using System.Collections.Generic; //
Define a trivial base class and two trivial interfaces // to use when demonstrating constraints. // public class
ExampleBase {} public interface IExampleA {} public interface IExampleB {} // Define a trivial type that can
substitute for type parameter // TSecond. // public class ExampleDerived : ExampleBase, IExampleA,
IExampleB {} public class Example { public static void Main() { // Define a dynamic assembly to contain the
sample type. The // assembly will not be run, but only saved to disk, so // AssemblyBuilderAccess.Save is
specified. // AppDomain myDomain = AppDomain.CurrentDomain; AssemblyName myAsmName = new
AssemblyName("GenericEmitExample1"); AssemblyBuilder myAssembly =
myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); // An assembly
is made up of executable modules. For a single- // module assembly, the module name and file name are the
same // as the assembly name. // ModuleBuilder myModule =
myAssembly.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll"); // Get type objects
for the base class trivial interfaces to // be used as constraints. // Type baseType = typeof(ExampleBase);
Type interfaceA = typeof(IExampleA); Type interfaceB = typeof(IExampleB); // Define the sample type. //
TypeBuilder myType = myModule.DefineType("Sample", TypeAttributes.Public); Console.WriteLine("Type
'Sample' is generic: {0}", myType.IsGenericType); // Define type parameters for the type. Until you do this,
// the type is not generic, as the preceding and following // WriteLine statements show. The type parameter
names are // specified as an array of strings. To make the code // easier to read, each
GenericTypeParameterBuilder is placed // in a variable with the same name as the type parameter. //
string[] typeParamNames = {"TFirst", "TSecond"}; GenericTypeParameterBuilder[] typeParams =
myType.DefineGenericParameters(typeParamNames); GenericTypeParameterBuilder TFirst =
typeParams[0]; GenericTypeParameterBuilder TSecond = typeParams[1]; Console.WriteLine("Type 'Sample'
is generic: {0}", myType.IsGenericType); // Apply constraints to the type parameters. // // A type that is
substituted for the first parameter, TFirst, // must be a reference type and must have a parameterless //
constructor. TFirst.SetGenericParameterAttributes(
GenericParameterAttributes.DefaultConstructorConstraint |
GenericParameterAttributes.ReferenceTypeConstraint); // A type that is substituted for the second type //
parameter must implement IExampleA and IExampleB, and // inherit from the trivial test class
Compilando o cdigo
O cdigo contm as instrues C# using (Imports. no Visual Basic) necessrio para
compilao
H referncias do conjunto adicionais so necessrias.
Compilar o cdigo na linha de comando usando csc.exe, vbc.exe, ou CL.exe. Para
compilar o cdigo no Visual Studio, coloque-o em um modelo de projeto de aplicativo de
console.
Voc pode adicionar marcas inteligentes para componentes formulrios janela s opes Design-
time de fornecimento comumente usado. Itens em um painel Marca Inteligente-logicamente so
agrupados por categoria, e ocorrncias individuais DesignerActionMethodItem opcionalmente
podem ser duplicadas como entradas de verbo Designer. Muitos dos componentes padro e
controles fornecidos com o .NET Framework conter marca inteligente e melhorias de verbo
Designer. Componente e autores controle personalizado tambm podem adicionar suporte de
marca inteligente, normalmente usando o modelo de envio.
Adicionar marcas inteligentes com o modelo de envio requer as seguintes adies ao projeto
componente:
Para copiar o cdigo deste tpico como uma lista simples, consulte COMO: Anexar marcas
inteligentes para um componente de formulrios do Windows.
Pr-requisitos
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#
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); }
Comentrios
Observao
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.
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.
Pr-requisitos
Para modificar uma mensagem SOAP, voc precisar obter uma referncia ao fluxo que pode ser
usada para obter o contedo de futuras mensagens SOAP. Sua nica oportunidade para obter
essa referncia para substituir o ChainStream mtodo.
Para obter um exemplo de uma implementao do mtodo ChainStream, comuns Consulte Como
implementar o mtodo ChainStream para salvar referncias a objetos do fluxo:.
A classe que deriva de SoapExtension tem dois mtodos para inicializar dados, GetInitializer e
Initialize.
Para obter um exemplo de como inicializar dados quando uma extenso SOAP configurado em
cache Consulte, Em cache Initialize dados quando uma extenso SOAP configurado como:.
Uma extenso SOAP pode ser configurado para ser executado usando um atributo personalizado
ou por modificar um arquivo de configurao. Um atributo personalizado aplicada a um mtodo
de servio da Web. Quando um arquivo de configurao usada, a extenso SOAP executada
com os servios da Web no escopo do arquivo de configurao. Para obter detalhes sobre como
arquivos de configurao funcionam, consulte Configurando aplicativos.
Desenvolver um servio XML da Web usando o ASP.NET inicia com as seguintes etapas:
Quando voc cria um servio XML da Web no ASP.NET, voc posicione a diretiva necessrio @
WebService na parte superior de um arquivo de texto com um extenso de nome de
arquivo.asmx. A presena do arquivo.asmx e a @ WebService diretiva correlacionar o endereo
URL do servio da Web XML com sua implementao. Em seguida, voc implementar a classe
servio XML da Web que define os mtodos e tipos de dados visvel por clientes servio XML da
Web. Finalmente, voc adicionar seu lgica servio XML Web a esses mtodos para processar
solicitaes de servio XML Web e enviar respostas back. A classe servio XML da Web voc
definir podem ser includos diretamente no arquivo.asmx, ou em um arquivo separado. Se voc
usar um arquivo separado, ele deve ser compilado em um conjunto. Opcionalmente, voc pode
aplicar um WebService atributo para a classe implementar o servio XML da Web. A classe que
implementa o servio XML da Web pode derivar a partir da WebService classe.
Observao
Classes que implementam uma Web Servio que foi criado usando o ASP.NET podem
opcionalmente derivar a partir da WebService classe para obter acesso a objetos ASP.NET
comuns, tais como Aplicativo, Sesso a, Usurio. e Contexto
C#
<%@ WebService Language="C#" Class="Util" %> using System; using System.Web.Services; public class
Util: WebService
Aplicar o atributo opcional WebService a uma classe que implementa um servio da Web para
definir o padro namespace para XML para o servio da Web, que originalmente
http://tempuri.org, juntamente com uma seqncia para descrever o servio da Web.
C#
<%@ WebService Language="C#" Class="Util" Debug=true%> using System.Web.Services; using System;
[WebService(Namespace="http://www.contoso.com/")] public class Util: WebService
Mtodos de uma classe que implementa uma Web no servio fazer tem automaticamente a
capacidade de ser comunicadas com atravs da Web, mas com servios da Web criados com
ASP.NET, muito simples para adicionar esse recurso. Para adicionar esse recurso, aplique um
WebMethod Atributo ao mtodos pblicos. Mtodos de um servio da Web que pode ser
comunicadas com atravs da Web so chamados mtodos Servio da Web.
O exemplo de cdigo a seguir tem dois mtodos pblicos, um dos quais um mtodo de servio
da Web. O Multiply mtodo um mtodo de servio da Web, porque ele tem um WebMethod
Atributo aplicado a ele.
C#
<%@ WebService Language="C#" Class="Util" %> using System.Web.Services; using System;
[WebService(Namespace="http://www.contoso.com/")] public class Util: WebService { [ WebMethod]
public long Multiply(int a, int b) { return a * b; } }
Uma das vantagens de usar o criador Mobile ASP.NET a capacidade para criar aplicativos que
se beneficiam dos recursos e consideraes especiais para exibir contedo em seus dispositivos
de destino. Filtros dispositivo, tcnicas templating, e propriedade recursos de substituio no
designer permitem que voc pode personalizar seu aplicativo para processar controles de maneira
diferente para tipos de dispositivo especfico. O seguinte conjunto de procedimentos leva voc
durante o processo de criao de modelos e sobrescrever propriedades para um controle.
Nessa explicao passo a passo, voc ser adicionar um List controle a um formulrio, definir um
filtro do dispositivo para uso com esse controle, aplicar o filtro para o controle, editar os modelos
para o controle, e aplique sobrescrever propriedades para o filtro do dispositivo.
Observao
O filtro aplicado do dispositivo denominado (Default) sempre resulta em uma avaliao com xito.
Se estiver presente, este filtro bloqueia todas as outras avaliaes abaixo na lista. Portanto, ela
dever, logicamente aparecer como o ltimo filtro do dispositivo na lista Applied Device Filters
drop-down. O (Default) filtro depois captura cada dispositivo que no corresponde a nenhum dos
filtros acima na lista. Para obter mais informaes, consulte Introduo ao dispositivo filtros.
Agora a Templating Options caixa de dilogo est aberta, e voc pode selecionar o filtro do
dispositivo que voc deseja usar para editar os modelos.
1. Use a Applied Device Filters lista para selecionar o filtro do dispositivo que voc deseja
usar para editar os modelos.
2. Selecione um esquema de marcao. Nesse caso, para criar modelos para dispositivos de
destino esse navegador use um HTML, selecione Mobile HTML3.2 Template (esse o
padro).
Observao
Agora o controle selecionado est pronto para modelo modo edio. Cada controle pode definir
vrios modelos. Por exemplo, o List controle define os seguintes modelos:
Modelo de cabealho
Modelo rodap
Item template
Modelo AlternatingItem
Modelo separador
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
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.
Observao
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).
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.
Observao
A verso da sua implantao pode estar distintas da verso dos arquivos do aplicativo.
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
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.
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
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:
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.
Criar Projetos
Para marcar conjuntos como opcionais em seu aplicativo ClickOnce usando o manifesto
gerao e ferramenta de edio-cliente grfico (MageUI.exe)
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.
Pr-requisitos
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
Seu editor tipo UI Personalizada exibe a interface edio usar um controle Windows Forms. Esse
controle denominado LightShapeSelectionControl, e ele deriva de UserControl. Seu construtor usa
o valor da propriedade atual e uma referncia IWindowsFormsEditorService. O controle de
exibio usa o CloseDropDown mtodo no IWindowsFormsEditorService para fechar a janela
Lista suspensa quando o usurio clica em uma seleo.
Para implementar comportamento Editor tipo UI, derivar da classe UITypeEditor base. Essa
classe chamado LightShapeEditor.
O GetEditStyle mtodo indica para o ambiente de desenvolvimento que tipo de usurio interface
a implementa Editor tipo UI. Os valores possveis so definidos no tipo UITypeEditorEditStyle. A
LightShapeEditor implementa uma DropDown interface digite Editor.
Voc pode fornecer uma representao grfica de valor sua propriedade por substituir o
PaintValue mtodo.
Quando estiver pronto para uso em seu controle personalizado, o editor tipo UI anexar
propriedade. a uma propriedade, a propriedade com base no tipo MarqueeLightShape, implementar
e aplicar o LightShapeEditor a EditorAttribute
Voc pode testar seu editor tipo UI, criando uma instncia do seu controle personalizado e anex-
los a um PropertyGrid controle usando a SelectedObject propriedade.
Se voc estiver usando Visual Studio, voc pode criar um novo projeto aplicativo do Windows,
referncia conjunto o do controle, e adicionar uma instncia do seu controle para o formulrio. H
suporte para esta tarefa em Visual Studio abrangente.
Quando as propriedades de seu controle so exibidas no tempo de criao, voc pode selecionar
a LightShape propriedade. Quando ele estiver selecionado, uma seta suspensa. aparece ( )
Quando voc clica na seta, o controle de exibio exibida sob a entrada Propriedade. Clique no
crculo ou quadrado para selecionar o valor. Aps voc clicar em, o controle de exibio descarta
propriamente dito, e o valor selecionado exibido no PropertyGrid.
Observao
Quando voc desenvolver seu personalizadas UITypeEditor, recomendvel que voc definir o
nmero de criao para incrementar com cada compilao. Isso impede que verses mais
antigas, armazenadas em cache de sendo criada no ambiente de desenvolvimento. seu
UITypeEditor
Prximas etapas
Aps voc ter criado seu prprio Editor tipo UI, Explore outras maneiras para interagir com um
PropertyGrid e o ambiente de criao:
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#
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
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); } }
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 mostra como usar o esttico SetComplete e SetAbort mtodos da classe
System.EnterpriseServices.ContextUtil. Para obter mais informaes sobre esses mtodos,
consulte Votao em uma transao automticas.
Exemplo
C#
//Try to do something crucial to the transaction in progress. if( !DoSomeWork() ) { ContextUtil.SetAbort();
//Something goes wrong. } else { ContextUtil.SetComplete(); //All goes well. }
Compilando o cdigo
Exemplo
Compilando o cdigo
Para criar um objeto agrupado e definir seu tamanho e tempo limite limita
1. Definir uma classe que deriva da classe System.EnterpriseServices.ServicedComponent, e
aplique o ObjectPoolingAttribute atributo classe. Por exemplo, o cdigo a seguir define
uma classe denominada TestObjectPooling e define e CreationTimeout propriedades para a
classe. o MinPoolSize, MaxPoolSize
C#
[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeout=20000)] public
class TestObjectPooling : ServicedComponent { }
Exemplo
C#
[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeout=20000)] public class
TestObjectPooling : ServicedComponent { public void Perform () { // Method contents go here. } protected
override void Activate() { // Called when removed from the pool. } protected override void Deactivate() { //
Called before deactivating or placing back in pool. } protected override bool CanBePooled() { // Called after
Deactivate. Indicate your vote here. return true; } }
O procedimento a seguir descreve como criar um mtodo de servio da Web que usa transaes
automticas. Se ocorrer uma exceo enquanto um mtodo de servio da Web est participando
em uma transao, ASP.NET anula automaticamente a transao. Da mesma forma, se nenhuma
exceo ocorrer, a transao confirmada automaticamente.
2. Definir uma classe que deriva da classe WebService. Por exemplo, o cdigo a seguir
define uma classe denominado Pedidos que deriva da classe WebService.
C#
public class Orders : WebService { }
3. Para cada mtodo Web que deve participar automaticamente de uma transao, aplicar o
WebMethodAttribute atributo, e definir a opo da transao. Por exemplo, no cdigo a
seguir o atributo WebMethod aplicado para o DeleteAuthor mtodo, e a TransactionOption
propriedade definida como TransactionOption.RequiresNew.
C#
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int DeleteAuthor(string
lastName) { // Perform the required database task. }
Exemplo
C#
<%@ WebService Language="C#" Class="Orders" %> <%@ assembly name="System.EnterpriseServices"
%> using System; using System.Data; using System.Data.SqlClient; using System.Web.Services; using
System.Web.Util; using System.EnterpriseServices; public class Orders : WebService { [
WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int DeleteAuthor(string
lastName) { String deleteCmd = "DELETE FROM authors2 where au_lname='" + lastName + "'" ;
SqlConnection sqlConn = new SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver");
SqlCommand myCommand = new SqlCommand(deleteCmd,sqlConn); // If a Web service method is
participating in a transaction and an // exception occurs, ASP.NET automatically aborts the transaction. //
Likewise, if no exception occurs, then the transaction is // automatically committed.
myCommand.Connection.Open(); return myCommand.ExecuteNonQuery(); } }
Este exemplo mostra como definir a propriedade SoapVRoot " MyVRoot ".
Exemplo
C#
[ApplicationActivation(ActivationOption.Library, SoapVRoot="MyVRoot")]
Exemplo
C#
[Transaction(TransactionOption.Required, Isolation=TransactionIsolationLevel.Serializable, Timeout=10)]
Compilando o cdigo
Este exemplo mostra como para fornecer o nome do aplicativo, usando o conjunto - atributo
ApplicationName.
Exemplo
C#
using System.EnterpriseServices; [ assembly: ApplicationName("BankComponent")] public class Account :
ServicedComponent { static void Main() {} }
Compilando o cdigo
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Exemplo do cdigo
2. Crie duas classes que derivar da classe definida na etapa 1 e defina o atributo de
transaes para ambas as classes. Por exemplo, o cdigo a seguir declara duas classes
CTransaction1 e CTransaction2 derivar de classe Base, e tm seu conjunto de atributos de
transaes.
C#
[Transaction] public class CTransaction1 : Base { // Insert your transaction logic here. } [Transaction]
public class CTransaction2 : Base { // Insert your transaction logic here. }
3. Criar um aplicativo do cliente que usa as classes criadas na etapa 2 para testar o recurso
BYOT.
1. Criar uma instncia de uma das classes definidas na etapa 2. Por exemplo, o
cdigo a seguir cria uma instncia da classe CTransaction1.
C#
class BYOTDemonstration { static void Main() { CTransaction1 tx1 = new CTransaction1(); } }
2. Recuperar a transao COM + DTC atual do objeto criado no 3.a etapa. Por
exemplo, o cdigo a seguir recupera o objeto transaes a partir da propriedade
Transaction pblica da classe CTransaction1.
C#
Object tx = tx1.Transaction;
Exemplo
C#
using System; using System.Reflection; using System.EnterpriseServices; [assembly:
AssemblyKeyFileAttribute("byotdemo.snk")] public class Base : ServicedComponent { public Object
Transaction { get { return ContextUtil.Transaction; } } } [Transaction] public class CTransaction1 : Base { //
Insert your transaction logic here. } [Transaction] public class CTransaction2 : Base { // Insert your
transaction logic here. } class BYOTDemonstration { static void Main() { /* Create a transactional object, and
then get its transaction. */ CTransaction1 tx1 = new CTransaction1(); Console.WriteLine("Created
transaction1."); Object tx = tx1.Transaction; Console.WriteLine("Got the transaction of transaction1.");
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Console.WriteLine("Created transaction2 using the transaction of transaction1."); } }
Exemplo
C#
[PrivateComponent] public class CPrivate : ServicedComponent
Compilando o cdigo
Este exemplo mostra como definir o tipo de ativao para " Servidor ".
Exemplo
C#
using System.EnterpriseServices; [ assembly: ApplicationActivation(ActivationOption.Server)] public class
Account : ServicedComponent { static void Main() {} }
Compilando o cdigo
Exemplo
C#
[Synchronization] public class TestSync : ServicedComponent
Compilando o cdigo
O procedimento a seguir descreve como preparar uma classe para participar de uma transao
automtica.
Este exemplo mostra como habilitar ativao JIT e desativao e de uma classe.
Exemplo
C#
[JustInTimeActivation] public class TestJITObjectPooling : ServicedComponent
Compilando o cdigo
Exemplo
C#
[Transaction(TransactionOption.Supported)] public class Account : ServicedComponent { [AutoComplete]
public void Debit(int amount) { // Do some database work. Any exception thrown here aborts the //
transaction; otherwise, transaction commits. } }
Compilando o cdigo
Exemplo do cdigo
O servio QC COM + fornece uma maneira de uma classe componente para ser chamado
assincronamente USAR O enfileiramento de mensagens Microsoft. Para obter mais informaes
sobre componentes enfileirados derivados da System.EnterpriseServices.ServicedComponent
classe, consulte O QC (queueds Components).
Para implementar um componente enfileirado que exibe uma mensagem de forma assncrona
1. Importar espao para nome System.EnterpriseServices.
C#
using System.EnterpriseServices;
3. Definir uma interface na fila, e aplique o InterfaceQueuing atributo interface. Por exemplo
o cdigo a seguir mostra o atributo InterfaceQueuing aplicada para a IQComponent interface
que tenha um nico mtodo DisplayMessage.
C#
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
Exemplo
C#
using System.Reflection; using System.EnterpriseServices; [assembly: ApplicationName("QCDemoSvr")]
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationQueuing(Enabled=true,
QueueListenerEnabled=true)] [assembly: AssemblyKeyFile("QCDemoSvr.snk")] namespace QCDemo {
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); } public class
QComponent : ServicedComponent, IQComponent { public void DisplayMessage(string msg) {
MessageBox.Show(msg, "Processing message"); } } }
Exemplo do cdigo
O procedimento e exemplo a seguir mostram como para implementar uma classe de evento e
coletor de eventos que implementam uma interface de eventos comuns, mais um editor para
acionar um evento. Para obter mais informaes sobre como usar o modelo flexvel coupled
Eventos COM +, consulte Eventos flexvel Coupled.
Exemplo
C#
using System; using System.IO; using System.Reflection; using System.EnterpriseServices; using
System.Runtime.InteropServices; [assembly: ApplicationName("EventDemo")] [assembly:
ApplicationActivation(ActivationOption.Library)] [assembly: AssemblyKeyFile("EventDemoSvr.snk")]
namespace EventDemo { public interface ILceMsg { void EventMethod(string message); } [EventClass]
public class LceClass : ServicedComponent, ILceMsg { public void EventMethod(string message){} } public
class LceSink : ServicedComponent, ILceMsg { public void EventMethod(string message) {
MessageBox.Show(message, "Event sink"); } } }
C#
//Publisher protected void Fire_Click (object sender, System.EventArgs e) { ILceMsg evt = (ILceMsg) new
LceClass(); evt.EventMethod("Hello events"); }
Para configurar construo de objeto e definir a seqncia de inicializao padro para uma
classe
1. Definir uma classe que deriva direta ou indiretamente a partir da
System.EnterpriseServices.ServicedComponent classe. Por exemplo, o cdigo a seguir
mostra uma classe TestObjectConstruct que deriva diretamente da classe
System.EnterpriseServices.ServicedComponent.
C#
4. No aplicativo do cliente, criar uma instncia da classe do componente sem especificar uma
seqncia de construo, para que o padro usado. Por exemplo, o cdigo a seguir cria
uma instncia da classe TestObjectConstruct, e a seqncia de construo padro ser "Initial
Catalog=Northwind;Data Source=.\\SQLServerInstance;Trusted_Connection=yes".
C#
public class App { public static void Main() { TestObjectConstruct order = new TestObjectConstruct();
order. ConnectToDatabase(); } }
O System.Reflection espao para nome contm vrios mtodos para obter informaes de um
conjunto de mdulos (assembly). Esta seo demonstra um dos mtodos. Para obter informaes
adicionais, consulte Viso geral de reflexo.
Exemplo
C#
using System; using System.Reflection; class Asminfo1 { public static void Main(string[] args) {
Console.WriteLine ("\nReflection.MemberInfo"); //Get the Type and MemberInfo. //Insert the fully
qualified class name inside the quotation marks in the following statement. Type MyType
=Type.GetType("System.IO.BinaryReader"); MemberInfo[] Mymemberinfoarray =
MyType.GetMembers(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Insta
nce|BindingFlags.DeclaredOnly); //Get and display the DeclaringType method. Console.Write("\nThere are
{0} documentable members in ", Mymemberinfoarray.Length); Console.Write("{0}.", MyType.FullName);
foreach (MemberInfo Mymemberinfo in Mymemberinfoarray) { Console.Write("\n" +
Mymemberinfo.Name); } } }
Um conjunto de Arquivo nico, que o tipo mais simples do conjunto, contm informaes de tipo
e implementao,, bem como o Manifesto do conjunto. Voc pode usar Compiladores de linha de
comando ou Visual Studio 2005 Para criar um conjunto de Arquivo nico. Por padro, o
compilador cria um arquivo de montagem com uma extenso.exe.
Observao
Para Visual Studio 2005 C# e Visual Basic pode ser usada somente para criar conjuntos de
Arquivo nico. Se voc deseja criar vrios arquivos conjuntos, use Compiladores de linha de
comando ou Visual Studio 2005 com as extenses Managed do C++.. ou Visual Studio 2005 Com
o Managed Extensions para C++
Os procedimentos a seguir mostram como criar conjuntos de Arquivo nico usando Compiladores
de linha de comando.
C#
csc myCode.cs
Para criar um conjunto com uma extenso.exe e especificar o nome do arquivo de sada
C#
csc /out:myAssembly.exe myCode.cs
Um conjunto de biblioteca semelhante a uma biblioteca de classes. Ele contm tipos que sero
referenciados por outros conjuntos, mas ele tem nenhum ponto de entrada para iniciar a
execuo.
C#
csc /out:myCodeLibrary.dll /t:library myCode.cs
Um host Runtime de idioma comum cria domnios aplicativos automaticamente quando eles so
necessrios. No entanto, voc pode criar seus prprios domnios aplicativos e carreg-los esses
O exemplo a seguir cria um novo domnio do aplicativo, atribui o nome MyDomain, e seguida,
imprime o nome de domnio host e domnio de aplicativo filho recm-criado para o console.
Exemplo
C#
using System; using System.Reflection; class AppDomain1 { public static void Main() {
Console.WriteLine("Creating new AppDomain."); AppDomain domain =
AppDomain.CreateDomain("MyDomain"); Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
}}
Procedimentos
Para exibir os nomes de conjuntos totalmente qualificados no cache de conjunto global usando a
ferramenta .NET Framework Configuration
1. Clique no Start boto, aponte para Administrative Tools, e clique em Microsoft .NET
Framework Configuration
2. Clique em Manage the Assembly Cache e, clique em View List of Assemblies in the
Assembly Cache.
Para obter informaes sobre como usar a ferramenta Global Assembly Cache para exibir os
nomes de conjuntos, totalmente qualificados Consulte Como Visualizar o Contedo da Cache
Global de Assemblies.
Para obter mais informaes sobre como definir atributos do conjunto, como verso, cultura e
nome do conjunto, consulte Definir atributos Assembly. Para obter mais informaes sobre dar um
conjunto um nome de alta segurana, consulte Criando e usando assemblies de nome forte.
Exemplo
C#
using System; using System.Reflection; class asmname { public static void Main() { Type t =
typeof(System.Data.DataSet); string s = t.Assembly.FullName.ToString(); Console.WriteLine("The fully
qualified assembly name containing the specified class is {0}.", s); } } Imports System Imports
System.Reflection Imports Microsoft.VisualBasic ' For a class not contained in mscorlib.dll, compile this code
with ' the /r:<dllname> option; for example,compile the code below using: ' vbc asmname.vb
/r:System.Data.dll /r:System.dll /r:System.Xml.dll ' If the class is contained in mscorlib.dll, the
/r:<dllname> compiler option is unnecessary. Class asmname Public Shared Sub Main() Dim t As Type =
GetType(System.Data.DataSet) Console.WriteLine("The fully qualified assembly name containing the
specified class is {0}.", t.Assembly.FullName.ToString()) End Sub 'Main End Class 'asmname
Voc pode fornecer o Common Language Runtime com informaes de configurao para um
novo domnio do aplicativo usando a AppDomainSetup classe. Ao criar seus prprios domnios de
aplicativo, a propriedade mais importante ApplicationBase. As outras AppDomainSetup
propriedades so usadas principalmente por hosts de tempo de execuo para configurar um
domnio aplicativo especfico.
Observao
O exemplo a seguir cria uma instncia da classe AppDomainSetup, usa esta classe para criar um
novo domnio do aplicativo, grava as informaes ao console, e depois descarrega o domnio do
aplicativo.
Exemplo
C#
using System; using System.Reflection; class AppDomain4 { public static void Main() { // Create application
domain setup information. AppDomainSetup domaininfo = new AppDomainSetup();
domaininfo.ApplicationBase = "f:\\work\\development\\latest"; // Create the application domain.
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo); // Write application
domain information to the console. Console.WriteLine("Host domain: " +
AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("child domain: " + domain.FriendlyName);
Console.WriteLine("Application base is: " + domain.SetupInformation.ApplicationBase); // Unload the
application domain. AppDomain.Unload(domain); } }
O exemplo a seguir inicia com " Um Hello, bsico " World programa. Depois compilar o programa,
use Ildasm.exe para desmontar o conjunto Hello.exe e exibir o manifesto do conjunto.
Visual Basic
Imports System Public Module modmain Sub Main() Console.WriteLine ("Hello World using Visual Basic!")
End Sub End Module using System; class MainApp { public static void Main() { Console.WriteLine("Hello
World using C#!"); } } #using <mscorlib.dll> using namespace System; void main() {
Console::WriteLine(L"Hello World using Managed Extensions!"); }
A tabela a seguir descreve cada diretiva no conjunto do manifesto da montagem Hello.exe usado
no exemplo.
Diretiva Descrio
.assembly extern Especifica outro conjunto que contm itens referenciados pelo mdulo
<assembly name> atual (, neste exemplo, mscorlib).
.publickeytoken <token> Especifica o smbolo da chave real da montagem referenciada.
.ver <version number> Especifica o nmero de verso da montagem referenciada.
.assembly <assembly Especifica o nome do conjunto.
name>
.hash algorithm <int32 Especifica o algoritmo hash usado.
value>
.ver <version number> Especifica o nmero de verso do conjunto.
Uma referncia em tempo de compilao ocorre quando voc indicar o compilador para que seu
conjunto faz referncia outro conjunto explicitamente. Quando voc usar em tempo de compilao
referncia, automaticamente o compilador obtm a chave pblica do conjunto de nome seguro de
destino e coloca-na referncia do conjunto da montagem sendo compilada.
Observao
Um conjunto de nome seguro s pode usar tipos de outros conjuntos de nome seguro. Caso
contrrio a segurana do conjunto de nome seguro deve ser comprometida.
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>
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
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para remover um conjunto de cache de
conjunto global.
gacutil -u hello
O SDK do .NET Framework tambm fornece uma extenso Shell do Windows chamado que voc
pode usar para remover conjuntos de cache de conjunto global. o Visualizador cache do conjunto
(Shfusion.dll),
Observao
Gacutil.exe serve apenas para fins de desenvolvimento e no deve ser usado para instalar
conjuntos de produo no cache de conjunto global.
O exemplo a seguir instala um conjunto com o nome hello.dll de arquivo no cache de conjunto
global.
gacutil -i hello.dll
Esta seo descreve o procedimento utilizado para criar um conjunto de vrios arquivos e fornece
um exemplo completo que ilustra cada uma das etapas no procedimento.
Observao
O Visual Studio 2005 IDE de C# e Visual Basic poder somente usar para criar conjuntos de
Arquivo nico. Se voc desejar criar vrios arquivos conjuntos, deve usar os compiladores de
linha de comando ou Visual Studio 2005 com Visual C++.. ou Visual Studio 2005 com Visual C++
O exemplo a seguir ilustra a etapa 1 do procedimento acima, por compilao arquivos com
espaos para nome referido por outros arquivos. Este exemplo inicia com alguns cdigo simples
para o Stringer arquivo. Espao para nome chamado myStringer com uma classe chamado
StringerStringer. A Stringer classe contm um mtodo chamado StringerMethod que grava uma
nica linha para o console.
C#
// Assembly building example in the .NET Framework SDK. using System; namespace myStringer { public
class Stringer { public void StringerMethod() { System.Console.WriteLine("This is a line from
StringerMethod."); } } }
C#
csc /t:module Stringer.cs
Na Etapa dois do procedimento acima, voc deve compilar mdulos com referncias a outros
mdulos. Essa etapa usa a /addmodule opo de compilador. No exemplo a seguir, um mdulo
de cdigo chamado Client tem um mtodo ponto Main de entrada que referencia um mtodo no
mdulo Stringer.dll criado na etapa 1.
C#
using System; using myStringer; //The namespace created in Stringer.netmodule. class MainClientApp { //
Static method Main is the entry point method. public static void Main() { Stringer myStringInstance = new
Stringer(); Console.WriteLine("Client code executes"); //myStringComp.Stringer();
myStringInstance.StringerMethod(); } }
C#
csc /addmodule:Stringer.netmodule /t:module Client.cs
Especificar a /t:module opo porque este mdulo ir ser adicionado a uma montagem em uma
etapa futura. Especificar a /addmodule opo porque o cdigo em Client Referncias criado pelo
cdigo em Stringer.netmodule um espao para nome. O compilador produz um mdulo chamado
Client.netmodule que contm uma referncia a outro mdulo, Stringer.netmodule.
Observao
Do Vinculador do conjunto (AL.exe) voc pode usar para criar um conjunto de uma coleo de
compilado mdulos de cdigo.
Do Disassembler MSIL (Ildasm.exe) voc pode usar para examinar o contedo de um conjunto ou
determinar se um arquivo um conjunto ou um mdulo.
Observao
Exemplo
C#
using System; using System.Reflection; public class Asmload0 { public static void Main () { // Use the file
name to load the assembly into the current application domain. Assembly a =
Assembly.LoadFrom("adname.exe"); //Get the type to use. Type myType = a.GetType("adname"); //Get the
method to call. MethodInfo mymethod = myType.GetMethod("adnamemethod"); //Create an instance.
Object obj = Activator.CreateInstance(myType); //Execute the adnamemethod method.
mymethod.Invoke(obj,null); } }
Voc deve ter um par de chaves de criptografia para assinar um conjunto com um nome de alta
segurana. Para obter mais informaes sobre como criar um par de chaves, consulte Como criar
um par de chaves pblica / Private:.
Para criar e assinar um conjunto com um nome de alta segurana usando o vinculador assembly
No prompt de comando, digite o seguinte comando:
al /out:<assembly name> <module name> /keyfile:<file name>
Neste comando, assembly name o nome da montagem para entrar com um nome de alta
segurana, module name o nome do mdulo do cdigo usado para criar o conjunto, e file
name o nome do recipiente ou arquivo que contm o par de chaves.
O exemplo a seguir assina o conjunto MyAssembly.dll com um nome de alta segurana usando o
arquivo sgKey.snk de chave.
C#
[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]
Observao
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
Do Ferramenta Assembly Cache global (Gacutil.exe) uso para exibir o contedo do cache de
montagem global.
O SDK do .NET Framework tambm fornece uma extenso Shell do Windows chamado que voc
pode usar para exibir o contedo do cache de conjunto global. o Visualizador cache do conjunto
(Shfusion.dll),
Para assinar um conjunto com um nome de alta segurana, voc deve ter um par de chaves
pblica / particular Criptografia esse par de chaves pblica e privada usado durante a
compilao para criar um conjunto de nome seguro. Voc pode criar um par de chaves usando o
Ferramenta nome forte (SN.exe). Par de Chaves arquivos geralmente tm uma extenso.snk.
sn -k sgKey.snk
Se voc pretende atrasar a assinatura um conjunto e voc controlar o par de chaves toda (que
improvvel fora cenrios de teste), voc pode usar o seguinte comandos para gerar um par de
chaves e ento extrair a chave pblica em um arquivo separado. Primeiro, crie o par de chaves:
sn -k keypair.snk
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.
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:
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
C#
csc /t:library MyApp.cs /win32res:myresource.res
A maneira mais simples para produzir conjuntos de interoperabilidade primrias consiste em usar
o Importador de Biblioteca de Tipos (TLBIMP.exe).
Primrio um conjunto interoperacional dependente com um nmero de verso que seja diferente
da biblioteca de tipos original no localizvel quando instalado no diretrio atual. Voc deve
registrar Principal conjunto interoperacional do dependente no Registro do Windows ou use a
/reference Opo para ter certeza que localiza TLBIMP.exe a DLL dependente.
Voc tambm poder dispor vrias verses de uma biblioteca de tipos. Para obter instrues,
consulte Como Empacotar Vrias Verses de Bibliotecas de Tipos.
Exemplo
O exemplo a seguir importa a biblioteca LibUtil.tlb de tipos COM e assina o conjunto LibUtil.dll
com um nome de alta segurana usando o arquivo CompanyA.snk de chave. Omitindo um nome de
espao para nome especfico, este exemplo produz o espao para nome LibUtil padro.
Para um nome mais descritivo). (usando, o exemplo a seguir substitui o nome de arquivo do
conjunto padro e nome namespace nomeao diretriz. LibraryName o VendorName
Uma abordagem menos usada para produzir uma biblioteca de tipos envolve criar um conjunto de
interoperabilidade primrio manualmente no cdigo fonte, usando uma linguagem que
compatvel com o COM comum especificao (cls), como C# idioma. Essa abordagem til
quando uma biblioteca de tipos no est disponvel.
Observao
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
tlbimp Loanlib.dll
Se voc estiver familiarizado com o modelo baseado em delegate-evento fornecido pelo .NET
Framework, no Consulte Manipulando e disparando eventos. Para obter detalhes especficos que
se aplicam a este tpico, consulte Disparar um evento na mesma seo.
O exemplo a seguir mostra um servidor gerenciado como a origem de eventos e um cliente COM
como o coletor de eventos. O servidor gerenciado declara ButtonEvents como uma interface do
coletor de eventos e se conecta a interface a Button classe. O cliente no gerenciado cria uma
instncia da classe Button e implementa a interface do coletor de eventos.
Visual Basic
' Managed server (event source) Option Explicit Option Strict Imports System Imports
System.Runtime.InteropServices Namespace EventSource Public Delegate Sub ClickDelegate(x As Integer, y
As Integer) Public Delegate Sub ResizeDelegate() Public Delegate Sub PulseDelegate() ' Step 1: Defines an
event sink interface (ButtonEvents) to be ' implemented by the COM sink. <GuidAttribute("1A585C4D-3371-
48dc-AF8A-AFFECC1B0967"), _ InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)> _ Public
Interface ButtonEvents Sub Click(x As Integer, y As Integer) Sub Resize() Sub Pulse() End Interface ' Step 2:
Connects the event sink interface to a class ' by passing the namespace and event sink interface '
("EventSource.ButtonEvents, EventSrc"). <ComSourceInterfaces(GetType(ButtonEvents))> _ Public Class
Button Public Event Click As ClickDelegate Public Event Resize As ResizeDelegate Public Event Pulse As
PulseDelegate Public Sub CauseClickEvent(x As Integer, y As Integer) RaiseEvent Click(x, y) End Sub Public
Sub CauseResizeEvent() RaiseEvent Resize() End Sub Public Sub CausePulse() RaiseEvent Pulse() End Sub
End Class End Namespace using System; using System.Runtime.InteropServices; namespace EventSource {
public delegate void ClickDelegate(int x, int y); public delegate void ResizeDelegate(); public delegate void
PulseDelegate(); // Step 1: Defines an event sink interface (ButtonEvents) to be // implemented by the COM
sink. [GuidAttribute("1A585C4D-3371-48dc-AF8A-AFFECC1B0967") ]
H duas maneiras para personalizar um wrapper Callable Runtime (RCW). Se voc pode
modificar a fonte interface Definition Language (IDL), voc pode aplicar atributos de arquivo (tlb)
de biblioteca Tipo e importar a biblioteca de tipos Como alternativa, voc pode aplicar atributos
especficos interop-a tipos importados e gerar um novo conjunto. Suporte para personalizar RCWs
padro limitado por esses atributos.
Ativao livre registro-para componentes baseado em .NET apenas um pouco mais complicado
que ele para componentes COM. A instalao requer dois manifestos:
Para informaes sobre elementos manifesto e seus atributos, procure por " Reference
Manifests Application " na Biblioteca do MSDN.
3. Identificar o proprietrio do manifesto. No exemplo a seguir, myComApp Verso 1 possui o
arquivo de manifesto.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-
microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32"
name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" />
Voc pode instalar um manifesto de aplicativo no mesmo diretrio como o aplicativo COM. Como
alternativa, voc pode adicion-lo como um recurso para arquivo.exe do aplicativo. Para obter
mais informaes, procure por " conjuntos lado a lado na Biblioteca do MSDN ".
Uma pista que essa funo requer um retorno de chamada a presena do argumento
lpEnumFunc. comum para ver o lp prefixo (ponteiro longo) combinado com o Func sufixo
do nome do argumentos que se um ponteiro para uma funo de retorno de chamada. Para
obter documentao sobre funes Win32, consulte Microsoft Platform SDK.
2. Crie a funo de retorno de chamada gerenciado. O exemplo declara um tipo delegate,
que utiliza dois argumentos chamado CallBack, (hwnd e lparam.) O primeiro argumento
um identificador para a janela; o segundo argumento definido pelo aplicativo. Nesta
verso, ambos os argumentos devem ser inteiros.
Funes de retorno de chamada geralmente retornam valores diferentes de zero para indicar
xito e zero para indicar falha. Este exemplo explicitamente define o valor de retorno para
true para continuar a enumerao.
3. Criar um representante e transfira-como um argumento para a EnumWindows funo.
Chamar plataforma converte o representante em um formato de retorno de chamada
familiarizado automaticamente.
4. Verifique o coletor de lixo que no no recuperou o representante antes a funo de
retorno de chamada conclua seu trabalho. Quando voc passar um representante como um
parmetro, ou passar um representante contido como um campo em uma estrutura, ela
permanece uncollected para a durao da chamada. Portanto, como o caso no seguinte
exemplo de enumerao, a funo de retorno de chamada completa seu trabalho antes da
chamada retorna e no requer nenhuma ao adicional pelo chamador gerenciado.
Se, no entanto, a funo de retorno de chamada pode ser chamada depois retorna a
chamada, o chamador gerenciado dever executar etapas para garantir que o representante
permanece uncollected at terminar a funo de retorno de chamada. Para obter
informaes detalhadas sobre como evitar coleta de lixo, consulte Interoperabilidade
Marshaling COM Invoke Platform.
Exemplo
Mtodos com Relatar Erros, retornando HRESULTs; Mtodos .NET relat-los por organizando
excees. Tempo de Execuo trata a transio entre os dois. Cada classe de exceo no .NET
Framework mapeia para um HRESULT.
Classes de exceo definida pelo usurio podem especificar qualquer HRESULT apropriado.
Essas classes de exceo dinamicamente podem alterar o HRESULT a ser retornado quando a
exceo gerada, definindo o HResult campo no objeto de exceo. Informaes adicionais
sobre a exceo fornecidas para o cliente por meio da IErrorInfo interface, que implementado
no objeto .NET durante o processo no gerenciado.
Se voc criar uma classe que estende System.Exception, deve definir o campo HRESULT
durante construo. Caso contrrio, a classe base atribui o valor HRESULT. Voc pode mapear
novas classes de exceo para um HRESULT existente, fornecendo o valor no construtor a
exceo .
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
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.
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
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
2. No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
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.
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.
Observao
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; } }
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.
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 ); } }
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.
regasm CompanyA.UtilLib.dll
Opcionalmente, voc pode dispor mais de uma verso de uma biblioteca de tipos. Por exemplo,
voc pode indicar um conjunto de interoperabilidade primrio que oferece suporte tipo verses de
biblioteca 1.0 e 1.1.
Quando voc adicionar um formulrio do Windows a um projeto, ele no exibir prprio por padro
em tempo de execuo. Para obter informaes sobre como exibir um formulrio em tempo de
execuo, consulte Exibindo JanelaRestrita e Modeless Windows Forms. Entretanto, o formulrio
criado quando voc escolhe um aplicativo do Windows a partir da New Project Caixa de dilogo
ser o formulrio Inicializao por padro. Para alterar o formulrio de inicializao, use a Project
pgina de propriedades.
No seu projeto de aplicativos, talvez seja necessrio para usar um manipulador de eventos nico
para vrios eventos ou tem vrios eventos executar o mesmo procedimento. Por exemplo,
geralmente um saver tempo a poderoso para que um comando de menu elevar o mesmo evento
como um boto em seu formulrio faz se eles expor a mesma funcionalidade. Para fazer isso,
usando a exibio Eventos da janela Propriedades em C# ou palavra-chave Handles e Class
Name. e Method Name caixas suspensas no editor de cdigo do Visual Basic
No procedimento a seguir, voc criar uma interface usurio multipane que semelhante daquele
usado no Microsoft Outlook, com uma Folder lista, um Messages painel, e um Preview painel.
Essa organizao conseguida chiefly atravs de encaixe controles com o formulrio.
Quando voc ancora um controle, voc determinar qual borda do recipiente pai um controle
encaixado para. Assim, se voc definir a Dock propriedade para Right, a borda direita do controle
ser encaixada para a borda direita de seu controle pai ser. Alm disso, a borda do controle
encaixada redimensionada para coincidir com a de seu controle de recipiente. Para obter mais
informaes sobre como a Dock propriedade funciona, consulte HOW TO: Dock controles em
Windows Forms.
Para criar essa interface de usurio, voc coloque todos os controles em um SplitContainer
controle, que contm um TreeView controle no painel esquerdo. O painel direito do controle
SplitContainer contm um segundo SplitContainer controle com um ListView controle acima um
RichTextBox controle. Esses SplitContainer controles permitem redimensionamento
independente dos outros controles no formulrio. Voc pode adaptar as tcnicas neste
procedimento para artesanato interfaces do usurio personalizada de suas preferncia.
C#
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms. SplitContainer splitContainer2;
private System.Windows.Forms. SplitContainer splitContainer1;
Ao projetar sua formulrios Windows, s vezes, convm para colocar uma imagem de plano de
fundo em um controle ou no prprio o formulrio. Voc pode fazer isso facilmente utilizando a
Properties janela.
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.
Enquanto o Windows Forms Designer otimizado para host controles Windows Forms, voc
tambm pode colocar controles ActiveX em Windows Forms.
Cuidado
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.
Observao
Formulrios Windows o Importer controle ActiveX (AxImp.exe) cria argumentos evento de um tipo
diferente do esperado na importao das bibliotecas de vnculo dinmico ActiveX. Os argumentos
criado pelo AxImp.exe so semelhantes ao seguinte: Invoke(object sender,
DWebBrowserEvents2_ProgressChangeEvent e), quando Invoke(object sender,
DWebBrowserEvents2_ProgressChangeEventArgs e) esperado. Esteja ciente que este irregularity
no impede Cdigo de funcionando normalmente. Para obter detalhes, consulte Importer controle
ActiveX formulrios Windows (Aximp.exe).
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.
Observao
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.
Observao
No h alguns formulrios Windows controla que ser aspecto. os mesmos em todos os sistemas
operacionais; implementao EnableVisualStyles tem no afeta esses controles Eles incluem e
CheckedListBox controles., DomainUpDown, NumericUpDown o LinkLabelLabel Alm disso, se
voc ativar estilos visuais em alguns controles, o controle pode exibir incorretamente em certas
situaes. Eles incluem o MonthCalendar controle com um conjunto intervalo, seleo com
pginas guia alinhado na parte inferior ou lados do controle, e o tratamento de fontes substituto no
controle TextBox. o TabControl
Depois voc ter separados a vida til do aplicativo da vida til do formulrio, voc pode fazer
formulrios visvel (e invisvel), porque o aplicativo ser encerrado quando voc " fechar " a classe
que foi usado para inicializao Aplicativo.. porque o aplicativo ser encerrado quando voc "
fechar " a classe que foi usado para inicializao aplicativo
Observao
Como um mdulo invisvel quando seu cdigo est sendo executado, o procedimento a seguir
inclui uma etapa para adicionar uma caixa de mensagem para o mdulo de inicializao para
simplesmente demonstrar que o aplicativo est sendo executado.
Observao
Caixa de mensagem no exemplo de cdigo anterior especificado com um espao para nome
totalmente qualificado porque o mdulo criado, diferentemente de um formulrio padro do
Windows, no importa espaos para qualquer nome por padro. Para obter mais informaes
sobre como importar espaos para nome, consulte Referncias e a declarao imports (Visual
Basic) (Visual C# (Visual C++.), o Usando diretiva (referncia C#), ou o using Directive (C++))
Ser Application.Run() iniciado o bomba mensagem, que vital para o comportamento de
determinados aplicativos e pode afetar comportamento formulrio durante determinadas horas em
ciclo de vida do aplicativo, como ao desligar. Para obter mais informaes, consulte Mtodo
Application.Run.
3. Alterar o objeto de inicializao para o projeto seja Sub Main em vez de Form1.
Para Visual C# definir o objeto de inicializao para ser ApplicationName, MainApplication como
em nomeao da classe no exemplo de cdigo anterior. Para obter mais informaes, consulte
Como: Escolher o formulrio de inicializao em um aplicativo do Windows.
Observao
Iniciando com o sistema operacional Microsoft Windows 2000, um formulrio mais alto-sempre
permanece na frente de todas as janelas em um determinado aplicativo. No Microsoft Windows
98, um formulrio mais alto-permanece na frente de todas as janelas em todos os aplicativos. Por
exemplo, voc pode deseja manter uma janela ferramenta flutuante no frente da janela principal
do aplicativo A TopMost propriedade controla se um formulrio um formulrio mais superior.
Sempre um formulrio mais alto-ser flutuar acima, outros formulrios no mais alto-mesmo
quando ele no est ativa.
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 fazer um formulrio o formulrio mais alto-em uma aplicativo do Windows Forms a tempo de
design
Na janela Properties, defina a TopMost propriedade como true.
Visual C# Consolidado 793
Para fazer um formulrio o formulrio mais alto-em uma aplicativo do Windows Forms
programaticamente
Em um procedimento, defina a TopMost propriedade como true.
C#
public void MakeOnTop() { myTopForm.TopMost = true; }
Formulrios e caixas de dilogo so marcas restrita ou sem janela restrita. Um janela restrita
formulrio ou caixa de dilogo deve ser fechado ou ocultos antes de continuar trabalhando com o
restante do aplicativo. Para obter mais informaes sobre como trabalhar com caixas de dilogo,
consulte Entrada de usurio para caixas de dilogo.
Caixas de dilogo que exibe mensagens importantes sempre deve ser restrita. Caixa About de
dilogo no Visual Studio um exemplo de uma caixa de dilogo restrita. MessageBox um
formulrio modal voc pode usar.
Formulrios Sem janela restrita permitem que voc alternar o foco entre o formulrio e um outro
formulrio sem ter que fechar o formulrio inicial. O usurio pode continuar a trabalhar em
qualquer lugar em qualquer aplicativo enquanto o formulrio exibido.
Formulrios sem janela restrita so mais difceis para programa, porque os usurios possam
acess-los em uma ordem imprevisveis. Voc deve manter o estado do do aplicativo consistente
no importa o que o usurio faz. Freqentemente, janelas de ferramentas so mostrados em uma
maneira sem janela restrita. A Find caixa de dilogo acessveis de menu Edit no Visual Studio,
um exemplo de uma caixa de dilogo sem janela restrita. Usar formulrios para comandos
exibio usados ou informaes sem janela restrita.
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.
O ShowDialog mtodo contm um argumento opcional, owner,. que pode ser usado para
especificar uma relao pai-filho para um formulrio Por exemplo, ao cdigo no formulrio
principal mostra uma caixa de dilogo, voc pode passar Me (in Visual Basic) ou this (no Visual
C#). Como o proprietrio da caixa de dilogo para estabelecer o formulrio principal como o
proprietrio, como o cdigo a seguir mostra
C#
private void mnuAbout_Click(object sender, System.EventArgs e) { Form f = new Form();
f.ShowDialog(this); }
Observao
Voc pode selecionar texto programaticamente no controle Windows Forms TextBox Por exemplo,
se voc criar uma funo que procura texto para uma seqncia especfica, voc pode selecionar
o texto a visualmente Alerta o leitor de posio a seqncia de caracteres encontrada na
s vezes, convm colocar as aspas (. " " em uma seqncia de texto) Por exemplo:
- ou -
2. Insira o caractere ASCII ou Unicode para uma aspa. No Visual Basic, use o caractere
ASCII (34). In Visual C#, use the Unicode character (\u0022).
C#
private void InsertAscii(){ textBox1.Text = "She said, " + '\u0022' + "You deserve a treat!" + '\u0022'; }
Observao
In this example, you cannot use \u0022 because you cannot use a universal character name that
designates a character in the basic character set. Caso contrrio, voc produzir C3851. For more
information, see Compilador C3851 de erro.
- ou -
3. Voc tambm pode definir uma constante para o caractere, e us-la quando necessrio.
C#
const string quote = "\""; textBox1.Text = "She said, " + quote + "You deserve a treat!"+ quote ;
Voc pode selecionar texto programaticamente no controle Windows Forms TextBox Por exemplo,
se voc criar uma funo que procura texto para uma seqncia especfica, voc pode selecionar
o texto a visualmente Alerta o leitor de posio a seqncia de caracteres encontrada na
Por padro, o controle Windows Forms TextBox exibe uma nica linha de texto e no exibe barras
de rolagem. Se o texto for maior que o espao disponvel, somente parte do texto estar visvel.
Voc pode alterar esse comportamento padro, definindo o Multiline, WordWrap., e ScrollBars
propriedades para valores apropriados
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.
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 A barra de rolagem horizontal no ser exibido. Use esse valor se voc escolheu
padro) Vertical barras de rolagem ou None, acima, para exibir um ou mais pargrafos.
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).
O intervalo no garantido para decorrer exatamente no tempo. Para garantir a preciso,
o timer deve verificar o relgio do sistema conforme necessrio, em vez de tentar se manter
controle de tempo acumulado internamente.
O sistema gera 18 pulsos do relgio por segundo to mesmo embora a Interval
propriedade medida em milissegundos, a preciso de um intervalo VERDADEIRO mais de
um-eighteenth de um segundo.
s vezes, convm criar um procedimento que executa em intervalos especficos de tempo at que
um loop foi concluda ou que seja executado quando um intervalo de tempo definido tiver
decorrido. O Timer componente permite tal um procedimento.
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-.
Observao
Existem algumas limitaes ao usar o Timer Componente. Para obter mais informaes, consulte
Limitaes do componente Timer de formulrios do Windows na propriedade Interval.
Observao
Quanto maior a freqncia de um evento Timer ocorrer, mais tempo do processador usado em
responder ao evento. Isso pode diminuir o desempenho geral. No defina um intervalo menor do
que voc precisa.
3. Escreva cdigo apropriado no manipulador Tick de eventos. O cdigo voc escreve nesse
evento ser executado no intervalo especificado na propriedade Interval.
4. Defina a Enabled propriedade para true Para iniciar o cronmetro. O Tick evento
comear a ocorrer, executar o procedimento no intervalo conjunto.
5. Ao tempo apropriado, defina a Enabled propriedade como false para interromper o
procedimento seja executado novamente. Definir o intervalo para 0 no faz com que o timer
para parar.
Exemplo
Este primeiro exemplo de cdigo controla a hora do dia em incrementos um segundo. Ele usa um
Button, a Label, e um Timer componente em um formulrio. A Interval propriedade definida
como 1000 (igual a um segundo). No evento Tick, legenda do rtulo definida como a hora atual.
Quando o boto for clicado, a Enabled propriedade definida como false, interrompendo o timer
de atualizar legenda do rtulo. O exemplo de cdigo a seguir requer que voc tenha um formulrio
com um Button controle denominado Button1, um Timer controle chamado Timer1, e um Label
controle chamado Label1.
C#
private void InitializeTimer() { //' Run this procedure in an appropriate event. // Set to 1 second.
Timer1.Interval = 1000; // Enable timer. Timer1.Enabled = true; Button1.Text = "Stop"; } private void
Timer1_Tick(object Sender, EventArgs e) { // Set the caption to the current time. Label1.Text =
DateTime.Now.ToString(); } private void Button1_Click() { if ( Button1.Text == "Stop" ) { Button1.Text =
"Start"; Timer1.Enabled = false; } else { Button1.Text = "Stop"; Timer1.Enabled = true; } }
Este exemplo de cdigo segundo executa um procedimento cada milissegundos 600 at que um
loop tenha terminado. O exemplo de cdigo a seguir requer que voc tenha um formulrio com um
Button controle denominado Button1, um Timer controle chamado Timer1, e um Label controle
chamado Label1.
C#
// This variable will be the loop counter. private int counter; private void InitializeTimer() { // Run this
procedure in an appropriate event. counter = 0; timer1.Interval = 600; timer1.Enabled = true; // Hook up
timer's tick event handler. this.timer1.Tick += new System.EventHandler(this.timer1_Tick); } private void
timer1_Tick(object sender, System.EventArgs e) { if (counter >= 10) { // Exit loop code. timer1.Enabled =
false; counter = 0; } else { // Run your procedure here. // Increment counter. counter = counter + 1;
label1.Text = "Procedures Run: " + counter.ToString(); } }
O controle Windows Forms ToolBar for usado como uma barra de controle que exibe uma linha
de menus suspensos e botes de bitmap que Ativar comandos em formulrios. Assim, clicar em
um boto de ferramentas equivale a escolher um comando de menu. Os botes podem ser
configurado para aparecem e se comportam como botes de ao, menus drop-down ou
separadores. Normalmente, uma barra de ferramentas contm botes e menus que correspondem
aos itens em um aplicativo na estrutura de menu, fornecendo acesso rpido s funes usadas
com mais freqncia do aplicativo e comandos.
Observao
O controle Windows Forms ToolBar for usado como uma barra de controle que exibe uma linha
de menus suspensos e botes de bitmap que Ativar comandos em formulrios. Assim, clicar em
um boto de ferramentas pode ser um equivalente ao escolher um comando de menu. Os botes
podem ser configurado para aparecem e se comportam como pushbuttons, menus drop-down ou
separadores. Normalmente, uma barra de ferramentas contm botes e menus que correspondem
aos itens em um aplicativo na estrutura de menu, fornecendo acesso rpido s funes usadas
com mais freqncia do aplicativo e comandos.
Um ToolBar controle normalmente est " ancorada " ao longo da parte superior da sua janela pai,
mas ela tambm pode ser ancorada para qualquer lado da janela. Uma barra de ferramentas pode
exibir dicas de ferramentas quando o usurio aponta o ponteiro do mouse em um boto da barra
de ferramentas. Uma dica de ferramenta uma janela pop-up pequena que descreve
resumidamente o boto ou finalidade do menu. Para exibir as dicas de ferramentas, a
ShowToolTips propriedade deve ser definida para true.
O ToolBar controle permite que voc para criar barras de ferramentas, adicionando Button
objetos a uma Buttons coleo. Voc pode usar o editor coleo para adicionar botes a um
ToolBar controle; cada Button objeto deve ter texto ou uma imagem atribuda, embora voc pode
atribuir ambos. A imagem fornecida por um componente Associado ImageList. Do Adicionar em
tempo de execuo, voc pode adicionar ou remover botes usem o ToolBarButtonCollection e
Remover mtodos. Para programar os botes de usar o ToolBar, a Boto propriedade da classe
ToolBarButtonClickEventArgs para determinar qual boto foi clicado. Adicione cdigo aos
ButtonClick Eventos a ToolBar,
Uma parte integral do controle ToolBar os botes voc adicionar a ela. Esses pode ser usado
para fornecer acesso fcil aos comandos de menu ou, como alternativa, eles podem ser
colocadas em outra rea da interface do usurio do seu aplicativo para expor comandos para os
usurios que no esto disponveis na estrutura menu.
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.
Propriedade Descrio
DropDownMenu Define o menu exibido em no boto da barra de ferramentas drop-down. Defina
a DropDownButton propriedade do boto Style Barra de ferramentas. Essa
propriedade tem uma instncia da classe ContextMenu como uma referncia.
PartialPush Define se um boto da barra de ferramentas Estilo toggle- parcialmente
pressionado. Defina a ToggleButton propriedade do boto Style Barra de
ferramentas.
Pushed Define se um boto da barra de ferramentas Estilo toggle-est atualmente no
estado pushed. Propriedade do boto Style Barra de ferramentas deve ser
definida para ToggleButton ou PushButton.. ou PushButton
Style Define o estilo do boto da barra de ferramentas. Deve ser um dos valores na
enumerao ToolBarButtonStyle.
Text A seqncia de texto exibido pelo boto.
ToolTipText O texto que aparece como uma dica de ferramenta para o boto.
Observao
O ToolStrip controle substitui e adiciona funcionalidade para o ToolBar controle; no entanto, o
ToolBar controle foi mantido para compatibilidade com verses anteriores e uso futuro, se voc
escolher.
Uma parte integral do ToolBar controle os botes voc adicionar a ela. Esses podem ser
usados para fornecer acesso fcil aos comandos de menu ou, como alternativa, que pode ser
colocada em outra rea da interface de usurio de seu aplicativo para expor comandos para os
usurios que no esto disponveis na estrutura do menu.
Observao
A System.Windows.Forms.ToolBar.Buttons coleo uma coleo base zero, para cdigo
C#
public void CreateToolBarButtons() { // Create buttons and set text property.
toolBar1.Buttons.Add("One"); toolBar1.Buttons.Add("Two"); toolBar1.Buttons.Add("Three");
toolBar1.Buttons.Add("Four"); // Set properties of StatusBar panels. // Set Style property.
toolBar1.Buttons[0].Style = ToolBarButtonStyle.PushButton; toolBar1.Buttons[1].Style =
ToolBarButtonStyle.Separator; toolBar1.Buttons[2].Style = ToolBarButtonStyle.ToggleButton;
toolBar1.Buttons[3].Style = ToolBarButtonStyle.DropDownButton; // Set the ToggleButton's
PartialPush property. toolBar1.Buttons[2].PartialPush = true; // Instantiate a ContextMenu
component and menu items. // Set the DropDownButton's DropDownMenu property to // the
context menu. ContextMenu cm = new ContextMenu(); MenuItem miOne = new MenuItem("One");
MenuItem miTwo = new MenuItem("Two"); MenuItem miThree = new MenuItem("Three");
cm.MenuItems.Add(miOne); cm.MenuItems.Add(miTwo); cm.MenuItems.Add(miThree);
toolBar1.Buttons[3].DropDownMenu = cm; // Set the PushButton's Pushed property.
toolBar1.Buttons[0].Pushed = true; // Set the ToolTipText property of 1 of the buttons.
toolBar1.Buttons[1].ToolTipText = "Button 2"; }
Observao
O ToolStrip controle substitui e adiciona funcionalidade para o ToolBar controle; no entanto, o
ToolBar controle foi mantida para compatibilidade com verses anteriores e uso futuro, se voc
escolher.
Botes ToolBar so capazes de exibir cones dentro deles para fcil identificao pelos usurios.
Isso conseguido atravs adicionando imagens para o ImageList componente e associando-lo
com o ToolBar controle.
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.
Observao
O ToolStrip controle substitui e adiciona funcionalidade para o ToolBar controle; no entanto, o
ToolBar controle foi mantido para compatibilidade com verses anteriores e uso futuro, se voc
escolher.
Botes ToolBar so capaz de exibir cones dentro deles para facilitar a identificao pelos
usurios. Isso conseguido atravs de adicionando imagens para o Componente ImageList
(Windows Forms) componente e ento associar o ImageList componente ao ToolBar controle.
Observao
O ToolStrip controle substitui e adiciona funcionalidade para o ToolBar controle; no entanto, o
ToolBar controle foi mantido para compatibilidade com verses anteriores e uso futuro, se voc
escolher.
No evento ButtonClick do controle ToolBar, voc pode avaliar a Boto propriedade da classe
ToolBarButtonClickEventArgs. No exemplo abaixo, uma caixa de mensagem mostrada,
indicando qual boto foi clicado. Para obter detalhes, consulte Classe MessageBox.
O exemplo a seguir supe que tem um ToolBar controle foi adicionada a um formulrio do
Windows.
Observao
Uma caixa de mensagem est sendo usada exclusivamente como um espao reservado, neste
exemplo. Vontade para adicionar outro cdigo seja executado quando os botes da barra de
ferramentas so clicados.
C#
protected void toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs e) { // Evaluate the
Button property of the ToolBarButtonClickEventArgs // to determine which button was clicked. switch
(toolBar1.Buttons.IndexOf(e.Button)) { case 0 : MessageBox.Show("First toolbar button clicked"); break;
case 1 : MessageBox.Show("Second toolbar button clicked"); break; case 2 : MessageBox.Show("Third
toolbar button clicked"); break; } }
Os aprimoramentos principais para esta verso do Visual Web Developer incluem o seguinte:
As sees a seguir fornecem um resumo de alto nvel das alteraes no Visual Web Developer.
Web Sites
Projetos
Modelo de Compilao Dinmica
Edio
Programao
Para informaes sobre novos recursos no ASP.NET 2.0, consulte O que h de novo no ASP.NET
O Visual Web Developer apresenta uma abordagem flexvel para a criao de web sites (tambm
chamados projetos e aplicaes web em verses anteriores do Visual Web Developer e Web
Page Designer, respectivamente). Web sites no Visual Web Developer no so, necessariamente,
vinculados ao IIS nem a pastas fsicas da raiz do IIS.
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
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.
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.
Diferentes desenvolvedores podem fazer edies em diferentes pginas ao mesmo tempo,
sem interferir nas alteraes do outro, como pode acontecer quando se compila o projeto para
um assembly nico no Microsoft Visual Studio .NET 2003.
Quando voc testa um web site, ele ainda compilado (built). Entretanto, a etapa de compilao
usada como verificao, tal que que todas as pginas e suas dependncias possam ser
compiladas; a sada do processo de compilao no usada como base para executar o web site.
Essa etapa de compilao mais abrangente do que era em verses anteriores porque ele valida
no apenas a compilao do cdigo como tambm, a localizao de erros na sintaxe de marcao
e no arquivo Web.config.
Por alguns desenvolvedores no optarem pela implantao de cdigo fonte nos seus web sites, a
ferramenta de desenvolvimento da Web, o Visual Web Developer, oferece a opo de pr-
compilao e implantao de um web site usando o comando Build Web Site. O comando Build
Web Site executa o compilador sobre o site inteiro (no apenas nos arquivos de cdigo), e produz
um layout de web site que voc pode implantar em um servidor de produo. O layout inclui
assemblies para pginas individuais, que incluem o cdigo e a marcao para a pgina (ou seja,
os arquivos .aspx so compilados tambm).
Observao
O benefcio principal da pr-compilao que ela permite que voc implante apenas cdigo
executvel, colocando uma medida de proteo em sua propriedade intelectual. Alm disso, a pr-
compilao localiza qualquer erro em tempo de compilao, em pginas ou cdigo dependente.
Edio de pginas
O Visual Web Developer oferece os seguintes aperfeioamentos para criar e editar pginas da
web:
O Visual Web Developer inclui uma srie de aperfeioamentos para o editor de cdigos que o
ajudam a programar mais produtivamente. Ele inclui o seguinte:
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:
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.
Controles podem se beneficiar dos servios baseados em ferramentas para melhor
interagir com o ambiente de hospedagem. Por exemplo, controles tem acesso diretiva de
pgina, ao sistema do projeto e ao documento atual.
Trabalhar com dados uma parte importante em muitas pginas web em ASP.NET 2.0, e o Visual
Web Developer inclui vrios aprimoramentos para facilitar a implementao e gerenciamento do
acesso a dados. O objetivo geral para a vinculao de dados no ASP.NET 2.0 tornar possvel a
realizao de uma variedade de cenrios de vinculao de dados, sem precisar gravar qualquer
cdigo. Esta verso suporta essa meta e a estende oferecendo assistentes que o ajudam a
configurar a vinculao de dados e criao de componentes de dados.
Para simplificar vinculao de dados, o ASP.NET 2.0 introduz controles de fonte de dados.
Controles de fonte de dados fornecem um nico objeto no qual voc pode, declarativamente,
definir o seguinte:
Informaes de conexo.
Consultas (um instruo SQL, nome de parmetro armazenado ou nomes dos mtodos
para chamar em um objeto).
Parmetros Voc pode definir parmetros declarativamente e especificar que eles
obtenham seus valores de um controle na pgina, de uma seqncia de caracteres de
consulta, de variveis de sesso ou de outras fontes.
As opes de comportamento (dependendo do controle da fonte de dados), como
paginao e cache.
Em geral, voc no precisa trabalhar diretamente com os objetos que so usados para gerenciar
acesso a dados, como datasets ou leitores de dados. Controles de fonte de dados criam
componentes de dados de forma transparente. Voc no trabalha com esses componentes, mas
no precisa estar ciente deles quando desejar usar um recurso, como o de paginao, que
depende da escolha entre um dataset e um leitor de dados.
O ASP.NET 2.0 fornece controles de fonte de dados para diferentes tipos de armazenamentos de
dados, incluindo SQL (para OLE DB e bancos de dados Open Database Connectivity [ODBC]),
arquivos XML e objetos comerciais. Todos os controles de fonte de dados expem a mesma
interface para controles de dados na pgina, como o controle DataList e o Repeater, e o novo
controle GridView pode ligar o mesmo caminho a qualquer controle de fonte de dados, apesar do
armazenamento de dados subjacente que eles representam, e depois mostra os dados na pgina.
O resultado que voc pode usar a matriz completa dos controles de dados do ASP.NET 2.0 para
trabalhar com uma ampla variedade de fontes de dados.
Todos os controles de dados no ASP.NET 2.0 foram aprimorados para trabalhar com controles de
fonte de dados. Em vez de apontar um controle em um dataset ou leitor de dados, voc referencia
um controle de fonte de dados. Depois, o controle de dados e o controle da fonte de dados
Como resultado, voc pode tirar proveito da vinculao de dados automtica, em qualquer
controle de vinculao de dados. Alm disso, o ASP.NET 2.0 introduz novos controles de dados
que fornecem funcionalidades adicionais. Eles incluem o seguinte:
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.
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.
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.
Observao
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.
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.
Este tpico fornece uma viso geral sobre as caractersticas fundamentais de como pginas da
Web do ASP.NET funcionam em aplicativos da Web.
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.
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
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.
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.
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:
Observao
Para obter mais informaes, consulte Viso Geral sobre o Gerenciamento de Estado do
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.
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.
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.
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.
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.
Suporte a tipo
Para obter mais informaes consulte Suporte tipo nas classes System.Xml.
Consulte Criando leitores XML e Criando Writers XML Para obter mais informaes.
Inference do esquema
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
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;
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);
Validao XML
Observao
Verso 1.1
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
C#
XmlReaderSettings settings = new XmlReaderSettings(); settings. ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:books", "books.xsd"); settings.ValidationEventHandler += new
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
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);
Processamento XSLT
Verso 1.1
C#
Verso 2,0
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);
Produtividade alta-.
Com base em padres.
Suporte multilnge.
Extensvel.
Arquitetura conectvel.
Concentrada no desempenho, confiabilidade e escalabilidade.
Integrao com o ADO.NET.
Para obter mais informaes sobre a arquitetura conectvel, consulte Objetivos de Design para
XML no .NET Framework.
O.NET Framework fornece uma oportunidade para criar um conjunto de classes XML integrado e
tambm mostrar inovaes no mundo XML. As classes XML fornecidas so elementos principais
do .NET Framework. Essas classes fornecem uma soluo aberto, compatvel com padres,
interopervel para os desafios que os desenvolvedores enfrentam hoje. Para obter mais
informaes sobre o conjunto de classes no XML no .NET Framework, consulte e
System.Xml.Schema espaos de nome., System.Xml.Xsl a System.Xml, System.Xml.XPath
Para obter mais informaes, consulte que fornece a documentao mais recente, informaes
tcnicas, downloads, grupos de notcias, e outros recursos para desenvolvedores Xml. o Centro
do desenvolvedor XML,
Observao
XmlResolver Class
XmlReader and XmlReaderSettings Classes
XmlTextReader Class
XslCompiledTransform Class
Document Object Model
Classe XmlResolver
A XmlResolver classe usada para resolver recursos. usado para carregar documentos XML, e
para resolver externos recursos, como entidades, DTDs ou esquemas, e importar ou incluir
diretivas. O.NET Framework inclui duas implementaes da classe XmlResolver.
A XmlUrlResolver classe o resolvedor padro para todas as classes no espao para nome
System.Xml. Do file:// oferece suporte e http:// Protocolos e solicitaes a partir da WebRequest
classe. Em muitos casos, se voc no especificar um XmlResolver objeto que seu aplicativo deve
usar, um XmlUrlResolver objeto COM sem credenciais de usurio usado para acessar recursos
XML.
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 de esquema
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.
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:
Suporte componentes
No aceitar suporte componentes, como NameTable, XmlNamespaceManager,. e
XmlResolver Objetos, de uma fonte no confivel
Processamento de dados
Dados XML podem conter um nmero de atributos, declaraes de espao para nome, elementos
aninhados grande e assim por diante que exigem uma quantidade considervel de tempo para
processar.
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
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.
Recursos externos
Folhas de estilos podem incluir referncias a recursos externos, como xsl:import ou xsl:include
elementos ou a document() funo.
O Load e Transform mtodos incluir overloads que se um XmlResolver objeto como um dos seus
argumentos. Se no for especificado, um padro XmlUrlResolver com nenhum credenciais
usado. um XmlResolver
Voc pode controlar recursos como externos so acessados, siga um destes procedimentos:
Objetos de extenso
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.
Observao
Questes de segurana
Acesso externo
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.
Processamento DTD.
Processamento de esquema. Isso inclui adicionar um esquema no confivel coleo de
esquemas, compilar um esquema no confivel e validao usando o esquema no confivel.
Processamento XSLT.
Analisar qualquer fluxo arbitrrio do usurio fornecidas binrios dados XML.
Operaes DOM, como consultar, editando, movendo sub-Trees entre documentos, e
salvar objetos DOM.
Processamento
As tecnologias XSD e XSLT possuem recursos adicionais que podem afetar o desempenho de
processamento. Por exemplo, ele possvel para construir um esquema XML que requer uma
quantidade considervel de tempo para processar quando avaliada em um documento
relativamente pequeno. Tambm possvel para incorporar blocos de script em um folha de estilo
XSLT. Ambos os casos representar uma ameaa de segurana potencial ao seu aplicativo.
Recursos externos
A XmlUrlResolver classe o resolvedor padro para todas as classes no espao para nome
System.Xml. usado para carregar documentos XML, e para resolver externos recursos, como
entidades, DTDs ou esquemas, e importar ou incluir diretivas.
As APIs permite que sejam substitu-lo, especificando o XmlResolver objeto para utilizar. Use a
XmlSecureResolver classe caso voc precise abrir um recurso que voc no faa controle, ou que
no confivel. A XmlSecureResolver disposio e permite que voc para restringir os recursos
que base XmlResolver tem acesso ao. um XmlResolver
Processamento DTD
No ative processamento DTD se voc estiver preocupado com a problemas dos ou se voc est
lidando com fontes no confiveis. Processamento DTD desativado por padro em XmlReader
Objetos criado pelo mtodo Create.
Observao
Se voc tiver processamento DTD ativado, voc poder usar pode acessar. Para restringir os
recursos que o XmlSecureResolver o XmlReader Voc tambm pode criar seu aplicativo para
que o processamento XML a memria e tempo restrita. Por exemplo, configurar limites de tempo
limite em seu aplicativo ASP.NET.
Processamento XSLT
Ao criar um aplicativo que usa a XslCompiledTransform classe, voc deve estar ciente dos itens
as seguir e suas implicaes:
Esses problemas de segurana podem ser atenuados com no ativar scripts ou a document()
Funo. a menos que o folhas de estilo provm de uma fonte confivel, e por no aceitar
XslCompiledTransform Objetos, folhas de estilos XSLT ou XML fonte de dados de uma fonte
no confivel
Tratamento de exceo
Excees geradas por componentes de nvel inferiores podem divulgar informaes de caminho
que voc no deseja bubbled backup para o aplicativo. Os aplicativos devem Capturar excees e
process-los adequadamente.
Uso XmlTextWriter
Do XmlTextWriter quando voc passar para outro aplicativo o fluxo subjacente exposto a esse
aplicativo. Se precisar de passar para um aplicativo semiconfivel, voc deve usar um XmlWriter
objeto criado atravs do Create mtodo em vez disso. o XmlTextWriter
Nesta seo
Ler um documento XML para o DOM.
Estendendo o DOM
Sees relacionadas
Processo dados XML usando o modelo de dados XPath
Nesta seo
Lendo dados XML usando XPathDocument e XmlDocument
Descreve os mtodos da classe XPathNavigator usada para navegar ns, extrair dados
XML e acessar altamente digitados dados XML no ou XmlDocument Objeto. um
XPathDocument
A XmlReader classe oferece suporte ler dados XML de um fluxo ou arquivo. Ele define mtodos e
propriedades que permitem a voc para percorrer os dados e ler o contedo de um n. O n atual
se refere o n em que o leitor est posicionado. O leitor avanado usando qualquer um dos
mtodos de leitura e propriedades retornar o valor do n atual.
Descreve como criar XmlReader instncias, validao de dados, dados de leitura, e assim
por diante.
Criao XmlWriter
O Create mtodo o mecanismo preferido para obter XmlWriter objetos. O Create mtodo usa a
XmlWriterSettings classe para especificar quais recursos deve oferecer suporte a XmlWriter
instncia.
Conformance de dados
Objetos XmlWriter criados atravs do Create mtodo so, por padro, mais conformant que a
XmlTextWriter implementao. Usando o Create mtodo e a XmlWriterSettings classe oferece
dois outros recursos verificao conformance-.
Verificando a conformidade
Suporte a tipo
A XmlWriter classe permite-lhe gravar valores como tipo simples-comuns valores Runtime (CLR)
de idioma.
Voc pode usar o WriteValue mtodo para passar valores usando tipos sistema em vez de
seqncias. Dessa forma, voc pode gravar valores diretamente sem que seja necessrio
executar converses valor manualmente.
Usando o XmlWriter
A XmlWriter classe grava dados XML em um fluxo, arquivo, TextReader,. ou seqncia
A XmlWriter classe grava dados XML em um fluxo, arquivo, TextReader,. ou seqncia Ele
fornece um meio de criao vlidos dados XML de uma maneira somente de encaminhamento,
somente para gravao, armazenado em cache no-. D a XmlWriter classe suporte o W3C XML
1.0 e Namespaces em recomendaes XML. Esta seo discute como criar uma XmlWriter
instncia com um conjunto especificado de recursos, conformidade de dados verificao, gravar
dados digitados, e assim por diante.
Nesta seo
Criando Writers XML
Gravar atributos
Elementos de escrita
Observao
No Microsoft .NET Framework verso 2.0, recomendvel criar XmlWriter objetos usando o
Create mtodo.
Transformaes em XSLT
A transformao XSL Transformation (XSLT) permite que voc transformar o contedo de um
documento XML de origem em outro documento que seja diferente em formato ou estrutura. Por
exemplo, voc pode usar XSLT 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 pela recomendao W3C
Transformaes em XSL (XSLT) verso 1.0 localizada em www.w3.org/TR/XSLT.
Observao
Nesta seo
Entradas para a classe XslCompiledTransform
Desempenho
A XslCompiledTransform classe tambm inclui outras otimizaes que tornam muito mais rpida
que a XslTransform classe.
Segurana
Migrando cdigo
As novas classes XSLT tenham sido designadas para ser muito semelhante s classes existentes.
A XslCompiledTransform classe substitui a XslTransform classe. Folhas de estilo so
compiladas usando o Load mtodo. Transformaes so executadas usando o Transform
mtodo. Os procedimentos a seguir mostrar tarefas comuns, XSLT e compare o cdigo usando a
XslTransform classe versus a XslCompiledTransform classe.
Cdigo usando a C#
XslCompiledTransform classe. XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl"); xslt.Transform("books.xml", "books.html");
Cdigo usando a C#
XslCompiledTransform XslCompiledTransform xslt = new XslCompiledTransform();
classe. XmlUrlResolver resolver = new XmlUrlResolver(); resolver.Credentials =
CredentialCache.DefaultCredentials; xslt.Load("sort.xsl",
XsltSettings.Default, resolver);
Cdigo usando a C#
XslTransform classe. XslTransform xslt = new XslTransform(); xslt.Load("order.xsl"); //Create
the XsltArgumentList. XsltArgumentList argList = new XsltArgumentList();
//Create a parameter which represents the current date and time. DateTime
d = DateTime.Now; argList.AddParam("date", "", d.ToString()); //Create
the XmlTextWriter. XmlTextWriter writer = new
XmlTextWriter("output.xml", null); //Transform the file.
xslt.Transform(new XPathDocument(filename), argList, writer, null);
Cdigo usando a C#
XslCompiledTransform XslCompiledTransform xslt = new XslCompiledTransform();
classe. xslt.Load("order.xsl"); // Create the XsltArgumentList. XsltArgumentList
argList = new XsltArgumentList(); // Create a parameter which represents
the current date and time. DateTime d = DateTime.Now;
argList.AddParam("date", "", d.ToString()); // Create the XmlWriter.
XmlWriter writer = XmlWriter.Create("output.xml", null); // Transform the
file. xslt.Transform(new XPathDocument(filename), argList, writer);
Cdigo usando a C#
XslTransform classe. XslTransform xslt = new XslTransform(); xslt.Load("output.xsl");
xslt.Transform("books.xml", "books.html");
Cdigo usando a C#
XslCompiledTransform // Create the XsltSettings object with script enabled. XsltSettings settings
classe. = new XsltSettings(false,true); // Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");
Observao
Cdigo usando a C#
XslTransform classe. // Execute the transformation. XslTransform xslt = new XslTransform();
xslt.Load("output.xsl"); XmlReader reader = xslt.Transform(new
XPathDocument("books.xml"), null, new XmlUrlResolver()); // Load the
results into a DOM object. XmlDocument doc = new XmlDocument();
doc.Load(reader);
Cdigo usando a C#
XslCompiledTransform // Execute the transformation. XslCompiledTransform xslt = new
classe. XslCompiledTransform(); xslt.Load("output.xsl");
xslt.Transform("books.xml", "output.xml"); // Load the results into a DOM
object. XmlDocument doc = new XmlDocument();
doc.Load("output.xml");
Cdigo usando a C#
XslTransform classe. // Execute the transformation. XslTransform xslt = new XslTransform();
xslt.Load("output.xsl"); XmlReader reader = xslt.Transform(new
XPathDocument("books.xml"), null, new XmlUrlResolver()); // Load the
results into an XPathDocument object. XPathDocument doc = new
XPathDocument(reader);
Cdigo usando a C#
XslCompiledTransform // Execute the transformation. XslCompiledTransform xslt = new
classe. XslCompiledTransform(); xslt.Load("output.xsl"); MemoryStream ms =
new MemoryStream(); xslt.Transform(new XPathDocument("books.xml"),
null, ms); // Load the results into an XPathDocument object. ms.Seek(0,
SeekOrigin.Begin); XPathDocument doc = new XPathDocument(ms);
Extenses XSLT
Dois populares extenses XSLT so folhas de estilo objetos scripts e extenso. Essas extenses
permitem que o processador XSLT para executar cdigo.
Objetos de extenso
Scripts podem ser incorporadas a uma folhas de estilo usando o msxsl:script elemento de
extenso. Suporte script um recurso opcional na classe XslCompiledTransform que desativada
por padro. Script pode ser habilitada ao definir a System.Xml.Xsl.XsltSettings.EnableScript
propriedade como true e passar o XsltSettings objeto para o Load mtodo.
Diretrizes
Ativar scripting somente quando o folhas de estilo provm de uma fonte confivel. Se voc no
pode verificar a origem do folhas de estilo, ou se o folhas de estilo no no vm de uma fonte
confivel, passar em null para o argumento configuraes XSLT.
Recursos externos
O idioma XSLT tem recursos, como xsl:import, xsl:include,. ou a document() funo, onde o
processador necessita para resolver referncias URI A XmlResolver classe usada para resolver
recursos externos. Recursos externos talvez precise ser resolvido nos dois casos a seguir:
Observao
A Load um dos seus argumentos. e Transform Cada incluir overloads que aceitam uma
XmlResolver como mtodos Se no for especificado, um padro XmlUrlResolver com nenhum
credenciais usado. um XmlResolver
Diretrizes
Ativar a document() funo somente quando o folhas de estilo provm de uma fonte confivel.
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 personalizar comportamento, voc pode implementar sua prprias
XmlResolver Classe e us-lo para resolver recursos.
Se voc desejar garantir que nenhum recursos externos so acessados, voc pode
especificar null para o XmlResolver argumento.
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.
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.
Exemplo
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); } }
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.
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.
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); } }
Nos exemplos de cdigo a seguir, a API som usado para criar um cliente Esquema XML na
memria.
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.
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;
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
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;
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
Observao
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); //
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.
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 =
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).
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.
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.
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,
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.
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
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
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.
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 ==
A parte do documento XML estruturada pode ser mapeado para um DataSet, e ser
eficiente armazenados, indexado, e pesquisados.
Transformaes, validao e navegao pode ser feito com eficincia atravs de um
modelo Cursor em vez dos dados XML que so armazenados relationally. s vezes, ele pode
ser feito com mais eficincia em estruturas que se o XML ser armazenado em um
XmlDocument modelo relacionais.
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.
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
Consultas de dados na DataSet so mais fcil com Consultas XPath so necessrias sobre os
SQL que XPath. dados no DataSet.
C#
XmlValidatingReader vreader = new XmlValidatingReader(new
XmlTextReader("http://www.alpineskihouse.org/abc.xml")); vreader.XmlResolver = new XmlUrlResolver();
while(vreader.Read()) { . . . }
Para resolver um DTD, XmlValidatingReader chama o GetEntity mtodo para obter uma
representao de fluxo da entidade. Se o URI do DTD for um URI relativo,, XmlValidatingReader
chama o ResolveUri mtodo e retorna um URI absoluto para e baseUri. fornecido relativeUri a Se
XmlResolver no sabe como resolver o Uri determinado, ento ele retornar uma null referncia.
Alm disso, se as configuraes de segurana forem necessrios para acessar o recurso externo,,
a Credentials propriedade pode ser definida de acordo. Essa propriedade permite ao usurio
para definir configuraes de autenticao para URIs. Para obter mais informaes sobre fornecer
credenciais, consulte Fornecer credenciais de autenticao para XmlResolver quando leitura de
um arquivo.
Resolver todos os outros recursos XML muito semelhante a resolver DTDs. XmlResolver.
precisa saber apenas como negociar a conexo com o recurso externo, e retornar uma
representao de fluxo de contedo Ele o objeto que est fazendo a chamada para
XmlResolver que tenha a tarefa de interpretar o fluxo.
Por exemplo, suponha que as credenciais so necessrias ao solicitar dados a partir da Web para
fins de autenticao. Se o diretrio virtual da Web permitir acesso annimo, ento a propriedade
no precisa a ser definido para acesso annimo. No entanto, se a pasta no permitir acesso
annimo, ento voc precisar fornecer credenciais. O exemplo a seguir cria um XmlReader que
usa com credenciais padro para acessar o site http://localhost/bookstore/Inventory.xml. um
XmlUrlResolver
C#
// Create a resolver with default credentials. XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials; // Set the reader settings object to
use the resolver. settings.XmlResolver = resolver; // Create the XmlReader object. XmlReader reader =
XmlReader.Create("http://ServerName/data/books.xml", settings);
Credenciais diferentes podem ser fornecidos para URIs diferentes e adicionados a um cache de
credenciais. Essas credenciais so usados para verificar autenticao para o URIs
independentemente da fonte original do XML diferentes. A seguir mostra exemplo adicionando
credenciais a um cache.
C#
// Create the credentials. NetworkCredential myCred = new
NetworkCredential(UserName,SecurelyStoredPassword,Domain); CredentialCache myCache = new
CredentialCache(); myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred); // Set the credentials on the
XmlUrlResolver object. XmlUrlResolver resolver = new XmlUrlResolver(); resolver.Credentials = myCache;
// Compile the style sheet. XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
A XmlUrlResolver classe o resolvedor padro para todas as classes no espao para nome
System.Xml. usado para carregar documentos XML, e para resolver externos recursos, como
entidades, DTDs ou esquemas, e importar ou incluir diretivas.
Voc pode substitu-lo, especificando o XmlResolver objeto para utilizar. Especificando voc
pode restringir os recursos que base XmlResolver pode acessar. an XmlSecureResolver,
Observao
No.NET Framework verso 1.0 a XmlConvert classe era necessrio para converter entre tipos de
esquema XML e CLR.
A tabela a seguir descreve os mapeamentos padro de um tipo de dados XML para um tipo Clr.
Observao
Prefixos e xs a xdt so mapeados para a http://www.w3.org/2001/XMLSchema e o espao para
nome http://www.w3.org/2003/05/XPath-datatypes URIs respectivamente.
Tipo XML Tipo Clr
xs:anyURI Uri
xs:base64Binary Byte[]
xs:boolean Boolean
xs:byte SByte
xs:date DateTime
xs:dateTime DateTime
xs:decimal Decimal
xs:double Double
xs:duration TimeSpan
xs:ENTITIES String[]
Mapeamentos lista
O IList, ICollection e String Tipos so usados para representar tipos Lista de idioma (XSD) de
definio Esquema XML., IEnumerable, Type[]
Mapeamentos de unio
A seguir descreve determinadas diferenas que podem ocorrer entre tipos CLR e tipos de dados
XML e como eles so tratados.
Observao
System.TimeSpan e xs:duration
A TimeSpan classe no oferece suporte parcial este pedido. Em vez disso, ele seleciona um
nmero especfico de dias para 1 ano e ms 1; 365 dias e 30 dias respectivamente.
Para obter mais informaes sobre o xs:duration tipo, consulte Part 2 do esquema XML do W3C:
recomendao tipos de dados em http://www.w3.org/TR/XMLSCHEMA-2/.
Quando um xs:time valor mapeado para um DateTime objeto, o MinValue campo usado para
inicializar as Propriedades de Data do objeto DateTime (.,) com o menor valor possvel DateTime,
como Year, Month e Day
Observao
Voc no pode contar com o System.DateTime.Year Valor quando o contedo for digitado como
xs:gMonthDay. O System.DateTime.Year valor sempre definido como 1904, nesse caso.
XS:anyURI e System.URI
Quando uma instncia do xs:anyURI que representa um URI relativo mapeado para um Uri, o
Uri objeto no tem um URI de base.
Consulte tambm
Entrada
<Element>2001-02-27T11:13:23</Element>
C#
Entrada
<TestInt32>-2147483648</TestInt32>
C#
Int32 vInt32=-2147483648; writer.WriteElementString("TestInt32",XmlConvert.ToString(vInt32));
Voc cria XML Web Services usando a estrutura pgina ASP.NET, ativando esses XML Web
Services para acessar os muitos recursos da .NET Framework, tais como autenticao, cache, e
gerenciamento de estado. Como ASP.NET e o.NET Framework so a base para XML Web
Services no cdigo gerenciado, os desenvolvedores podem se concentrar na criao ou acessar
XML Web Services sem precisar escrever cdigo de infra-estrutura.
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.
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.
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.
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 867
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
Fornece instrues sobre como criar um XML Web Services usando o modelo de projeto
servio da Web ASP.NET.
Fornece instrues sobre como adicionar um servio da Web para um projeto da Web
existente.
Fornece instrues sobre como criar um mtodo exposto por um servio da Web.
Fornece instrues sobre como depurar um servio da Web usando mtodos mltiplos.
Fornece instrues sobre como implantar um servio da Web usando mtodos variados.
Sees relacionadas
Programao na Web com XML Web Services
Descreve o processo e fornece instrues sobre como acessar servios da Web no cdigo
gerenciado.
Descreve como personalizar mensagens SOAP, incluindo como trabalhar com vrios
mtodos de codificao XML.
Descreve como utilizar cabealhos SOAP em XML Web Services criados usando
ASP.NET e como incluir informaes adicionais com mensagens SOAP.
Fornece informaes do .NET Framework SDK sobre criao de XML Web Services
usando ASP.NET.
Descreve como tratar e incluir excesses em XML Web Services criados usando
ASP.NET.
Descreve como criar, distribuir e consumir XML Web Services usando Servidor ATL e C++.
Nesta seo
Modelo de cdigo para acessar XML Web Services no cdigo gerenciado
Fornece instrues sobre como gerar uma classe proxy para um servio da Web.
Fornece instrues sobre como acessar um servio da Web de um aplicativo cliente escrito
em cdigo gerenciado.
Sees relacionadas
Programao na Web com XML Web Services
Descreve o processo e fornece instrues sobre como criar servios da Web em cdigo
gerenciado.
Descreve o processo e fornece instrues sobre criao de clientes XML Web Services.
Descreve como personalizar mensagens SOAP, incluindo como trabalhar com vrios
mtodos de codificao XML.
Descreve como utilizar cabealhos SOAP nos servios da Web criados usando ASP.NET e
como incluir informaes adicionais com mensagens SOAP.
Descreve o processo e provm instrues sobre como criar e acessar servios da Web
usando um servido ATL e C++.
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.
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.
Descreve como para controlar o SOAP enviados para e do Servios XML da Web criados
com ASP.NET.
Explica como criar extenses Modifique a mensagem SOAP enviada atravs da rede para
servios XML da Web criados com ASP.NET e seus clientes.
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.
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.
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.
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
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
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
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>
Mtodo POST Se voc desejar para testar seu servio da Web usando HTTP-POST, use
POST.
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.
Tipo = Adicionar um boto Enviar para voc pode enviar os dados de volta para o mtodo
enviar 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
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.
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.
Parmetro Valor
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
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.
Parmetro Valor
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
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.
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
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
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.
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
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.
Por padro, XML Web Services criados usando o modelo de projeto servio da Web ASP.NET
herdam da classe System.Web.Services.WebService. Herana dessa classe torna possvel para o
XML Web Services acessar os objetos intrnsecos do ASP.NET, como Application e Sesso. Para
obter mais informaes, consulte Inheritance in Visual Basic ou Herana (guia de programao
C#).
Observao
Se sua classe no herdar a partir da classe WebService, o criador de componente para o XML
Web Services no estar disponvel.
Quando voc cria um XML Web Services em cdigo gerenciado, voc indica os mtodos que
esto disponveis atravs daquele XML Web Services, colocando o atributo WebMethod antes da
declarao de mtodo de um mtodo Public. Mtodos Private no podem servir como o ponto de
entrada para um XML Web Services, embora eles possam ser da mesma classe e o cdigo do
XML Web Services poder cham-los. O atributo WebMethod deve ser aplicado a cada mtodo
pblico que estiver disponvel como parte XML Web Services. Para obter mais informaes,
consulte COMO: Usar o Atributo WebMethod.
Os procedimentos abaixo supem que voc est trabalhando com mtodos pblicos de uma
classe que a implementao de um servio XML Web. Para obter mais informaes, consulte
Modelo de cdigo para XML Web Services no cdigo gerenciado.
Anexar o atributo WebMethod a um mtodo Public indica que voc deseja o mtodo
exposto como parte do XML Web Services. Para obter mais informaes, consulte Modelo
de cdigo para XML Web Services no cdigo gerenciado.
Anexando o atributo WebMethod a um mtodo Public indica que voc deseja o mtodo exposto
como parte do XML Web Service. Voc tambm pode usar as propriedades deste atributo para
configurar o comportamento do mtodo do XML Web Service. Para obter mais informaes,
consulte Modelo de cdigo para XML Web Services no cdigo gerenciado.
BufferResponse
CacheDuration
Description
EnableSession
MessageName
A mensagem de solicitao SOAP para o mtodo que adiciona doubles, AddDoubles, ser
semelhante a seguir:
POST /myWebService/Service1.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8
Content-Length: length SOAPAction: "http://tempuri.org/AddDoubles" <?xml version="1.0"
A mensagem de resposta SOAP para o mtodo que adiciona doubles, AddDoubles, ser
semelhante a seguir:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <AddDoublesResponse
xmlns="http://tempuri.org/"> <AddDoublesResult>double</AddDoublesResult>
</AddDoublesResponse> </soap:Body> </soap:Envelope>
TransactionOption
Alm dos pr-requisitos para qualquer mtodo de XML Web Service, voc tem de adicionar uma
referncia para System.EnterpriseServices.dll. Este namespace contm mtodos e
propriedades que expem o modelo de transao distribuda encontrado no servios COM+ . A
classe System.EnterpriseServices.ContextUtil permite voc votar na transao usando os
mtodos SetComplete ou SetAbort. Para obter mais informaes, consulte Participando de
transaes nos XML Web Services criados com ASP.NET e Transaes automticas e XML Web
Services.
Quando voc estiver pronto para compilar e executar seu XML Web Service, voc deve
primeiramente compilar o projeto de servio da Web ASP.NET. Depois de compilado, voc pode
executar o XML Web Service. Para obter mais informaes, consulte Preparao para Depurao:
Projetos de Servio da Web ASP.NET.
Voc pode escolher entre trs mtodos para compilar e executar seu XML Web Service:
Mtodo Descrio
Com o Este mtodo inicia o navegador padro e carrega a pgina inicial especificada.
depurador Executar uma pgina no depurador possibilita que voc navegue no cdigo linha
por linha, e use ferramentas adicionais de anlise e informao em tempo de
execuo. Caso o Visual Studio detecte que os arquivos chave foram alterados, ele
tambm compilar o projeto antes iniciar o navegador com a pgina inicial
especificada.
Sem o Esse mtodo possibilita que voc possa executar seu cdigo como ele normalmente
depurador seria executado fora do contexto das ferramentas de desenvolvimento, e, portanto,
nenhuma informao em tempo de execuo estar disponvel atravs dessas
ferramentas. Caso o Visual Studio detecte que os arquivos chave foram alterados,
ele compilar o projeto antes de iniciar o navegador com a pgina inicial
especificada. Entretanto, voc pode anexar o depurador para o processo conforme
necessrio.
Exibir no Este mtodo compila o projeto e abre uma pgina da Web escolhida no Solution
navegador Explorer. O Visual Studio compila e executa o projeto em um navegador padro
dentro do Visual Studio.
Quando se usa o Visual Studio .NET para criar XML Web Services no cdigo gerenciado, voc
usa um modelo de implantao padro: voc compila seu projeto e depois voc implanta os
arquivos resultantes para um servidor de produo. O arquivo .dll do projeto contm o arquivo de
classe code-behind dos XML Web Services (.asmx.vb ou .asmx.cs) juntamente com todos os
outros arquivos de classe includos em seu projeto, mas no o prprio arquivo .asmx. Voc ento
implanta este arquivo .dll nico do projeto para o servidor de produo sem qualquer cdigo-fonte.
Quando o XML Web Services recebe uma solicitao, o arquivo .dll do projeto carregado e
executado.
Suponha que voc tenha um simples projeto de servio da Web ASP.NET chamado WebService1
que contm o seguinte:
O Visual Studio salva todos os arquivos no projeto que voc modificou desde a ltima
compilao.
O Visual Studio copia o arquivo Service1.asmx e os arquivos de projeto padro para o
servidor Web de desenvolvimento.
O arquivo de classe Service.vb (ou .cs) e o arquivo de classe Global.asax so compilados
no arquivo .dll do projeto, que ento copiado para o servidor no diretrio padro \bin do
diretrio virtual de destino. Se o projeto for definido para compilar uma verso de depurao, o
Visual Studio cria um arquivo .pdb do projeto no diretrio \bin.
Observao
Se ocorrerem erros de compilao, a implantao no ter xito. Para obter mais informaes,
consulte Como Depurar XML Web Services em Cdigo No Gerenciado.
Para implantar o XML Web Services em um servidor que no seja o servidor de desenvolvimento,
voc pode adicionar um Web Setup project ou voc pode copiar os arquivos necessrios para o
servidor de destino. Para tornar seu XML Web Services disponvel para outros, voc precisar
implant-lo em um servidor da Web que acessvel para os clientes que voc deseja dar suporte.
Para obter mais informaes, consulte Implantando aplicativos e componentes e COMO: Copiar
um projeto.
Aps implantar seu XML Web Services, voc precisa levar em considerao como tornar possvel
que desenvolvedores o localizem, caso voc pretenda que outras pessoas o usem. Para obter
mais informaes, consulte How to: Enable Discovery for XML Web Services.
Para acessar um XML Web Service de um aplicativo cliente, voc primeiro adiciona uma
referncia da Web, que uma referncia a um XML Web Service. Quando voc cria uma
referncia da Web, o Visual Studio cria uma classe proxy XML Web Service automaticamente e o
adiciona ao seu projeto. Esta classe do proxy expe os mtodos do XML Web Service e organiza
a transferncia dos argumentos apropriados entre o XML Web service e o seu aplicativo. O Visual
Studio usa o WSDL (Web Services Description Language) (WSDL) para criar o proxy. Para obter
mais informaes, consulte Infra-estrutura servios XML da Web.
Voc pode usar a propriedade URL da referncia da Web para especificar a URL para o XML Web
Service. Ao adicionar uma referncia da Web, essa propriedade definida por padro para o URL
do XML Web Service que voc selecionou, que um URL esttico. Uma referncia da Web pode
usar um URL esttico ou um URL dinmico. Se voc definir a propriedade de comportamento URL
da referncia da Web para dinmico, o aplicativo obtm o URL em tempo de execuo a partir da
seo AppSettings elemento (esquema configuraes gerais) do arquivo de configurao do seu
aplicativo. Para obter mais informaes, consulte Referncias da Web.
Aps adicionar uma referncia da Web a um aplicativo cliente, voc pode chamar os mtodos
expostos do XML Web Services e acessar os resultados exatamente como voc faria como
qualquer outro mtodo de um componente. Para obter mais informaes, consulte Como: Chamar
um servio da Web.
Se voc no conseguir adicionar uma referncia da Web, quando por exemplo o XML Web service
no est acessvel a partir da mquina em que voc est usando o Visual Studio, voc pode usar
a ferramenta XML Web Services Description Language Tool (Wsdl.exe) para gerar uma classe de
um proxy XML Web service cliente. Para obter mais informaes, consulte Criando um proxy XML
Web service.
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.
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
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();
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."); } }
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
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.
6. Dentro do funo callback, chame o mtodo final sobre o objeto estado obtidos na etapa
anterior.
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]
+ ", "); } } }
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.
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]
+ ", "); } } }
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.
A primeira etapa criar um projeto de aplicativos da Web ASP.NET que contm uma referncia
da Web para um XML Web Services.
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
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
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.
Propriedade Valor
Edit1Value LocalHost
Observao
Isso especifica um servidor padro. Voc pode inserir seu prprio nome de
servidor padro aqui.
Edit3Visible False
Edit4Visible False
A etapa final criar o projeto de instalao para criar o instalador, e para instalar o aplicativo no
servidor de destino.
No menu Build, escolha Build Projectname, onde Projectname o nome do seu projeto
de instalao.
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
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.
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.
Opo de
autenticao Descrio
Windows-Basic via Use para identificao dos clientes em cenrios de Internet seguros. O nome
SSL 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- Usar para identificao dos clientes na Internet e intranet seguras cenrios.
certificados de Requer cada cliente para obter um certificado de um autoridade de
cliente certificao mutuamente confivel. Certificados opcionalmente so mapeados
para contas de usurio, que so usadas pelo IIS para autorizar acesso ao
servio da Web.
SOAP cabealhos til para cenrios de Internet seguros e no seguras. Credenciais de usurio
personalizados 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.
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.
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:.
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.
Para obter uma descrio de um mtodo de usando cabealhos SOAP para autenticao,
consulte Como executar autenticao personalizada usando cabealhos SOAP:.
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.
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.
Esta etapa cria um dataset com base nas tabelas Customers e Orders do banco de dados de
exemplo Northwind.
Observao
Testando o aplicativo
1. Pressione F5.
2. Selecione diferentes clientes para verificar se os pedidos corretos so exibidos na grade
do formulrio.
Prximas etapas
Dependendo dos seus requisitos para o aplicativo, existem vrias etapas que voc pode desejar
executar aps criar um formulrio de detalhes mestre. Voc pode fazer nesta explicao passo a
passo alguns aprimoramentos, que 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.
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
Arraste de itens da Janela de Objetos de conexo so criados quando voc arrasta itens da
fontes de dados para um janela Data Sources para o Windows Forms Designer ou para o
formulrio ou o Component Component Designer. Para obter mais informaes, consulte
Designer Exibir dados em formulrios em aplicativos do Windows.
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
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.)
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.
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
Transaes
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
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.
O Server Explorer/Database Explorerfornece uma maneira para voc para criar conexes em
tempo de design para fontes de dados. Isto lhe permite pesquisar em fontes de dados disponveis;
visualizar informaes sobre as tabelas, colunas, e outros elementos que elas contm; e editar e
criar elementos do banco de dados.
Por exemplo, no tempo de design voc pode usar oServer Explorer/Database Explorer para
criar uma conexo com um banco de dados. Mais tarde, quando estiver criando um formulrio,
voc pode procurar o banco de dados, selecionar colunas de uma tabela, e arrast-las para o
DataSet Designer. Isso cria um TableAdapter no seu DataSet. Um novo objeto de conexo
tambm criado(que faz parte do TableAdapter recm-criado).
A conexo de seu aplicativo a dados no Visual Studio simplificada, usando o Assistente para
Configurao da Fonte de Dados. Depois que voc conclui o assistente, os dados esto
disponveis na Janela de fontes de dados para serem arrastados para seus formulrios.
Observao
As caixas de dilogo e comandos de menu que voc vir podem diferir daquelas descritas na
Ajuda, dependendo das suas configuraes ativas ou da sua edio. Para alterar as
configuraes, escolha Import and Export Settings no menu Tools. Para obter mais
informaes, consulte Visual Studio Settings.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o Projeto
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.
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.
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.
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.
Adicione lgica de validao para o evento ColumnChanging ou RowChanging das tabelas
de dados no dataset. Para obter mais informaes, consulte Viso geral sobre validao de
dados.
Conectar seu aplicativo a dados no Visual Studio fica mais simples, usando o Assistente para
Configurao da Fonte de Dados. Depois que voc concluir o assistente, os dados estaro
disponveis no Janela de fontes de dados para serem arrastados para Windows Forms.
O DataSet que voc acabou de criar agora est disponvel na janela Data Sources.
Observao
Os itens que aparecem na janela Data Sources so dependentes das informaes que o servio
da Web retorna. Alguns servios da Web podem no fornecer informaes suficientes para o Data
Source Configuration Wizard criar objetos ligveis. Por exemplo, se o servio da Web retornar
um dataset no digitado, nenhum item aparecer na janela Data Sources aps a concluso do
assistente. Isso ocorre porque datasets no digitados no fornecem esquema, ento o assistente
no tem informaes suficientes para criar a fonte de dados.
Selecione itens na janela Data Sources e arraste-os para um formulrio. Para obter mais
informaes, consulte Viso Geral da Exibio dados.
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,
Observao
Se o Data source no for Microsoft Access Database File, ento selecione Change para abrir a
caixa de dilogo Choose/Change Data Source.
5. Na caixa de dilogo Choose Data Source, selecione Microsoft Access Database File.
6. Digite o caminho para o arquivo de banco de dados Northwind.mdb, ou clique no boto
Browse para localizar o arquivo Northwind.mdb. Para obter informaes sobre como
adquirir uma cpia do arquivo Northwind.mdb, consulte COMO: Instalar Bancos de Dados
de Exemplo. Clique em OK.
7. Clique em Next.
8. Clique Next na pgina Save connection string to the Application Configuration file.
9. Expanda o n Tables na pgina Choose your Database Objects.
Armazenar informaes confidenciais (como uma senha) pode afetar a segurana do seu
aplicativo. Usar a Windows Authentication (tambm conhecida como segurana integrada) uma
maneira mais segura para 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.
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.
Adicione lgica de validao para os eventos ColumnChanging ou RowChanging das
tabelas de dados no dataset. Para obter mais informaes, consulte Viso geral sobre
validao de dados.
Cria-se um DataSet tipado usando o Data Source Configuration Wizard ou o Dataset Designer.
Observao
Para informaes sobre como criar DataSets programaticamente, consulte Creating a DataSet.
Criando DataSets tipados com o Data Source Configuration Wizard ou com o DataSet Designer
1. No menu Data, clique Add New Data Source para iniciar o Data Source Configuration
Wizard.
2. Selecione Database na pgina Choose a Data Source Type.
3. Conclua o assistente e um DataSet tipado adicionado ao seu projeto. Para obter mais
informaes, consulte Assistente para Configurao da Fonte de Dados.
Nesta explicao passo a passo voc criar uma DataSet usando o Dataset Designer. Ela levar
voc atravs do processo de criar um novo projeto e adicionar um novo item DataSet a ele. Voc
aprender como criar tabelas com base em tabelas em um banco de dados sem utilizar um
assistente.
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,
escolha Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Visual Studio Settings.
Pr-requisitos
Observao
Para esta explicao passo a passo, voc pode conectar-se ao Northwind na verso do SQL
Server ou do Access.
4. Para informaes sobre como criar uma conexo com o SQL Server, consulte Como: Criar
conexes com bancos de dados SQL Server.
5. Para informaes sobre como criar uma conexo com Access, consulte Como: Criar
Conexes com Bancos de Dados do Access.
Criando Tabelas no Dataset
1. Expanda a conexo de dados que voc criou no Server Explorer, e em seguida, expanda
o n Tables.
2. Arraste a tabela Customers do Server Explorer para o Dataset Designer.
Uma tabela de dados Customers e CustomersTableAdapter so adicionadas ao dataset.
Esta explicao passo a passo explica como criar uma DataTable (sem um TableAdapter) usando
o Dataset Designer. Para informaes sobre como criar tabelas de dados que incluem
TableAdapters, consulte Como: Criar TableAdapters.
Para criar uma tabela de dados que inclui um TableAdapter, consulte Explicao passo a passo:
Criando um Adaptador de Tabela com Mltiplas Consultas.
1. Clique com o boto direito do mouse na tabela Music. Aponte para Add, e clique Column.
2. Nome da coluna SongID.
3. Na janela Properties, defina a propriedade DataType como System.Int16.
4. Repita este processo e adicione as seguintes colunas:
SongTitle: System.String
Artist: System.String
Genre: System.String
Definindo a chave primria para a tabela
Todas as tabelas de dados devem ter uma chave primria. Uma chave primria identifica
exclusivamente um registro especfico em uma tabela de dados.
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
Agora que voc criou a tabela, voc pode desejar executar uma das seguintes aes:
Para Consulte
Esta explicao passo a passo explica como criar duas tabelas de dados sem TableAdapters
usando o Dataset Designer e criando um relacionamento entre elas. Para informaes sobre
como criar tabelas de dados que incluem TableAdapters, consulte Como: Criar TableAdapters.
Para obter mais informaes sobre TableAdapters, consulte Viso Geral do Adaptador de Tabela.
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 de sua edio. Para alterar suas
configuraes, escolha Import and Export Settings no menu Tools. Para obter mais
informaes, consulte Visual Studio Settings.
CompanyName String
Contact String
ContactTitle String
CustomerID Int16
OrderDate DateTime
ShippedDate DateTime
O relacionamento criado entre a coluna comum de cada tabela neste caso, a coluna
CustomerID.
Agora que voc criou as tabelas relacionadas, voc pode desejar executar uma das seguintes
aes:
Para Consulte
Na verso anterior do Visual Studio, Os Adaptadores de Dados do ADO.NET eram usados para
comunicao entre um aplicativo e um banco de dados. Apesar de os adaptadores de dados
ainda serem componentes principais do .NET Framework Data Providers, TableAdapters so
componentes gerados pelo designer que melhoram a funcionalidade dos DataAdapters.
TableAdapters normalmente contm mtodos Fill e Update para buscar e atualizar dados em um
banco de dados.
C#
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = new
NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Consultas do TableAdapter
Alm das consultas que retornam dados no mesmo esquema da tabela de dados do
TableAdapter, voc pode adicionar consultas que retornam valores escalares. Por exemplo, criar
uma consulta que retorna uma contagem de clientes de um CustomersTableAdapter. (SELECT
Count(*) From Customers) vlido, apesar de os dados retornados no estarem de acordo com
esquema da tabela.
Propriedade ClearBeforeFill
Herana do TableAdapter
A classe TableAdapter no parte do .NET Framework, assim voc no pode pesquisar ele na
documentao ou no Object Browser. Ele criado no tempo de design quando voc usa um dos
assistentes mencionados acima. O nome atribudo a um TableAdapter quando voc o cria
baseado no nome da tabela com a qual voc estiver trabalhando. Por exemplo, ao criar um
TableAdapter baseado em uma tabela de um banco de dados chamada Orders, o TableAdapter
seria nomeado OrdersTableAdapter. O nome de classe do TableAdapter pode ser alterado usando
a propriedade Name no Dataset Designer.
Membro Descrio
TableAdapter.Insert Cria uma nova linha na tabela de dados. Para obter mais
informaes, consulte Como adicionar linhas ao um DataTable.
Quando voc usar um TableAdapter, ele efetivamente executa as mesmas operaes com os
comandos que voc geralmente deseja executar. Por exemplo, quando voc chamar o mtodo Fill
do adaptador, o adaptador executa o comando de dados na sua propriedade SelectCommand e usa
uma leitora de dados (por exemplo, SqlDataReader) para carregar o resultado na tabela de dados.
Da mesma forma, quando voc chamar o mtodo Update do adaptador, ele executa o comando
apropriado (nas propriedades DeleteCommand, UpdateCommand, e InsertCommand) para cada
mudana na tabela de dados.
Observao
GenerateDbDirectMethods do TableAdapter
Essa etapa cria uma fonte de dados usando o Data Source Configuration Wizard baseado na
tabela Customers no banco de dados de exemplos Northwind. Voc deve ter acesso ao banco de
dados de exemplos Northwind para criar a conexo. Para informaes sobre como configurar
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
Observao
Se voc estiver usando a verso Access do Northwind, substitua o parmetro @City com um
ponto de interrogao. (SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City,
Region, PostalCode, Country, Phone, Fax FROM Customers WHERE City = ?)
O mtodo Return a DataTable no usado neste explicao passo a passo, ento voc possa
desmarcar a caixa de seleo ou deixar o nome padro.
Executando o aplicativo
Pressione F5.
A grade preenchida com clientes com um valor City de Seattle.
Prximas etapas
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)).
Adicione validao lgica para o evento ColumnChanging. ou RowChanging das tabelas
de dados no DataSet. Para obter mais informaes, consulte Viso geral sobre validao de
dados.
Consulte tambm
Voc pode executar instrues SQL ou procedimentos armazenados contra uma fonte de dados
usando TableAdapters ou objetos de comando (por exemplo, SqlCommand). Para carregar dados
nos DataSets criados usando ferramentas de design no Visual Studio, use TableAdapters. Para
carregar dados nos DataSets criados por programao, use adaptadores de dados. Se seu
Preenchendo um DataSet usando um TableAdapter Como: preencher uma DataSet com dados
Preenchendo DataSets
Se voc criar um DataSet com uma ferramenta de design de em tempo de execuo Visual Studio
(tais como o Dataset Designer ou o Assistente para Configurao da Fonte de Dados), ento voc
usar um TableAdapter para preench-lo. TableAdapters executam procedimentos armazenados
ou instrues SQL.
Se voc criar um DataSet sem ferramentas em tempo de design, voc deve utilizar adaptadores
de dados para preencher e atualizar os dados. (TableAdapters no so realmente classes no
.NET Framework, ento no so adequados para trabalhar com DataSets que tenham sido
criados sem o uso de ferramentas em tempo de execuo. Para obter mais informaes sobre
carregar dados em DataSets com TableAdapters ou adaptadores de dados, consulte Como:
preencher uma DataSet com dados.
Consultas TableAdapter
Voc pode executar consultas TableAdapter para preencher dados em DataSets (Mais
especificamente, para carregar dados para o DataTables que compem um DataSet). Voc pode
criar consultas TableAdapter usando o Assistente de configurao da consulta TableAdapter no
Dataset Designer. Consultas TableAdapter aparecem como mtodos nomeados num
TableAdapter e so executados chamando o mtodo TableAdapter. Para obter mais informaes
sobre como criar e executar consultas TableAdapter, consulte as seguintes pginas:
Cada um dos .NET Framework Data Providers oferece um objeto comando otimizado para bancos
de dados especficos.
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 para obter informaes de catlogo do banco de dados.
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.
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.
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.
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.
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.
Voc pode criar controles com dados vinculados, arrastando itens da janela Data Sources para
um formulrio no seu aplicativo do Windows.
Arrastando itens da janela Data Sources para um formulrio adiciona automaticamente o cdigo
correto para preencher o dataset no manipulador de eventos Form1_Load.
3. Opcionalmente, voc pode copiar este cdigo para outras partes do seu aplicativo onde
voc precisar preencher o dataset.
Executando o Aplicativo
Dependendo dos seus requisitos de aplicativo, h vrias etapas que convm executar aps criar
um formulrio vinculado a dados. Alguns aprimoramentos que voc pode fazer nesta explicao
passo a passo incluem:
ADO.NET fornece mtodos simples para trabalhar com dados XML. Nesta explicao passo a
passo voc criar um aplicativo do Windows que ir carregar dados XML em um DataSet. Ento o
DataSet ser exibido em uma DataGridView. Finalmente, um esquema XML com base no
contedo do arquivo XML ser exibido em uma caixa de texto.
Observao
As caixas de dilogo e comandos de menu que voc ve podem diferir das descritas na Ajuda
dependendo das suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte Visual Studio
Settings.
Nesta etapa, voc criar um projeto Visual Basic, Visual C#, ou Visual J# que ir conter esta
explicao passo a passo.
Porque esta explicao passo a passo enfoca leitura de dados XML em um DataSet, o contedo
de um arquivo XML fornecido.
ScrollBars Vertical
1. Com o arquivo fonte para Form1 selecionado em Solution Explorer, clique no boto View
Designer na barra de ferramentas Solution Explorer.
2. No Data Tab, Toolbox, arraste um DataSet. para Form1
3. Selecione Untyped dataset no Caixa de Dilogo Add Dataset, e, em seguida clique em
OK.
DataSet1 adicionado bandeja do componente.
4. Na janela Properties, defina as propriedades Name e DataSetName para
AuthorsDataSet.
Crie o manipulador de eventos para ler o XML para o DataSet
O boto Read XML l o arquivo XML para o DataSet e define propriedades sobre o controle
DataGridView que acopla-o ao DataSet.
O boto Show Schema cria um objeto StringWriter que preenchido com o esquema e exibido
no TextBox.
Agora voc pode testar o formulrio para certificar-se de que ele funciona comforme o esperado.
Esta explicao passo a passo mostra as noes bsicas de ler um arquivo XML em um DataSet,
bem como criar um esquema com base no contedo do arquivo XML. Aqui esto algumas tarefas
que podem vie em seguida:
Edite os dados no DataSet e grave-os de volta como XML. Para obter mais informaes,
consulte WriteXml.
Edite os dados no DataSet e grave-os em um banco de dados. Para obter mais
informaes, consulte Salvando dados.
H vrios componentes e processos que devem ser compreendidos quando for desenvolver
aplicativos do Windows com dados vinculados. Abaixo um resumo das tarefas, objetos e caixas
de dilogo envolvidos na criao de aplicativos do Windows com dados vinculados. Para obter
mais informaes, consulte Windows Forms Data Binding.
As tarefas a seguir mostram o processo tpico que se segue para exibir dados em um formulrio
em um aplicativo do Windows.
Adicionar uma fonte de dados no seu Clique em Add New Data Source no Janela de fontes de
projeto dados e complete a Assistente para Configurao da
Fonte de Dados
Como: Conectar-se a Dados em um Banco de
Dados
Como se conectar a dados em um objeto:
Como: se conectar a dados em um servio da
Definir os itens na janela Data Como: Definir o controle a ser criado quando arrastado da
Sources para os controles que voc janela Data Sources:
deseja que estejam criados
Arrastar itens da janela Data Sources Como exibir dados em um controle Windows
para seu formulrio Forms DataGridView:
Como: Exibir Dados em controles individuais
Windows Forms
Encadernao dados para controles existente
como:
Depois de ter criado um formulrio que exibe dados, voc pode desejar seguir uma das seguintes
tarefas:
Editar os dados na Editar dados no seu aplicativo (tenha em mente que alteraes nos
fonte de dados dados em controles com dados vinculados so gravadas
subjacentes automaticamente no dataset, mas no so salvas automaticamente no
banco de dados subjacente.)
Fontes de dados
Fontes de dados representam os dados disponveis para seu aplicativo e so criadas executando
o Assistente para Configurao da Fonte de Dados. Fontes de dados so criadas de bancos de
dados, servios da Web ou objetos. Para obter mais informaes, consulte Viso geral sobre
fontes de dados.
Fontes de dados esto disponveis para o projeto como itens em Janela de fontes de dados e
podem ser arrastadas para seu formulrio para criar controles que exibem os dados subjacentes.
Observao
Voc pode alterar a lista de controles disponveis para itens na janela Data Sources. Para obter
mais informaes, consulte Como: Adicionar Controles Personalizados Janela de Fonte de
Dados.
TableAdapters
TableAdapters so componentes gerados pelo designer criados pelo Visual Studio. Eles so
usados para preencher datasets (ou, mais especificamente, eles so usados para carregar dados
em DataTables que compem um dataset e para atualizar o banco de dados pelo qual a
DataTable foi preenchida). TableAdapters so anlogos a adaptadores de dados fortemente
tipados; eles fornecem comunicao entre seu aplicativo e seus dados. TableAdapters contm a
conexo e comandos, ou instrues SQL, que so executados no armazenamento de dados
subjacentes. Para obter mais informaes, consulte Viso Geral do Adaptador de Tabela.
Consultas de TableAdapter
Marcas inteligentes especficas para trabalhar com dados esto disponveis em vrios controles.
Quando certos controles so adicionados a um formulrio, um conjunto de aes possveis
relacionadas a dados esto disponveis na marca inteligente. Para obter mais informaes,
consulte Marcas Inteligentes de Dados.
Componente BindingSource
O componente BindingSource serve a dois propsitos. Primeiro, ele fornece uma camada de
engano ao vincular os controles no seu formulrio aos dados. Controles no formulrio so
vinculados ao componente BindingSource (em oposio aos sendo vinculados diretamente a
uma fonte de dados).
Alm disso, o componente BindingSource pode gerenciar uma coleo de objetos. Adicionar um
tipo ao BindingSource cria uma lista do mesmo tipo.
BindingSource Component
BindingSource Component Overview
BindingSource Component Architecture
BindingSource Component Sample
Este componente fornece uma interface de usurio para navegar por dados em um aplicativo do
Windows. Para obter mais informaes, consulte BindingNavigator Control (Windows Forms).
Controle DataGridView
O controle DataGridView permite que voc exiba e edite dados tabulares de muitos tipos
diferentes de fontes de dados. Vinculao de dados ao controle DataGridView realizada por
meio da propriedade DataSource. Para obter mais informaes, consulte DataGridView Control
Overview (Windows Forms).
Um dos cenrios mais comuns no desenvolvimento de aplicativos exibir dados num formulrio
em um aplicativo Windows. Voc pode exibir dados em um formulrio arrastando itens do Janela
de fontes de dados para o formulrio. Esta explicao passo a passo cria um formulrio simples
que exibe dados de uma nica tabela em vrios controles individuais. Este exemplo usa a tabela
Customers do banco de dados de exemplo Northwind.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o aplicativo Windows
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
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.)
Crie os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
Pressione F5.
Navegue pelos registros usando o controle BindingNavigator.
Prximas etapas
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
aps criar um Windows Form vinculado a dados (data-bound). Alguns aprimoramentos que voc
poderia fazer a essa explicao passo a passo incluem:
Em muitos cenrios de aplicativo, voc deseja trabalhar com dados que vem de mais de uma
tabela e, com freqncia, dados de tabelas relacionadas. Isto , voc deseja trabalhar com uma
relao pai-filho. Por exemplo, convm criar um formulrio onde selecionar um registro de cliente
exibe os pedidos referentes a esse cliente. Exibir os registros relacionados no formulrio obtido,
definindo a propriedade DataSource do filho BindingSource para a pai BindingSource (no a
tabela filho), e definindo a propriedade DataMember do filho BindingSource para a relao de
dados que liga as tabelas pai e filho juntas.
Esta etapa cria um DataSet com base nas tabelas Customers e Orders do banco de dados de
exemplo Northwind.
Para criar controles para exibir os dados do cliente (customer) (registros pai)
Para criar controles para exibir os pedidos (orders) para cada cliente (registros filho)
Observao
Testando o aplicativo
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
aps criar um formulrio de detalhes mestre. Voc pode fazer um aperfeioamento nesta
explicao passo a passo, que :
Usar consultas parametrizadas ajuda a tornar seu aplicativo eficiente, permitindo que o banco de
dados faa o trabalho no qual ele melhor filtrar registros rapidamente. Se, em contrapartida,
voc solicitar um tabela de banco de dados inteira, transferi-la atravs da rede, e em seguida, usar
lgica do aplicativo para encontrar os registros que voc deseja, seu aplicativo pode se tornar
lento ineficiente.
Voc pode adicionar consultas parametrizadas a qualquer TableAdapter (e controles para aceitar
valores de parmetro e executar a consulta) usando o Caixa de Dilogo Construtora de Critrios
de Pesquisa. Abra a caixa de dilogo selecionando o comando Add Query no menu Data (ou em
qualquer marca inteligente TableAdapter).
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.
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.
Voc pode criar os controles vinculados a dados arrastando itens da janela Data Sources para
seu formulrio.
Voc pode adicionar uma clusula WHERE consulta original usando o Caixa de Dilogo
Construtora de Critrios de Pesquisa.
Observao
Fontes de dados OleDb e Access usam o ponto de interrogao '?' para denotar parmetros,
portanto a clusula WHERE teria esta aparncia: WHERE City = ?
Executar o aplicativo abre o formulrio pronto para receber o parmetro como entrada.
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:.
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.
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
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).
Executando 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:
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
Ao criar controles para uso em cenrios de vinculao de dados, voc precisa implementar um
dos seguintes atributos de vinculao 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
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
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.
Esta explicao passo a passo expande na existncia de MaskedTextBox para criar o controle
PhoneNumberBox.
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#
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.
Dentro da janela Data Sources voc pode definir o controle a ser criado antes de arrastar itens
para seu formulrio.
Voc pode criar os controles com dados vinculados, arrastando itens da janela Data Sources
para o formulrio.
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
depois de criar um controle que oferece suporte a vinculao de dados. Algumas etapas prximas
tpicas incluem:
Passo a passo: Criando um Controle de Usurio que Suporta Ligao de Dados Complexa
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:
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.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
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 controles complexos que suportam a vinculao de dados, voc pode implementar o
ComplexBindingPropertiesAttribute.
J#
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.
Dentro da janela Data Sources voc pode definir o controle a ser criado, antes de arrastar itens
para seu formulrio.
Voc pode criar os controles com dados vinculados, arrastando itens da janela Data Sources
para seu formulrio.
Dependendo dos requisitos de seu aplicativo, h vrias etapas que voc pode desejar executar
depois de criar um controle que suporta ligao de dados. Algumas prximas etapas tpicas
incluem:
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
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:
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.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um aplicativo Windows
Esta explicao passo a passo cria um controle de pesquisa User Control, para adicionar um
item User Control ao projeto LookupControlWalkthrough
Para os controles de pesquisa que suporta a vinculao de dados, voc pode implementar o
LookupBindingPropertiesAttribute.
1. Alternar o controle LookupBox para modo de exibio do cdigo. (No menu View, escolha
Code).
2. Substitua o cdigo no LookupBox com o seguinte:
C#
using System.Windows.Forms; namespace CS {
[System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember",
"ValueMember", "LookupMember")] public partial class LookupBox : UserControl { public object
DataSource { get{ return comboBox1.DataSource; } set{ comboBox1.DataSource = value; } } public
string DisplayMember { get{ return comboBox1.DisplayMember; } set{ comboBox1.DisplayMember =
value; } } public string ValueMember { get{ return comboBox1.ValueMember; } set{
comboBox1.ValueMember = value; } } public string LookupMember { get{ return
comboBox1.SelectedValue.ToString(); } set{ comboBox1.SelectedValue = value; } } public
LookupBox() { InitializeComponent(); } } }
J#
Essa etapa cria uma fonte de dados usando o Data Source Configuration Wizard baseado nas
tabelas Orders e 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.
Dentro da janela Data Sources voc pode definir o controle a ser criado antes de arrastar itens
para seu formulrio.
Voc pode criar os controles com dados vinculados, arrastando itens da janela Data Sources
para Form1.
Observao
Para melhor entender, e fornecer contexto para os exemplos nesta pgina, recomendvel que
voc aperfeioe o seguinte: Passo-a-Passo: Conectando a dados em Objetos. Esta explicao
passo a passo cria os objetos discutidos nesta pgina de ajuda.
Para esse exemplo, voc carrega dados para os objetos usando TableAdapters. Por padro,
TableAdapters so criados com dois tipos de mtodos que buscam dados de um banco de dados
e preenchem tabelas de 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:
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); } }
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.
Observao
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. }
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
C#
Order currentOrder = new Order(); currentCustomer.Orders.Add(currentOrder);
Observao
C#
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
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.
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.
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.
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); }
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
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 Criar uma nova DataRow e adicion-la coleo de linhas da tabela.
uma tabela de dados. For more information, see Como adicionar linhas ao um DataTable.
Atualizar registros Atribua um valor diretamente para a coluna especfica de uma linha
existentes em uma tabela de dados. For more information, see Como editar linhas de uma
de dados. DataTable:.
Excluir registros existentes Chame o Delete mtodo da linha de dados que deseja remover da
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
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:.
Definindo as propriedades do objeto DataColumn como MaxLength, AllowDBNull e Unique
Por padro, cada alterao em uma coluna gera quatro eventos: Primeiro o evento
ColumnChanging e ColumnChanged para a coluna especfica sendo alterada, e depois os
eventos RowChanging e RowChanged se vrias alteraes forem sendo feitas para a linha, os
eventos sero gerados para cada alterao.
Observao
O evento que voc escolher depende de quo granulada seja a validao que voc deseja. Se ele
for importante que voc atualize um erro imediatamente quando uma coluna for alterada, criando
validao usando o evento ColumnChanging. Caso contrrio, use o evento RowChanging que
pode resultar em captura de vrios erros ao mesmo tempo. Alm disso, se seus dados so
estruturados de tal forma que o valor de uma coluna validada com base no contedo de outra
coluna, ento voc deve executar a validao durante o evento RowChanging.
Quando registros so atualizados, o objeto DataTable gera eventos que voc pode responder
para as alteraes que esto ocorrendo e depois que as alteraes forem feitas.
Se seu aplicativo estiver usando um DataSet tipado, voc pode criar manipuladores de eventos
altamente tipados. Isso adicionar quatro eventos tipados que voc pode criar manipuladores;
dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting e
dataTableNameRowDeleted. Esses manipuladores de eventos tipados passam um argumento que
inclui o nome das colunas da tabela que tornam mais fcil para cdigo gravar e ler.
Evento Descrio
ColumnChanging O valor em uma coluna est sendo alterado. O evento passa a linha e coluna
para voc, juntamente com o novo valor proposto.
ColumnChanged O valor em uma coluna foi alterado. O evento passa a linha e coluna para
voc, juntamente com o valor proposto.
RowChanging Alteraes feitas em um objeto DataRow esto prestes a serem confirmadas
de volta para o DataSet. Se voc no tiver chamado o mtodo BeginEdit, o
Consulte tambm
Tarefas
Esta explicao passo a passo demonstra como validar dados quando alteraes so feitas aos
dados em um dataset. Onde voc deve executar as verificaes de validao em seus dados
dependente dos requisitos do seu aplicativo; para esta explicao passo a passo ns validamos
dados durante as alteraes dos valores nas colunas individuais. Esta explicao passo a passo
usa o evento ColumnChanging para verificar se um valor aceitvel est sendo inserido no registro.
Se o valor no for vlido, um controle ErrorProvider exibido para o usurio.
O exemplo tambm mostra como usar o Dataset Designer para criar uma classe parcial para o
dataset. (A classe parcial onde os usurios podem adicionar cdigo para estender a
funcionalidade do dataset gerado pelo Visual Studio. Ela no substituda se o dataset for
regenerado.)
Observao
As caixas de dilogo e comandos de menu que voc vir podem diferir dos descritos na Ajuda
dependendo das suas configuraes ativas ou da sua edio. Para alterar as configuraes,
escolha Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Visual Studio Settings.
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
Observao
No defina a propriedade DataMember.
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
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:.
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.
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
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
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
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.
Ela impede que um erro seja jogado quando voc atualiza uma coluna antes de obter a
outra coluna.
Ele suspende determinados eventos de atualizao de serem elevados (eventos que so
freqentemente usados para validao).
Aps a concluso de uma atualizao, voc pode reativar a restrio de verificao, que tambm
reativa eventos de atualizao e os aumenta.
Observao
No Windows Forms, a arquitetura de vinculao de dados incorporados ao DataGrid suspende a
restrio de verificao at que o foco mova para fora de uma linha e voc no precisa chamar
explicitamente os mtodos BeginEdit, EndEdit ou CancelEdit.
Aps a concluso de uma atualizao, voc pode reativar a restrio de verificao, que tambm
reativa eventos de atualizao e os aumenta.
Para obter mais informaes sobre suspenso de eventos, consulte Como: desativar restries ao
preencher um DataSet.
Propriedade RowState
Descrio
Valor de
Detached A linha tinha sido criada mas no faz parte de qualquer DataRowCollection.
Um objeto DataRow est neste estado imediatamente aps ele ter sido criado
e antes de ser adicionado a uma coleo ou se ele tiver sido removido de uma
coleo.
Unchanged A linha no foi alterada desde que AcceptChanges foi chamado pela ltima
vez.
Enumerao DataRowVersion
Valor de
DataRowVersion Descrio
Original A verso original de um registro uma cpia do registro como ele nas
ltimas alteraes foram confirmadas no dataset. Em termos prticos, isso
normalmente a verso de um registro como lida de uma fonte de dados.
A verso proposta til quando voc precisa realizar validao antes de realmente confirmar as
alteraes para o dataset.
Mesmo se registros tiverem sido alterados, no h sempre verses originais ou atuais de linha.
Quando voc insere uma nova linha na tabela, no h nenhuma verso original, somente a verso
atual. Da mesma forma, se voc excluir uma linha, chamando o mtodo Delete da tabela, h uma
verso original, mas nenhuma verso atual.
Voc pode testar para ver se uma verso especfica de um registro existe consultando a
propriedade HasVersion de uma linha de dados. Voc pode acessar tanto a verso de um
registro, passando um valor de enumerao DataRowVersion como um argumento opcional
quando voc solicitar o valor de uma coluna.
comum que voc no atualize cada registro em um dataset. Por exemplo, um usurio pode
estar funcionando com um controle Windows Forms DataGridView que exibe vrios registros.
Entretanto, o usurio pode atualizar apenas alguns registros, excluir um, e inserir um novo nome.
Datasets e tabelas de dados fornecem um mtodo (GetChanges) para retornar somente as linhas
que foram modificadas
Voc pode criar subconjuntos de registros alterados usando o mtodo GetChanges de uma tabela
de dados (GetChanges) ou do DataSet prprio (GetChanges). Se voc chamar o mtodo para a
tabela de dados, ela retornar uma cpia da tabela com apenas os registros alterados. Da mesma
forma, se voc chamar o mtodo no dataset, voc ter um novo dataset com apenas registros
alterados. GetChanges por si s retornar todos os registros alterados. Em contraste, passando o
desejado DataRowState como um parmetro para o mtodo GetChanges, voc pode especificar o
subconjunto de registros alterados que voc deseja: registros recm-adicionados, registros
marcados para excluso, registros separados, ou registros modificados.
Obter um subconjunto de registros alterados especialmente til quando voc deseja enviar
registros para outro componente para processamento. Em vez de enviar o dataset inteiro, voc
pode reduzir a sobrecarga de se comunicar com o outro componente por meio somente os
registros que o componente precisa. Para obter mais informaes, consulte Como: Recuperar
Linhas Alteradas.
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).
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
O mtodo AcceptChanges est disponvel em trs nveis. Voc pode cham-lo em um objeto
DataRow, que confirma as alteraes para apenas aquela linha. Voc tambm pode cham-lo em
um objeto DataTable para confirmar todas as linhas em uma tabela ou no objeto DataSet para
confirmar todas as alteraes pendentes em todos os registros de todas as tabelas do dataset.
A tabela a seguir descreve quais alteraes so confirmadas com base em qual objeto o mtodo
chamado.
Mtodo Resultado
Observao
Se voc carregar um dataset chamando o mtodo Fill do TableAdapter, voc no tem que
explicitamente aceitar alteraes; por padro o mtodo Fill chama o mtodo AcceptChanges quando
ele tiver terminado de preencher a tabela de dados.
Um mtodo relacionado, RejectChanges, desfaz o efeito das alteraes por copiar a verso de volta
Original para a verso Current dos registros e configurar o RowState de cada registro de volta a
Unchanged.
Validao de Dados
A fim de verificar que os dados em seu aplicativo atendem aos requisitos dos processos que
passado, voc freqentemente precisa adicionar validao. Isso pode envolver verificao que
uma entrada do usurio em um formulrio est correta, validao de dados enviados para seu
aplicativo por outro aplicativo ou mesmo verificar que informaes calculadas no seu componente
se enquadra nas restries de sua fonte de dados e aplicativos requeridos.
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.
Na camada de apresentao, adicionando validao a formulrios. Para obter mais
informaes, consulte User Input Validation in Windows Forms (Windows Forms).
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
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 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
Passando Parmetros
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.
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-.
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.
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
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:
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.
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.
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 :
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.
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.
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.
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.
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.
Voc comear com a explicao passo a passo de como criar um novo aplicativo do Windows.
Observao
4. Clique Next na pgina Save connection string to the application configuration file.
5. Expanda o n Tables e selecione a tabela Customers. O nome padro para o dataset deve
ser NorthwindDataSet.
6. Clique Finish para adicionar o dataset para o projeto.
Criar um controle acoplado Data-DataGridView
Nesta seo voc criar um DataGridView arrastando o Customers item da janela Data Sources
para seu Windows Form
1. No menu Data, escolha Show Data Sources para abrir o Data Sources Window.
2. Expanda o n NorthwindDataSet a partir da janela Data Sources e selecione a tabela
Customers.
3. Clique na seta para baixo no n da tabela e selecione DataGridView na lista suspensa.
4. Arraste a tabela para uma rea vazia do seu formulrio.
Um controle DataGridView denominado CustomersDataGridView e um BindingNavigator
nomeado CustomersBindingNavigator so adicionados ao formulrio vinculado, que por sua
vez o BindingSource vinculado tabela Customers no NorthwindDataSet.. NorthwindDataSet
Ponto de Verificao
Agora voc pode testar o formulrio para certificar-se que ele funciona como esperado at este
ponto.
Como voc manipula os erros depende como as regras especficas do negcio governam o
aplicativo. Para esta explicao passo a passo, aps a gerao de uma violao de concorrncia,
a estratgia de manipulao do erro concorrncia a seguir ser usada como uma ilustrao:
O usurio ento capaz de substituir o banco de dados com a verso proposta ou cancelar a
atualizao e atualizar o dataset com os novos valores do banco de dados.
Quando voc tentar executar uma atualizao e uma exceo gerada, voc geralmente deseja
fazer algo com as informaes fornecidas pela exceo gerada.
Observao
O cdigo apenas que voc escreveu chama o procedimento CreateMessage para exibir informaes
de erro para o usurio. Para esta explicao passo a passo, voc usar uma caixa de mensagem
para exibir as diferentes verses do Registro para o usurio e permitir que o usurio escolha se
deseja substituir o registro com as alteraes ou cancelar a edio. Depois que o usurio
seleciona uma opo (clicar um boto) na caixa de mensagem, a resposta passado para o
mtodo ProcessDialogResult.
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);
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.
Teste
Agora voc pode testar o formulrio para certificar-se ele funciona como esperado. Para simular
uma violao de concorrncia voc precisa alterar os dados no banco de dados aps preench no
NorthwindDataSet.
Observao
Esta explicao passo a passo fornece instrues detalhadas para executar instrues SQL
diretamente em um banco de dados usando os mtodos DBDirect de um TableAdapter . Mtodos
DBDirect de um TableAdapter fornecem um fino nvel de controle sobre as atualizaes de banco
de dados. Com eles podem executar especificamente instrues SQL ou procedimentos
armazenados por chamando individual dos mtodos Insert, Update, e Delete conforme necessrio
por seu aplicativo (em oposio a sobrecarga do mtodo Update que executa as instrues
UPDATE, INSERT, e DELETE tudo em uma chamada).
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
Criar os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
Nome Texto
InsertButton Inserir
UpdateButton Atualizao
DeleteButton Excluir
1. Clique duas vezes em InsertButton para criar um manipulador de eventos para o evento
Click e abrir o seu formulrio no Editor de Cdigo.
2. Substituir o InsertButton_Click manipulador de eventos com o seguinte cdigo:
C#
private void InsertButton_Click(object sender, EventArgs e) { Int32 newRegionID = 5; String
newRegionDescription = "NorthEastern"; try { regionTableAdapter1.Insert(newRegionID,
newRegionDescription); } catch (Exception ex) { MessageBox.Show("Insert Failed"); }
RefreshDataset(); } private void RefreshDataset() {
this.regionTableAdapter1.Fill(this.northwindDataSet1.Region); }
1. Clique duas vezes em UpdateButton para criar um manipulador de eventos para o evento
Click e abrir o formulrio no Editor de Cdigo.
2. Substituir o manipulador de eventos UpdateButton_Click com o seguinte cdigo:
C#
private void UpdateButton_Click(object sender, EventArgs e) { Int32 newRegionID = 5; try {
regionTableAdapter1.Update(newRegionID, "Updated Region Description", 5, "NorthEastern"); }
catch (Exception ex) { MessageBox.Show("Update Failed"); } RefreshDataset(); }
1. Clique duas vezes em DeleteButton para criar um manipulador de eventos para o evento
Click e abrir o formulrio no Editor de Cdigo.
2. Substitua o manipulador de eventos DeleteButton_Click com o seguinte cdigo:
C#
private void DeleteButton_Click(object sender, EventArgs e) { try { regionTableAdapter1.Delete(5,
"Updated Region Description"); } catch (Exception ex) { MessageBox.Show("Delete Failed"); }
RefreshDataset(); }
Executando o aplicativo
Dependendo dos seus requisitos do aplicativo, existem vrias etapas podem ser executadas aps
criar um formulrio vinculado a dados. Voc pode fazer nesta explicao passo a passo alguns
aprimoramentos que incluem:
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir das descritas na Ajuda
dependendo de suas configuraes ativas ou de edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte Visual Studio
Settings.
Nesta seo
Marcas Inteligentes de Dados
Fornece informaes sobre alguns comandos de marca inteligente que esto disponveis
para dados.
Coloca um dataset tipado existente ou um novo dataset sem tipo (uma instncia da classe
System.Data.Dataset) em um formulrio ou componente.
Permite a voc selecionar o dataset desejado em uma lista de datasets em seu projeto.
Permite a voc selecionar qual fonte de dados para mesclar quando vrias fontes de
dados esto disponveis.
Permite a voc selecionar uma tecla quando uma coluna participa de uma restrio multi-
chave.
Fornece links para tpicos sobre editores de coleo diferentes que permitem a voc criar
e editar membros individuais de uma coleo.
Conexes ausente
Informa quando um dataset contm uma referncia para uma seqncia de conexo que
no est nas configuraes do aplicativo.
Exibe um ou mais erros que ocorreram enquanto o Visual Studio tentava criar uma
instncia de um adaptador de dados e definir suas propriedades.
Permite a voc ver ser como os dados preenchero um dataset atravs de um adaptador
de dados, o que til para testar se o adaptador est retornando os dados que voc
espera, que mapeamentos de tabela funcionam corretamente, e o efeito de parmetros de
diferentes valores.
Permite a voc solicitar acesso a uma fonte de dados (normalmente um banco de dados)
para o qual voc ainda no tenha sido autenticado.
Permite que voc tenha controle se uma senha est incorporada na seqncia de
conexo.
Permite a voc colocar uma restrio de chave externa em uma ou mais colunas em uma
tabela dataset que est relacionada a outra tabela.
Aparece como parte do Data Adapter Configuration Wizard para permitir que voc possa
ver o script SQL que o assistente utilizar para criar procedimentos armazenados para ler
e gravar dados.
Permite a voc criar um relacionamento (um objeto DataRelation) que mantm informao
sobre registros pai-filho em duas tabelas de dados em um dataset.
Permite a voc especificar quais colunas em uma tabela do banco de dados ou outra fonte
de dados so equivalentes s colunas em uma tabela dataset.
Permite a voc colocar uma restrio exclusiva em uma ou mais colunas em uma tabela
em um dataset sem tipo.
XML Designer
Fornece um conjunto de ferramentas visuais para trabalhar com Esquemas XML, Datasets
ADO.NET, e documentos XML.
Sees relacionadas
Acessando Dados
Fornece links para tpicos que descrevem como acessar dados em seus aplicativos Visual
Basic e Visual C#.
Fornece links para tpicos de referncia sobre como trabalhar com Ferramentas de Banco
de Dados Visual.
Observao
Na verso anterior do Visual Studio Adaptadores de dados eram usados para comunicao entre
um aplicativo e um banco de dados. Embora adaptadores de dados sejam ainda um componente
principal do .NET Framework Data Providers, TableAdapters so componentes gerados pelo
designer que simplificam o processo de mover dados entre o seu aplicativo e um banco de dados.
Para obter mais informaes sobre como trabalhar com TableAdapters, consulte Viso Geral do
Adaptador de Tabela.
Nesta seo
Introduo aos adaptadores de dados
Fornece uma viso geral do que so adaptadores de dados, para que so usados, e como
eles so estruturados.
Descreve as opes para obter informaes sobre como mapear nomes de coluna entre
uma tabela de origem e uma tabela DataSet.
Explica como criar e definir propriedades de parmetros que sero passados em tempo de
execuo para comandos do adaptador de dados.
Sees relacionadas
Criando aplicativos de dados com Visual Studio
Apresenta uma srie de tpicos de cdigo exemplo especfico para preencher DataSets
com adaptadores de dados.
Consulte tambm
Conceitos
Para criar um objeto de banco de dados, voc deve criar um projeto SQL Server, adicionar os
itens necessrios ao projeto e adicionar cdigo a esses itens. Em seguida, voc deve compilar o
projeto em um assembly e implant-lo no SQL Server.
Observao
O recurso de integrao Common Language Runtime (CLR) fica desativado por padro no
Microsoft SQL Server e deve ser ativado para usar itens de projeto SQL Server. Para ativar a
integrao CLR, use a opo clr enabled do procedimento armazenado sp_configure. Para mais
informaes, consulte Enabling CLR Integration.
Crie um novo projeto SQL Server clicando no menu File, selecionando Project e depois
selecionando SQL Server Project na New Project Dialog Box. Para obter mais informaes,
consulte Como: criar um projeto SQL Server.
Propriedades do projeto
Voc pode alterar o Assembly name, que o nome do arquivo de sada que contm o manifesto
do assembly. Se voc alterar o nome do assembly, o nome do objeto do banco de dados no
banco de dados do SQL Server tambm alterado.
Novos projetos SQL Server contm somente referncias e informaes de assembly. Para criar
objetos de banco de dados, voc deve primeiro adicionar itens ao projeto e depois adicionar
cdigo aos itens. Para obter mais informaes, consulte Modelos de Item para Projetos do SQL
Server.
A tabela a seguir lista itens especficos para projetos SQL Server que voc pode adicionar.
Funo definida pelo Como criar e executar um SQL CLR Server funo definida pelo
usurio usurio:
Tipo definido pelo usurio Como criar e executar um SQL CLR Server funo definida pelo
usurio:
Quando voc compila seu projeto, ele compilado em um assembly que pode ser implantado em
um banco de dados que est referenciado no projeto e depurado.
Dica
Como uma alternativa a compilar, implantar e depurar em trs etapas separadas, voc pode usar
o comando Start (F5) ou o comando Start Without Debugging (CTRL+F5) para compilar o
assembly, implant-lo no banco de dados e depurar o objeto de banco de dados.
Antes de voc poder depurar o objeto de banco de dados, voc deve adicionar cdigo Transact-
SQL ao item Test.sql. O script no item Test.sql essencial para a depurao porque ele executa
as aes no banco de dados que so necessrias para iniciar e testar seu objeto de banco de
Visual C# Consolidado 999
dados. Quando ele adicionado ao seu projeto, o item Test.sql contm esboo de cdigo para
um script que executa a ao necessria no banco de dados. Se seu projeto SQL Server contm
mais de um objeto de banco de dados, o script do item Test.sql deve executar cada um dos
objetos de banco de dados.
Esse requisito de script de depurao diferente de, por exemplo, um projeto do Windows Forms,
que cria e executa um programa executvel independente; objetos de banco de dados so
executados apenas em resposta a aes ou chamadas no banco de dados. Por exemplo, um
disparador pode ser ativado quando uma nova linha inserida em uma tabela. Portanto, o script
de Test.sql deve inserir uma nova linha em uma tabela para ativar o disparador. Os resultados do
disparador sero exibidos na Output Window no Visual Studio, para que voc possa determinar
se o disparador est funcionando corretamente.
Em seguida, adicione cdigo ao item que voc adicionou no seu projeto SQL Server e ao item
Test.sql. Voc pode encontrar cdigo de exemplo para cada objeto de banco de dados em
tpicos sobre o item de banco de dados disponvel. Consulte a tabela anterior.
Quando voc compila seu projeto, ele compilado em um assembly. Se voc estiver usando
Visual Basic, use o seguinte procedimento:
Procedimentos armazenados para bancos de dados SQL Server 2005 agora podem ser escritos
em cdigo gerenciado usando as linguagens do .NET Framework como Visual Basic e C#.
Procedimentos armazenados escritos em cdigo gerenciado so chamados procedimentos
armazenados CLR.
Voc pode criar procedimentos armazenados SQL adicionando itens Stored Procedure a
projetos SQL Server. Aps a implantao bem sucedida para um SQL Server, procedimentos
armazenados criados no cdigo gerenciado so chamados e executados como qualquer outro
procedimento armazenado.
Esta explicao passo a passo requer uma conexo para o banco de dados de exemplo
AdventureWorks executando em SQL Server 2005. Se uma conexo com o banco de dados de
exemplo AdventureWorks estiver disponvel no Server Explorer, ento ele ser listado na Add
Database Reference Dialog Box.
Observao
O recurso de integrao do common language runtime (CLR) fica desativado por padro no
Microsoft SQL Server e deve ser ativado para usar itens de projeto de SQL Server. Para ativar
integrao CLR, use a opo clr enabled do procedimento armazenado sp_configure. Para mais
informaes, consulte Enabling CLR Integration.
Aps voc criar um novo procedimento armazenado, ele pode ser criado, implantado no SQL
Server, e depurado, pressionando F5. Primeiro, no arquivo Test.sql encontrado na pasta
TestScripts do seu projeto, adicione cdigo para executar e testar seu procedimento
armazenado. Para obter mais informaes sobre como criar scripts de teste, consulte Como:
Editar o script Test.sql para executar objetos SQL.
Para obter mais informaes sobre depurao de SQL, consulte Depurao objetos de banco de
dados SQL.
Class
Enumerao
Interface
Classe abstrata
Estrutura
Delegado
Module (Visual Basic somente)
Para exibir tipos existentes em um projeto, consulte COMO: Exibir tipos existentes.
Dica
Se o projeto no contm um arquivo diagrama de classe, voc deve adicionar um. Para obter mais
Dica
Para manter a caixa de ferramentas aberta enquanto voc trabalha no Class Designer, clique no
Auto Hide boto (de pino de envio) na caixa de ferramentas.
3. Na caixa de ferramentas Class Designer, arraste uma forma tipo para o diagrama de
classe.
Caixa New <Type> de dilogo aparecer para que voc pode especificar o nome do tipo, o
nome do arquivo para salvar o cdigo para o tipo, e o nvel de acesso para o tipo. Identifica
<Type> o tipo que voc est criando, tais como Class ou Enumeration.
4. Na caixa New <Type> de dilogo, execute uma das opes a seguir:
o Para aceitar os valores padro, clique em OK.
o Para especificar valores diferentes, digite o nome e nome de arquivo para o tipo,
escolha o nvel de acesso para o tipo na caixa Access de listagem, e clique em OK.
Dica
Para selecionar um arquivo existente, clique no ellipsis. () boto ao lado da File name Caixa
5. A forma que representa o tipo aparece no diagrama na posio onde voc arrastado-lo. Se
voc especificou um novo nome de arquivo Visual Studio cria um arquivo cdigo fonte com
o nome do tipo no n de projeto em Solution Explorer. Se voc escolher um arquivo
existente, Visual Studio adiciona o cdigo para o novo tipo ao arquivo especificado.
Cada tipo que pode ser representado em um diagrama de classe pode conter tipos especficos de
membros. A tabela a seguir descreve os tipos podem conter os membros:
Class Mtodo, Propriedade (para C# e Visual Basic), campo, evento (para C# e Visual
Basic), (mtodo) construtor, destruidor (mtodo), constante
Struct Mtodo, campo de propriedade (para C# e Visual Basic), evento (para C# e Visual
Basic), (mtodo) construtor, constante
Delegado Parmetro
Observao
O nico tipo para o qual voc pode especificar parmetros delegado. Voc pode especificar
parmetros para mtodos, que por sua vez pode ser adicionado aos tipos para classe, estrutura, e
interface; para obter mais informaes consulte COMO: Adicionar um parmetro a um mtodo.
Observao
Para obter informaes sobre como criar membros tipo, consulte Criar membros tipo.
Observao
Observao
ou -
Usar o mouse
Usar o mouse, voc pode alterar a aparncia da janela do detalhes classe e os dados ele exibe,
em maneiras a seguir:
Observao
Os acoplamentos de teclas a seguir foram escolhidos para especificamente para imitar a
experincia de digitar cdigo.
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- Mova o cursor para o campo Nome da prxima linha na grade da janela
vrgula) Detalhes classe Membro.
Ou
Parntese de
fechamento ())
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
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.
Para indexadores, o nome somente leitura e o restante (tipo, modificador, Resumo)
editvel.
Todos os generics ter parmetros somente leitura na janela Detalhes classe. Para alterar
um parmetro genrico, edite o cdigo fonte.
O nome do parmetro do tipo que definido em um tipo genrico somente leitura.
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.
Imediatamente Alterar cdigo fonte ser refletida na exibio de informaes de assinatura
no Class Designer e a janela Detalhes classe. Se a janela Detalhes classe fechada ao tempo,
as novas informaes estar visveis na prxima vez que abri-lo.
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.
Nos dois ltimos casos, a entidade de referncia (um tipo ou membro) somente para leitura no
diagrama de classe que representa.
Um projeto inteiro ou partes dele, tais como arquivos individuais, podem ser somente leitura. Os
casos mais comuns em que um projeto ou um de seus arquivos somente leitura so quando ele
est sob controle Cdigo fonte-(e possvel check-out), ele existe em um conjunto externo, ou
quando o sistema operacional considera os arquivos para ser somente leitura.
Como um diagrama de classe salvo como um arquivo em um projeto, voc precisa fazer check-
out do projeto para salvar as alteraes feitas na Class Designer ou na janela Detalhes classe.
Se voc no faa check-out do projeto, voc pode ainda salvar um diagrama de classe que
descreve o projeto, mas no como parte do projeto.
O projeto pode ser somente leitura por uma razo diferente de controle cdigo fonte-. Fechar o
projeto exibe uma caixa de dilogo perguntando se deve substituir o arquivo de projeto, descartar
alteraes (no salvar) ou cancelar a operao de fechamento. Se voc optar por substituir,
arquivos de projeto so sobrescritos e feita somente leitura. O novo arquivo diagrama de classe
for adicionado.
Se voc tentarem salvar um projeto contendo um tipo cujo arquivo cdigo-fonte somente para
leitura, caixa Save of Read-Only File de dilogo aparece, que oferece opes para salvar o
arquivo com um novo nome ou novo local, ou para substituir o arquivo somente leitura. Se voc
substituir o arquivo, a nova cpia mais somente leitura.
Se um arquivo de cdigo contm um erro de sintaxe, formas Exibir cdigo no arquivo sero
somente leitura-temporariamente at ser corrigido o erro de sintaxe. Formas de nesse estado
exibir texto vermelho e um cone vermelho que exibe uma dica de ferramenta ler " O arquivo
cdigo fonte contm um erro de anlise ".
Um tipo referenciado (como um tipo .NET Framework), que existe em outro n de projeto ou em
um n conjunto referenced-, indicado na superfcie de design Class Designer como somente
leitura. Um tipo local, que existe no projeto voc tenha aberto, leitura-gravao, e sua forma
sobre o Class Designer superfcie do design indicada as such.
A grade exibe uma hierarquia de dois nveis de linhas. Linhas no nvel superior Exibir membros.
Linhas no nvel inferior exibir parmetros, sob os mtodos s quais eles pertencem.
As sees em In This Section descrevem aspectos das linhas exibidas pela janela Detalhes
classe.
Linhas membro
Todos os membros descritos na janela Detalhes classe representam os membros do tipo
selecionado no diagrama de classe. Existem quatro tipos de membros: mtodos, propriedades,
campos, e eventos. Linhas membro fornecem Nvel baixo edio de membros tipo.
Todas as linhas membro aparecem em ttulos que agrupam os membros por tipo. Por exemplo,
todas as propriedades aparecer sob o ttulo Properties, que, como um n na grade, pode ser
expandida ou recolhida.
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
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.
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.
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.
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
- ou -
1. Clique na forma que contm a propriedade que mostrada como uma associao.
A forma obtm foco e seus membros exibir na janela Detalhes classe e na janela
Propriedades.
2. Na janela Detalhes classe ou a janela Propriedades, edite o campo Nome para essa
propriedade e pressione ENTER.
O nome ser atualizado na janela Class Details, na linha de associao, na janela
Propriedades, e no cdigo.
Observao
Voc pode definir uma relao de herana se no existe nenhum. Para obter mais informaes,
consulte COMO: Definir herana entre tipos.
Clique com o boto direito do mouse tambm o tipo cujo tipo base voc deseja exibir, e escolha
Show Base Class ou Show Base Interfaces como apropriado.
Clique com o boto direito do tambm mouse o tipo para que voc deseja ver seus tipos
derivados, e escolher Show Derived Classes ou Show Derived Interfaces conforme apropriado.
Observao
Nome Tipo Base um tipo sempre ser exibido dentro do cabealho forma. No caso de vrias
interfaces, onde a lista pode obter longa, a lista pode estar recolhida para economizar espao.
Este procedimento supe que exista uma relao de herana entre o tipo e sua classe base ou
interface. Se nenhuma relao de herana existir, voc pode criar um seguindo as etapas no
COMO: Definir herana entre tipos.
Observao
Para exibir um tipo derivado, uma relao de herana deve existir entre dois tipos. Para definir
uma relao de herana, consulte COMO: Definir herana entre tipos.
Voc pode tambm clique com o boto direito do mouse o tipo e escolha Show Derived Classes
ou Show Derived Interfaces como apropriado.
Observao
Removendo formas Tipo de um diagrama de classe afeta apenas esse diagrama e no outros
Voc pode tambm selecione a forma e pressionar a tecla DELETE ou clique com o boto direito
do mouse na forma e escolha Remove from Diagram.
Observao
Na diagrama de classe, formas tipo aparecem recolhidas por padro para simplificar o modo de
exibio do diagrama. Voc pode expandir a forma Tipo para exibir seu contedo. No entanto,
compartimentos sem membros no aparecem na forma tipo.
Nomes compartimento descrever a natureza dos membros tipo e o idioma do projeto e a ordem de
grupo selecionado para exibir esses participantes dependem. Por exemplo, se voc agrupar por
tipo, membros tipo compartment nomes, como Fields, Properties, Methods. e Events pode
aparecer na forma Se voc agrupar membros alfabeticamente, somente um compartimento
chamado Members aparecer. Compartment nomes, como Public, Protected se voc agrupar
membros por modificador de acesso,,. ou Private pode aparecer Para obter mais informaes,
consulte COMO: Agrupar membros de tipo.
Voc tambm pode expandir ou recolher a forma, clicando no boto cumulativo ou rolldown, que
aparece como uma divisa, sobre a forma tipo ou clicando com o boto direito do mouse na forma
Tipo e escolhendo Expand ou Collapse no menu de atalho.
Quando a forma tipo estiver expandida, formas tipo mostram seus compartimentos por padro. No
entanto, voc pode ocultar compartimentos individuais e membros dentro da forma tipo para
enfatizar determinados aspectos do tipo no diagrama. Ocultando ou mostrando compartimentos e
seus membros no afeta o cdigo.
Tambm pode clique com o boto direito do mouse no nome compartimento e escolha Hide
Compartment a partir do menu de atalho. Voc tambm pode selecionar as caixas de seleo na
coluna Hide da janela classe detalhes para todos os membros no compartimento para ocultar o
compartimento Para obter mais informaes, consulte COMO: Abrir a janela Class Details.
Dica
Verifique se a janela Detalhes classe est aberta. Para obter mais informaes, consulte COMO:
Abrir a janela Class Details.
Observao
A janela Detalhes classe, diagrama de classe, e janela Propriedades todos exibir informaes
sobre o elemento que tem foco. Voc pode usar todas as janelas trs simultaneamente para exibir
informaes sobre o elemento. Para mais informaes, consulte Janela Properties.
Para exibir detalhes de um tipo diferente, clique em desse tipo. Quando o foco alterna para outro
tipo, seus detalhes so mostrados na janela Class Details.
Observao
Dica
Observao
Voc tambm pode mostrar um membro tipo usando a janela Detalhes classe desmarcando a
Hide caixa de seleo para o membro. Para obter mais informaes, consulte COMO: Abrir a
janela Class Details.
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.
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.
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.
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
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.
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.
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.
Observao
Depois voc copiados sua seleo, col-lo usando o Paste Comando no programa de destino.
Programas orientado Text-exibir o cdigo por trs do forma selecionada ou formas, enquanto
programas orientado a elementos grficos-exibir a imagem da forma ou formas que voc copiou.
Observao
Voc tambm pode escolher Copy em vez de Copy as Image. Copia Copy a imagem como um
bitmap regular, e Copy as Image copia a imagem como uma imagem vetorial, que melhor para
a maioria dos aplicativos do Office.
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.
Observao
Na janela Detalhes classe, voc pode editar o nome do membro mas no um tipo.
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 obter mais informaes, consulte COMO: Definir herana entre tipos.
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.
Projeto de Classes
Classe ferramentas Janela detalhes
Observao
Voc tambm pode criar Construtores e destructors usando os procedimentos nesta seo.
Lembre-se que Construtores e destructors so tipos especiais de mtodos, e como tal, so
exibidos no Methods compartimento na formas diagrama de classe e na seo Methods de
detalhes classe grade da janela.
Observao
A nica entidade voc pode adicionar a um delegado parmetro. Observe que o procedimento
chamado ' para criar um membro usando a barra de ferramentas Janela detalhes classe ' no
vlido para esta ao.
Observao
O seguinte cdigo Designer por si s no ser compilado. Em vez disso, compilar o exemplo no
COMO: Implementar um provedor Extender HelpLabel, que contm o cdigo para o criador como
uma classe aninhada.
C#
// // <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 =
Exemplo
O exemplo de cdigo a seguir demonstra como usar Servios Designer para criar e iniciar os
componentes no seu designer personalizado. Uma classe chamada DemoControlDesigner Designer
est conectado a uma DemoControl classe e executa as seguintes operaes:
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); } } }
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
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; } }
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.
Se sua classe implementa a IComponent interface, ele pode participar de um ambiente de criao
como Visual Studio.
Consulte tambm
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.
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) {
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>
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:
A DemoControl classe derivada da UserControl classe, mas exige nenhuma lgica especial para
estender sua interface do usurio em tempo de design. A interface de usurio em tempo de design
implementada pela classe DemoControlDesigner.
C#
// 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 = null; private UndoEngine undoEng = null;
C#
// 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(
Eventos servio
Alguns servios eventos de oferta ao qual o designer pode anexar. Por exemplo, a
DemoControlDesigner classe anexa manipuladores de eventos para o ComponentChanged,
ComponentAdded., e ComponentRemoved eventos
C#
// 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); }
C#
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"); }
Tenha cuidado ao desanexar o manipuladores de eventos no mtodo seu designer Dispose. Isso
evita comportamento indesejado quando seu designer sai do escopo.
C#
// 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(
Usando servios
A DemoControl classe usa vrios servios no seu Painel marca inteligente. Uma classe interno
chamado DemoActionList derivada da DesignerActionList classe. Essa classe tem mtodos que
permitem que voc se criar, excluir, e enumerar vrios objetos que esto disponveis no ambiente
de desenvolvimento. Ela expe esses mtodos como marcas inteligentes. Por exemplo, o
exemplo de cdigo a seguir utiliza o GetExtenderProviders mtodo para enumerar todos os
provedores Extender presentes no ambiente de desenvolvimento.
C#
// 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"); } }
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.
Exemplo
C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing;
using System.Text; using System.Windows.Forms; // This sample demonstrates the use of the //
DesignerSerializationVisibility attribute // to serialize a collection of strings // at design time. namespace
SerializationDemo { class Form1 : Form { private SerializationDemoControl serializationDemoControl1;
public Form1() { InitializeComponent(); } // The Windows Forms Designer emits code to this method. // If
an instance of SerializationDemoControl is added // to the form, the Strings will be serialized here. private
void InitializeComponent() { this.serializationDemoControl1 = new
Exemplo
O exemplo de cdigo a seguir demonstra como inicializar um controle quando ele criado pelo
ambiente de desenvolvimento. Esta criao ocorre quando voc arrastar uma instncia do
controle para o formulrio, e ele tambm ocorre quando voc inicia o designer para o formulrio.
Para obter uma explicao sobre neste exemplo, de cdigo completa Consulte Como: Estender a
aparncia e comportamento de controles no modo de design.
C#
// This demonstrates changing the appearance of a control while // it is being designed. In this case, the
BackColor property is // set to LightBlue. public override void InitializeNewComponent(IDictionary
defaultValues) { base.InitializeNewComponent(defaultValues); PropertyDescriptor colorPropDesc =
TypeDescriptor.GetProperties(Component)["BackColor"]; if (colorPropDesc != null &&
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.
Conversores tipo podem ser usados para converses valor seqncia-para-ou converso para ou
de tipos de dados com suporte em tempo de criao quanto no tempo de execuo. Em um host
como um navegador propriedade em um designer de formulrios, tipo Os conversores permitem
que um valor de propriedade para ser representado como texto para o usurio, e eles podem
converter um texto inserido pelo usurio em um valor do tipo de dados apropriado.
Mais nativos tipos de dados (Int32. tipos de enumerao, e outros) ter conversores tipo padro
que fornecem valor seqncia-para-converses e executar verificaes de validao, String Os
conversores tipo padro esto no espao para nome System.ComponentModel e so nomeados
TypeConverterNameConverter. Voc pode estender um conversor tipo quando a funcionalidade
padro no adequada para seu fins ou implementar um conversor Tipo personalizado quando
voc define um tipo personalizado que no tenha um conversor de tipos associados.
Observao
Para implementar um conversor de tipo simples que pode converter uma seqncia para
um ponto
1. Definir uma classe que deriva de TypeConverter.
O exemplo de cdigo a seguir implementa um conversor tipo que converte um String tipo em um
Point tipo e a Point. em um String O CanConvertTo e IsValid mtodos no so substitudos,
neste exemplo.
C#
using System; using System.ComponentModel; using System.Globalization; using System.Drawing; public
class PointConverter : TypeConverter { // Overrides the CanConvertFrom method of TypeConverter. // The
ITypeDescriptorContext interface provides the context for the // conversion. Typically, this interface is used
at design time to // provide information about the design-time container. public override bool
CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) {
return true; } return base.CanConvertFrom(context, sourceType); } // Overrides the ConvertFrom method of
TypeConverter. public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture,
object value) { if (value is string) { string[] v = ((string)value).Split(new char[] {','}); return new
Point(int.Parse(v[0]), int.Parse(v[1])); } return base.ConvertFrom(context, culture, value); } // Overrides the
ConvertTo method of TypeConverter. public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { return
((Point)value).X + "," + ((Point)value).Y; } return base.ConvertTo(context, culture, value, destinationType); }
}
Conversores tipo que fornecer uma lista de valores padro para uma janela Propriedades
Um conversor tipo pode fornecer uma lista de valores para um tipo em um controle janela
Propriedades. Quando um conversor tipo fornece um conjunto de valores padro para um tipo, o
campo de entrada valor de uma propriedade do tipo associado em um controle janela
Propriedades exibe uma seta para baixo que exibe uma lista de valores para definir o valor da
propriedade para quando clicado.
Quando uma propriedade do tipo est associado a este conversor tipo selecionada em um
navegador Propriedade de ambiente em tempo de design, o campo de entrada Valor conter um
boto que exibe uma lista drop-down dos valores padro para o tipo de propriedade que voc
pode selecionar de.
Para implementar um conversor de tipo simples que fornece uma lista drop-down de
valores padro em um navegador Propriedade
1. Definir uma classe que deriva de TypeConverter.
2. Substituir o GetStandardValuesSupported mtodo e retornar true.
3. Substituir o GetStandardValues mtodo e retornar os valores padro para o tipo de
propriedade com StandardValuesCollection. Os valores padro para uma propriedade deve
ser do mesmo tipo que a propriedade prprio.
O exemplo a seguir demonstra um conversor tipo que fornece uma lista de valores padro para
um controle janela Propriedades para uma propriedade do tipo ele est associado. O conversor
tipo exemplo oferece suporte propriedades do tipo inteiro com o qual ele foi associado. Para usar
o exemplo no Visual Studio .NET, compilar o cdigo para uma biblioteca de classe, e adicione o
IntStandardValuesControl componente para o Toolbox. Do IntStandardValuesControl adicionar uma
instncia da um formulrio no modo de design, e rolar para a TestInt propriedade na janela
Propriedades enquanto o controle esteja selecionado. Selecione o campo de entrada de valor
para a propriedade exibir uma seta para baixo que exibe uma lista drop-down de valores padro
quando clicado. Inserir um valor inteiro ser adicione o valor para a lista de valores padro, e
defina a propriedade para o valor especificado.
C#
Horrio conversores tipo que gerar cdigo para inicializao Propriedade em execuo
O.NET Framework fornece a capacidade para gerar cdigo de inicializao dinmica propriedade
em tempo de design que ser inicializar uma propriedade em tempo de execuo.
Caso voc precise produzir cdigo alm um construtor para inicializar uma propriedade, possvel
fazer dinamicamente gerar cdigo por implementar uma personalizada CodeDomSerializer e
aplicar uma DesignerSerializerAttribute que associa para um tipo com o tipo. seu
CodeDomSerializer Essa abordagem normalmente usada somente para cenrios nos quais a
gerao de cdigo dinamicamente controlado ou personalizados para inicializao componente
importante. Para obter mais informaes sobre essa abordagem, consulte a documentao para
CodeDomSerializer.
C#
public class PointConverter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext
context, Type destinationType) { if (destinationType == typeof(InstanceDescriptor)) return true; return
base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext
context, CultureInfo culture, object value, Type destinationType) { // Insert other ConvertTo operations
here. // if (destinationType == typeof(InstanceDescriptor) && value is Point) { Point pt = (Point)value;
ConstructorInfo ctor = typeof(Point).GetConstructor( new Type[] {typeof(int), typeof(int)}); if (ctor != null) {
return new InstanceDescriptor(ctor, new object[] {pt.X, pt.Y}); } } return base.ConvertTo(context, culture,
value, destinationType); }
Compilando o cdigo
Quando voc desenvolver seu personalizadas TypeConverter, recomendvel que voc
definir o nmero de criao para incrementar com cada compilao. Isso impede que verses
mais antigas, armazenadas em cache de sendo criada no ambiente de desenvolvimento. seu
TypeConverter
Observao
Compilando o cdigo
Quando voc desenvolver seu personalizadas UITypeEditor, recomendvel que voc
definir o nmero de criao para incrementar com cada compilao. Isso impede que verses
mais antigas, armazenadas em cache de sendo criada no ambiente de desenvolvimento. seu
UITypeEditor
Exemplo
O exemplo de cdigo a seguir demonstra como criar um designer personalizado que estende a
interface de usurio (UI) para criar um controle personalizado. Uma classe chamada
DemoControlDesigner Designer conectado a uma DemoControl classe, ativando Recursos os
seguir:
A DemoControl classe derivada da UserControl classe, mas exige nenhuma lgica especial para
estender sua interface do usurio em tempo de design. A interface de usurio em tempo de design
implementada pela classe DemoControlDesigner.
Estendendo a aparncia
Voc estender a aparncia do seu projeto personalizado UI, implementar uma Glyph classe. A
MarginAndPaddingGlyph classe deriva da classe Glyph. Ele pinta dois retngulos que representam
os valores do controle Margin e Padding Propriedades. A MarginAndPaddingGlyph classe
manipula o ComponentChanged evento para atualizar a exibio quando os valores das
propriedades do controle Margin ou Padding a alterao.
O exemplo de cdigo a seguir mostra como implementar uma MarginAndPaddingGlyph classe que
deriva de Glyph.
C#
// This class implements a MarginAndPaddingGlyph, which draws // borders highlighting the value of the
control's Margin // property and the value of the control's Padding property. // // This glyph has no mouse
or keyboard interaction, so its // related behavior class, MarginAndPaddingBehavior, has no //
implementation. public class MarginAndPaddingGlyph : Glyph { private BehaviorService behaviorService =
null; private IComponentChangeService changeService = null; private ISelectionService selectionService =
null; private IDesigner relatedDesigner = null; private Adorner marginAndPaddingAdorner = null; private
Control relatedControl = null; public MarginAndPaddingGlyph( BehaviorService behaviorService,
IComponentChangeService changeService, ISelectionService selectionService, IDesigner relatedDesigner,
Adorner marginAndPaddingAdorner) : base(new MarginAndPaddingBehavior()) { this.behaviorService =
behaviorService; this.changeService = changeService; this.selectionService = selectionService;
this.relatedDesigner = relatedDesigner; this.marginAndPaddingAdorner = marginAndPaddingAdorner;
this.relatedControl = this.relatedDesigner.Component as Control; this.changeService.ComponentChanged
+= new ComponentChangedEventHandler(changeService_ComponentChanged); } void
changeService_ComponentChanged(object sender, ComponentChangedEventArgs e) { if
(object.ReferenceEquals( e.Component, this.relatedControl)) { if (e.Member.Name == "Margin" ||
e.Member.Name == "Padding" ) { this.marginAndPaddingAdorner.Invalidate(); } } } // This glyph has no
mouse or keyboard interaction, so // GetHitTest can return null. public override Cursor GetHitTest(Point p)
{ return null; } // This method renders the glyph as a simple focus rectangle. public override void
Paint(PaintEventArgs e) { ControlPaint.DrawFocusRectangle( e.Graphics, this.Bounds);
ControlPaint.DrawFocusRectangle( e.Graphics, this.PaddingBounds); } // This glyph's Bounds property is a
Rectangle defined by // the value of the control's Margin property. public override Rectangle Bounds { get {
Control c = this.relatedControl; Rectangle controlRect =
this.behaviorService.ControlRectInAdornerWindow(this.relatedControl); Rectangle boundsVal = new
Rectangle( controlRect.Left - c.Margin.Left, controlRect.Top - c.Margin.Top, controlRect.Width +
c.Margin.Right*2, controlRect.Height + c.Margin.Bottom*2); return boundsVal; } } // The PaddingBounds
property is a Rectangle defined by // the value of the control's Padding property. public Rectangle
PaddingBounds { get { Control c = this.relatedControl; Rectangle controlRect =
Estender o comportamento
Voc estender o comportamento do seu projeto personalizado UI, implementar uma Behavior
classe. A Behavior classe subordinado Glyph Classe.
Cuidado
Voc anexar um Behavior objeto a um Glyph objeto no construtor seu Glyph do tipo.
C#
public AnchorGlyph( AnchorStyles anchorStyle, BehaviorService behaviorService,
IComponentChangeService changeService, ISelectionService selectionService, IDesigner relatedDesigner,
Adorner anchorAdorner) : base(new AnchorBehavior(relatedDesigner)) { // Cache references for
convenience. this.anchorStyle = anchorStyle; this.behaviorService = behaviorService; this.changeService =
changeService; this.selectionService = selectionService; this.relatedDesigner = relatedDesigner;
this.anchorAdorner = anchorAdorner; // Cache a reference to the control being designed. this.relatedControl
= this.relatedDesigner.Component as Control; // Hook the SelectionChanged event.
this.selectionService.SelectionChanged += new EventHandler(selectionService_SelectionChanged); // Hook
the ComponentChanged event so the anchor glyphs // can correctly track the control's bounds.
this.changeService.ComponentChanged += new
ComponentChangedEventHandler(changeService_ComponentChanged); }
C#
// This class implements an AnchorGlyph, which draws grab handles // that represent the value of the
control's Anchor property. // // This glyph has mouse and keyboard interactions, which are // handled by
the related behavior class, AnchorBehavior. // Double-clicking on an AnchorGlyph causes its value to be //
toggled between enabled and disable states. public class AnchorGlyph : Glyph { // This defines the bounds of
the anchor glyph. protected Rectangle boundsValue; // This defines the bounds used for hit testing. // These
bounds are typically different than the bounds // of the glyph itself. protected Rectangle hitBoundsValue; //
C#
// This Behavior specifies mouse and keyboard handling when // an AnchorGlyph is active. This happens
when // AnchorGlyph.GetHitTest returns a non-null value. internal class AnchorBehavior : Behavior {
private IDesigner relatedDesigner = null; private Control relatedControl = null; internal
AnchorBehavior(IDesigner relatedDesigner) { this.relatedDesigner = relatedDesigner; this.relatedControl =
relatedDesigner.Component as Control; } // When you double-click on an AnchorGlyph, the value of // the
control's Anchor property is toggled. // // Note that the value of the Anchor property is not set // by direct
assignment. Instead, the // PropertyDescriptor.SetValue method is used. This // enables notification of the
design environment, so // related events can be raised, for example, the //
IComponentChangeService.ComponentChanged event. public override bool OnMouseDoubleClick( Glyph g,
MouseButtons button, Point mouseLoc) { base.OnMouseDoubleClick(g, button, mouseLoc); if (button ==
MouseButtons.Left) { AnchorGlyph ag = g as AnchorGlyph; PropertyDescriptor pdAnchor =
TypeDescriptor.GetProperties(ag.relatedControl)["Anchor"]; if (ag.IsEnabled) { // The glyph is enabled. //
Clear the AnchorStyle flag to disable the Glyph. pdAnchor.SetValue( ag.relatedControl,
ag.relatedControl.Anchor ^ ag.anchorStyle ); } else { // The glyph is disabled. // Set the AnchorStyle flag to
enable the Glyph. pdAnchor.SetValue( ag.relatedControl, ag.relatedControl.Anchor | ag.anchorStyle); } }
return true; } }
Ativar o glifos, criando uma Adorner janela e adicion-los para a Glyphs coleo. Ativar a UI
Design-time personalizada adicionando a Adorner janela coleo Adorners da BehaviorService.
Executar essas aes no mtodo seu designer Initialize.
C#
// This method is where the designer initializes its state when // it is created. public override void
Initialize(IComponent component) { base.Initialize(component); // Connect to various designer services.
InitializeServices(); // Initialize adorners. this.InitializeMarginAndPaddingAdorner();
this.InitializeAnchorAdorner(); }
C#
C#
// This utility method creates an adorner for the margin and // padding glyphs. It then creates a
MarginAndPaddingGlyph and // adds it to the adorner's Glyphs collection. private void
InitializeMarginAndPaddingAdorner() { this.marginAndPaddingAdorner = new Adorner();
this.behaviorSvc.Adorners.Add(this.marginAndPaddingAdorner);
this.marginAndPaddingAdorner.Glyphs.Add(new MarginAndPaddingGlyph( this.behaviorSvc,
this.changeService, this.selectionService, this, this.marginAndPaddingAdorner)); }
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.
Exemplo
C#
using System; namespace MarqueeControlLibrary { // This interface defines the contract for any class that is
to // be used in constructing a MarqueeControl. public interface IMarqueeWidget { // This method starts the
animation. If the control can // contain other classes that implement IMarqueeWidget as // children, the
control should call StartMarquee on all // its IMarqueeWidget child controls. void StartMarquee(); // This
method stops the animation. If the control can // contain other classes that implement IMarqueeWidget as
// children, the control should call StopMarquee on all // its IMarqueeWidget child controls. void
StopMarquee(); // This method specifies the refresh rate for the animation, // in milliseconds. int
UpdatePeriod { get; set; } } }
C#
C#
using System; using System.ComponentModel; using System.ComponentModel.Design; using
System.Diagnostics; using System.Drawing; using System.Threading; using System.Windows.Forms; using
System.Windows.Forms.Design; namespace MarqueeControlLibrary {
[ToolboxItemFilter("MarqueeControlLibrary.MarqueeText", ToolboxItemFilterType.Require)] public class
MarqueeText : Label, IMarqueeWidget { // When isLit is true, the text is painted in the light color; // When
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Drawing; using System.Windows.Forms; using
System.Windows.Forms.Design; namespace MarqueeControlLibrary { [Designer( typeof(
MarqueeControlLibrary.Design.MarqueeControlRootDesigner ), typeof( IRootDesigner ) )] public class
MarqueeControl : UserControl { // Required designer variable. private System.ComponentModel.Container
components = null; public MarqueeControl() { // This call is required by the Windows.Forms Form
Designer. InitializeComponent(); // Minimize flickering during animation by enabling // double buffering.
SetStyle(ControlStyles.OptimizedDoubleBuffer, true); } /// <summary> /// Clean up any resources being
used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components !=
null) { components.Dispose(); } } base.Dispose( disposing ); } public void Start() { // The MarqueeControl
may contain any number of // controls that implement IMarqueeWidget, so // find each IMarqueeWidget
child and call its // StartMarquee method. foreach( Control cntrl in this.Controls ) { if( cntrl is
IMarqueeWidget ) { IMarqueeWidget widget = cntrl as IMarqueeWidget; widget.StartMarquee(); } } } public
void Stop() { // The MarqueeControl may contain any number of // controls that implement
IMarqueeWidget, so find // each IMarqueeWidget child and call its StopMarquee // method. foreach(
Control cntrl in this.Controls ) { if( cntrl is IMarqueeWidget ) { IMarqueeWidget widget = cntrl as
IMarqueeWidget; widget.StopMarquee(); } } } protected override void OnLayout(LayoutEventArgs levent) {
base.OnLayout (levent); // Repaint all IMarqueeWidget children if the layout // has changed. foreach(
Control cntrl in this.Controls ) { if( cntrl is IMarqueeWidget ) { Control control = cntrl as Control;
control.PerformLayout(); } } } #region Component Designer generated code /// <summary> /// Required
method for Designer support - do not modify /// the contents of this method with the code editor. ///
</summary> private void InitializeComponent() { components = new
System.ComponentModel.Container(); } #endregion } }
C#
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using
System.Windows.Forms; using System.Windows.Forms.Design; namespace MarqueeControlLibrary { //
This control provides the custom UI for the LightShape property // of the MarqueeBorder. It is used by the
LightShapeEditor. public class LightShapeSelectionControl : System.Windows.Forms.UserControl { private
MarqueeLightShape lightShapeValue = MarqueeLightShape.Square; private IWindowsFormsEditorService
editorService = null; private System.Windows.Forms.Panel squarePanel; private
System.Windows.Forms.Panel circlePanel; // Required designer variable. private
System.ComponentModel.Container components = null; // This constructor takes a MarqueeLightShape
value from the // design-time environment, which will be used to display // the initial state. public
LightShapeSelectionControl( MarqueeLightShape lightShape, IWindowsFormsEditorService editorService )
{ // This call is required by the designer. InitializeComponent(); // Cache the light shape value provided by
the // design-time environment. this.lightShapeValue = lightShape; // Cache the reference to the editor
service. this.editorService = editorService; // Handle the Click event for the two panels.
this.squarePanel.Click += new EventHandler(squarePanel_Click); this.circlePanel.Click += new
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Windows.Forms; using
System.Windows.Forms.Design; namespace MarqueeControlLibrary.Design {
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name =
"FullTrust")] public class MarqueeBorderDesigner : ParentControlDesigner { public
MarqueeBorderDesigner() { Trace.WriteLine("MarqueeBorderDesigner"); } public bool Visible { get { return
(bool)ShadowProperties["Visible"]; } set { this.ShadowProperties["Visible"] = value; } } public bool Enabled {
get { return (bool)ShadowProperties["Enabled"]; } set { this.ShadowProperties["Enabled"] = value; } }
protected override void PreFilterProperties(IDictionary properties) { base.PreFilterProperties(properties); if
(properties.Contains("Padding")) { properties.Remove("Padding"); } properties["Visible"] =
TypeDescriptor.CreateProperty( typeof(MarqueeBorderDesigner), (PropertyDescriptor)properties["Visible"],
new Attribute[0]); properties["Enabled"] = TypeDescriptor.CreateProperty(
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Drawing.Design; using
System.Windows.Forms; using System.Windows.Forms.Design; namespace MarqueeControlLibrary.Design
{ [ToolboxItemFilter("MarqueeControlLibrary.MarqueeBorder", ToolboxItemFilterType.Require)]
[ToolboxItemFilter("MarqueeControlLibrary.MarqueeText", ToolboxItemFilterType.Require)]
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name =
"FullTrust")] public class MarqueeControlRootDesigner : DocumentDesigner { public
MarqueeControlRootDesigner() { Trace.WriteLine("MarqueeControlRootDesigner ctor"); } public override
void Initialize(IComponent component) { base.Initialize(component); IComponentChangeService cs =
GetService(typeof(IComponentChangeService)) as IComponentChangeService; if (cs != null) {
cs.ComponentChanged += new ComponentChangedEventHandler(OnComponentChanged); }
this.Verbs.Add( new DesignerVerb("Run Test", new EventHandler(OnVerbRunTest)) ); this.Verbs.Add( new
DesignerVerb("Stop Test", new EventHandler(OnVerbStopTest)) ); } private void OnComponentChanged(
object sender, ComponentChangedEventArgs e) { if (e.Component is IMarqueeWidget) {
this.Control.Refresh(); } } private void OnVerbRunTest(object sender, EventArgs e) { MarqueeControl c =
this.Control as MarqueeControl; c.Start(); } private void OnVerbStopTest(object sender, EventArgs e) {
MarqueeControl c = this.Control as MarqueeControl; c.Stop(); } } }
Compilando o cdigo
Para obter uma explicao sobre neste exemplo, de cdigo completa Consulte Passo-a-passo:
Adicionando Marcas Inteligentes a um Componente do Windows Forms.
Exemplo
C#
///////////////////////////////////////////////////////////////////// // Pull model smart tag example.
// Need references to System.dll, System.Windows.Forms.dll, // System.Design.dll, and System.Drawing.dll.
///////////////////////////////////////////////////////////////////// using System; using
System.Drawing; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Windows.Forms; using System.Text; using
System.Reflection; namespace SmartTags { public class Form1 : System.Windows.Forms.Form { private
ColorLabel colorLabel2; public Form1() { InitializeComponent(); } // VS Forms Designer generated method
private void InitializeComponent() { this.colorLabel2 = new SmartTags.ColorLabel(); this.SuspendLayout();
// // colorLabel2 // this.colorLabel2.BackColor = System.Drawing.Color.Gold; this.colorLabel2.ColorLocked
= false; this.colorLabel2.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.colorLabel2.Location = new
Compilar o cdigo
Sempre que fizer 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, ento voc provavelmente precisar atualizar o projeto para
ver as alteraes. Normalmente, voc precisar fechar e reabrir a janela de design que contm o
componente.
Exemplo
O exemplo de cdigo a seguir demonstra como criar um designer personalizado que ajusta um
componente na atributos, eventos, e propriedades. Uma classe chamada DemoControlDesigner
Designer est conectado a uma DemoControl classe e executa as seguintes operaes:
PreFilterAttributes
PostFilterAttributes
PreFilterEvents
PostFilterEvents
PreFilterProperties
PostFilterProperties
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#
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.
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.
Pr-requisitos
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.
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(); }
Prxima adicionar cdigo ao formulrio para lidar com clique o boto na evento.
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.
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.
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
Pr-requisitos
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Para essa explicao passo a passo, voc precisar trs CheckBox controles e algum texto em
um NamedRange controle.
13. Arraste uma segunda caixa de seleo ou prxima clula B4 e alterar as seguintes
propriedades:
14. Arraste uma caixa de seleo terceira ou prxima clula B6 e alterar as seguintes
propriedades:
15. Selecione todos os controles caixa de seleo trs mantendo a tecla CTRL.
16. Na barra de ferramentas do Excel, clique em Align Lefts e, em seguida clique em Make
Vertical Spacing Equal.
Os controles caixa de seleo trs agora tem igual espaamento vertical e so alinhados no
lado esquerdo, na posio do primeiro controle que voc selecionou.
Voc em seguida, ser arrastar um NamedRange controle para a planilha.
Observao
Voc tambm pode adicionar o NamedRange controle digitando textFont na caixa Name.
Em seguida, escreva o cdigo para formatar o texto quando uma opo selecionada.
Voc nesta seo, vai escrever cdigo para que quando o usurio seleciona uma opo de
formatao, o formato do texto na planilha for alterado.
6. Clique com o boto direito do mouse Sheet1 e clique View Code no menu de atalho
7. Adicione o seguinte cdigo ao manipulador Click de eventos da caixa applyBoldFont de
seleo:
C#
private void applyBoldFont_Click(object sender, EventArgs e) { this.textFont.Font.Bold =
this.applyBoldFont.Checked; }
10. Em C#, adicione manipuladores de eventos para as caixas de seleo 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.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 sua pasta de trabalho para certificar-se que o texto est formatado
corretamente quando voc marca ou desmarca uma caixa de seleo.
Essa explicao passo a passo mostra as noes bsicas de usando caixas de seleo e formatar
texto em 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:.
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.
Pr-requisitos
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
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.
Name insertText
Sempre que o usurio clica no boto, Hello World! acrescentada caixa de texto.
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.
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:.
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.
Pr-requisitos
Nesta etapa, voc ir criar pasta de trabalho Excel usando Visual Studio Tools for Office Um do
projeto.
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,
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
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);
Observao
Como duas vezes em uma clula em um intervalo do Excel entra no modo de edio, um Change
evento ocorre quando a seleo movida fora do intervalo mesmo que nenhuma alterao ao
texto ocorreu.
Observao
Porque faz duas vezes em uma clula em um intervalo do Excel com a seleo para mover para o
intervalo, um SelectionChange evento ocorre antes de ocorrer o BeforeDoubleClick evento.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para verificar texto que descreve os eventos de um
NamedRange controle que ser inserido no outro intervalo nomeado quando os eventos so
aumentados.
Essa explicao passo a passo mostra noes bsicas de programao contra eventos de um
NamedRange controle. Aqui esto algumas tarefas que podem vie em seguida:
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:.
Essa explicao passo a passo demonstra as noes bsicas de segurana no Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
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.
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
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.
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.
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
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.
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.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando um novo projeto
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.
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.
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.
Clula (Nome)
B3 Button2
C3 Button3
D3 Button4
Inicializando as controles
Adicione cdigo ao manipulador Click de eventos de cada boto para percorrer os registros.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que voc pode navegar atravs
dos registros no banco de dados.
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.
Usar um BindingNavigator controle para percorrer os registros. Para obter mais
informaes, consulte COMO: Navegar em dados com o controle BindingNavigator do
Windows Forms.
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.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando um novo projeto
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
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.
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.
Inicializao do controle
Ao inicializar o controle
As alteraes tenham sido feitas o dados existe somente no dataset local at que eles so salvos
explicitamente volta para o banco de dados.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se de que os dados aparecem como
esperado, e que voc pode manipular os dados de um objeto lista.
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.
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:.
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.
Pr-requisitos
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Master-
Detail projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
9. Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
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 usando o New Connection boto.
13. Aps selecionar ou criar uma conexo, 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. Selecione a Orders tabela e a Order Details tabela.
17. Clique em Finish.
O assistente adicionar as duas tabelas para a Data Sources janela. Ele tambm adiciona um
DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Nesta etapa, voc adicionar um intervalo nomeado, um objeto de lista, e dois botes primeira
planilha. Primeiro, adicionar o intervalo nomeado e o objeto lista a partir da Data Sources janela
para que automaticamente eles so vinculados fonte de dados. Em seguida, adicione os botes
da Toolbox.
Cache o DataSet
Marcar DataSet para ser armazenado em cache no documento, tornar DataSet pblicos e
definindo a CacheInDocument propriedade.
A prxima etapa para adicionar texto a botes, e no C# adicione cdigo para ligar os
manipuladores de eventos.
Inicializando as controles
Adicione cdigo ao manipulador Click de eventos de cada boto para percorrer os registros.
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se de que os dados aparecem como
esperado, e que voc pode usar a soluo off-line.
Essa explicao passo a passo mostra as noes bsicas de criar uma relao mestre / detalhes
de dados em uma planilha e cache um DataSet. Aqui esto algumas tarefas que podem vie em
seguida:
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.
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.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Adicionar um grfico a uma planilha
Voc pode criar um projeto de pasta de trabalho do Excel usando uma pasta de trabalho
existente. Nessa explicao passo a passo, ir adicionar um grfico pasta de trabalho e Usar
pasta de trabalho no Excel uma nova soluo. A fonte de dados nessa explicao passo a passo
uma planilha chamada Data for Chart.
Q1 Q2 Q3 Q4
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Quando voc criar um novo projeto pasta de trabalho do Excel usando uma pasta de trabalho
existente, controles host automaticamente so criados para intervalos nomeados, objetos lista, e
grficos que existem dentro da pasta de trabalho. Voc pode alterar o nome do controle Chart
usando a Properties janela
Name dataChart
HasLegend False
Name columnChart
Name barChart
Name lineChart
Name areaBlockChart
Em seguida, escreva o cdigo para atualizar o grfico quando um boto de opo clicado.
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.
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); }
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
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.
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:.
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.
Observao
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Microsoft Office Excel 2003.
Acesso a um servidor com o exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando o projeto
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.
Em seguida, voc precisa um controle painel Aes que contenha uma caixa de combinao.
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
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); }
Voc nesta seo, vai escrever cdigo para mostrar o painel Aes. O painel Actions ficar visvel
depois controles so adicionados a ele.
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.
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:
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.
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Manualmente relanamento a soluo do seu computador local para um compartilhamento
de rede em um servidor.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar a manifesto de implantao para apontar para a nova localizao do manifesto do
aplicativo externos.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Observao
Essa explicao passo a passo pressupe que voc estiver implantando uma soluo Word. Se
voc quiser executar explicao passo a passo com uma soluo Excel, o substitua o nome do
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos do
documento. Isso permitir que voc para verificar se a soluo est funcionando quando voc
abre o documento rapidamente.
Publicando a soluo
Observao
O conjunto no tem permisso para executar ainda, para que ele se voc tentar executar a
soluo ser lanar um erro. Voc ir atualizar sua diretiva de segurana para conceder
permisso de confiana total ao conjunto em uma etapa posterior.
Para editar o manifesto do aplicativo incorporado, use a ServerDocument classe que Visual Studio
Tools for Office fornece. Quando voc usa a ServerDocument classe, voc deve executar o
cdigo em um novo projeto (no a Visual Studio Tools for Office Soluo), como um projeto de
console, e o Visual Studio Tools for Office documento de soluo deve ser fechado.
Observao
Inclui Visual Studio Tools for Office um exemplo que demonstre como criar uma ferramenta que
pode ser usada para editar o manifesto do aplicativo incorporado. Para obter mais informaes,
consulte Aplicativo Manifest exemplo Editor.
9. Copie o cdigo a seguir para a Main funo. Este cdigo cria uma ServerDocument que
fornece acesso ao manifesto do aplicativo incorporado de seu documento de soluo. O
cdigo atribui o novo caminho manifesto de implantao para a DeployManifestPath
propriedade, e salva e fecha o ServerDocument.. o ServerDocument
C#
Agora que voc atualizou o manifesto do aplicativo incorporado no documento Visual Studio Tools
for Office de soluo, voc deve atualizar a manifesto de implantao para apontar para a nova
localizao do manifesto do aplicativo externos.
Alm disso, para atualizar a manifesto de implantao, voc tambm deve editar o manifesto do
aplicativo externo para apontar para os locais implantao final do conjunto de soluo e a
manifesto de implantao. Sempre que voc publicar uma Visual Studio Tools for Office soluo,
um novo manifesto do aplicativo externo gerado que aponta para a verso atual do conjunto de
soluo.
Agora que voc tiver editado os manifestos, voc est pronto para copiar os arquivos de soluo
para o servidor.
Para execute sua Visual Studio Tools for Office soluo a partir da pasta de rede, voc deve
conceder confiana total para a pasta de rede na sua diretiva de segurana no computador de
desenvolvimento. Voc pode modificar a diretiva de segurana de um prompt de comando usando
a ferramenta Diretiva de Segurana para Acesso ao Cdigo (Caspol.exe). Para conceder
confiana para um local de rede, voc deve ter privilgios de administrador e voc dever alterar a
diretiva de segurana no nvel do computador.
Observao
Este procedimento destinado a fim de executar essa explicao passo a passo. No use este
procedimento para conceder confiana a conjuntos ou diretrios se no tiver certeza que sejam
segura e protegida. Para obter mais informaes sobre concesso e remover permisses,
consulte HOW TO: conceder permisses para pastas e montagens e Como remover permisses
de pastas e montagens:.
Testando a soluo
Agora voc pode testar sua soluo para certificar-se que seu cdigo seja executado quando voc
abre o documento a partir do computador de desenvolvimento.
Voc tambm pode implantar a soluo usando um arquivo do Microsoft Windows Installer (.msi).
Para obter mais informaes, consulte Implantando um Word ou Solution do Excel usando um
arquivo do Windows Installer Walkthrough:.
Essa explicao passo a passo demonstra como criar um arquivo do Microsoft Windows Installer
(.msi) que pode ser usado para implantar uma soluo Microsoft Office Excel 2003 ou Microsoft
Office Word 2003.
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
Observao
Essa explicao passo a passo inclui etapas para criar uma soluo simples que voc pode usar
em explicao passo a passo o Excel. Se voc deseja executar o explicao passo a passo com
uma soluo Word ou Excel existente, comearo o explicao passo a passo no ttulo criando o
Project a instalao, " " e certifique-se substituir o nome ExcelDeployment do projeto com o
nome do seu projeto em todos os exemplos de cdigo e instrues.
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos da
pasta de trabalho. Isso permite que voc para verificar se a soluo est funcionando quando
voc abre o documento rapidamente.
Nesta etapa, voc ir criar um projeto de instalao que voc pode compilar para criar um arquivo
do Windows Installer para sua soluo. Para obter mais informaes, consulte Configurar projetos.
Nesta etapa, voc adicionar a sada do projeto ExcelDeployment principal para o projeto de
instalao. A sada do projeto ExcelDeployment principal consiste de pasta de trabalho e o
conjunto de soluo.
Nesta etapa, voc ir criar um projeto que contm aes personalizadas para o projeto de
instalao. Aes personalizadas so um recurso do Windows Installer que permitem a voc para
executar cdigo no final de uma instalao para executar aes que no podem ser executadas
durante a instalao. Para obter mais informaes, consulte Aes Personalizadas.
Voc deve atualizar o manifesto do aplicativo que est incorporado no Visual Studio Tools for
Office documento de Soluo ao executar uma ao personalizada aps a instalao, porque o
local do conjunto de soluo desconhecido at que o usurio especifica o local durante a
instalao. Editar o manifesto do aplicativo incorporado, usando a ServerDocument classe. Para
usar a ServerDocument classe no projeto de instalao, adicione cdigo para uma Installer
classe dentro do projeto ao personalizada.
Nesta etapa, voc adicionar a sada do projeto ExcelCustomAction principal para o projeto de
instalao. Isso permite que o arquivo Windows Installer para executar a ao personalizada que
edita o manifesto do aplicativo.
Agora voc pode testar a soluo para garantir que sua soluo instalada quando voc executar
o arquivo do Windows Installer no seu computador de desenvolvimento.
Essa explicao passo a passo demonstra as noes bsicas de segurana no Microsoft Visual
Studio 2005 Tools for the Microsoft Office System.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
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.
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.
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
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.
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.
Pr-requisitos
Neste procedimento, voc ir criar projeto usando Visual Studio Tools for Office um documento do
Word.
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:
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:
Name applyUnderlineFont
Text Sublinhado
Observao
Voc tambm pode adicionar o Bookmark controle usando a Bookmark caixa de dilogo,
encontrada no menu Insert.
Em seguida, escreva o cdigo para formatar o texto quando uma caixa de seleo marcada ou
desmarcada.
Quando o usurio seleciona uma opo de formatao, alterar o formato do texto no documento.
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
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.
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:.
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.
Pr-requisitos
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
Nesta seo, voc adicionar um boto e uma caixa de texto para o documento Word.
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.
Name insertText
Sempre que o usurio clica no boto, Hello World! acrescentada caixa de texto.
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.
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.
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.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
O Microsoft Office Word 2003.
Criando o projeto
Nesta etapa, voc ser adicionar texto ao seu documento do Word e depois adicionar dois
indicadores.
Observao
Quando voc adicionar indicadores aos seus documentos Office Word 2003 no tempo de criao,
um Bookmark controle criado que permite a voc para programa contra vrios eventos do
indicador. Voc pode 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 aparea.
Observao
Voc deve escrever cdigo para manipular o caso em que se sobrepem indicadores. Se voc
no fizer isso, por padro, o cdigo se chamar para cada indicador dentro da seleo.
C#
Testar o aplicativo
Nesta seo, voc ir testar seu documento para certificar-se de que os itens de menu negrito e
itlico apaream no menu de atalho quando clicar com o boto direito do mouse texto em um
indicador e o texto que est formatado corretamente.
Essa explicao passo a passo mostra como criar menus de atalho em indicadores. Aqui esto
algumas tarefas que podem vie em seguida:
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.
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.
Pr-requisitos
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
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.
Name columnChart
Name barChart
Name lineChart
Name areaBlockChart
Adicionar Referncias
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.
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); }
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
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.
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:.
Alterar formatao, selecionando um estilo da caixa de combinao. Para obter mais
informaes, consulte Walkthrough: Changing Document formatao usando controles
CheckBox.
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.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
O Microsoft Office Word 2003.
Acesso a um servidor com o exemplo de SQL Server do Northwind.
Permisses para ler e gravar no banco de dados do SQL Server.
Criando o projeto
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.
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.
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
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,
Name Inserir
Text Inserir
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.
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.
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); } }
Voc nesta seo, vai escrever cdigo para mostrar o painel Aes. O painel Actions ficar visvel
depois controles so adicionados a ele.
4. 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
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.
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:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
O Microsoft Office Word 2003.
Criando um novo projeto
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.
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.
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};
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.
Agora voc pode testar seu documento para certificar-se que a marca inteligente converte
Fahrenheit temperaturas para Celsius.
Observao
7. Clique no cone de marca inteligente que aparece sobre a seqncia reconhecida e clique
em Convert to Celsius.
8. Confirme que a seqncia original substituda por uma nova seqncia contendo a
temperatura em Celsius.
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.
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Manualmente relanamento a soluo do seu computador local para um compartilhamento
de rede em um servidor.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar a manifesto de implantao para apontar para a nova localizao do manifesto do
aplicativo externos.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Observao
Essa explicao passo a passo pressupe que voc estiver implantando uma soluo Word. Se
voc quiser executar explicao passo a passo com uma soluo Excel, o substitua o nome do
projeto do Word com o nome do seu projeto do Excel em todos os cdigos e exemplos XML.
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos do
documento. Isso permitir que voc para verificar se a soluo est funcionando quando voc
abre o documento rapidamente.
Publicando a soluo
Observao
O conjunto no tem permisso para executar ainda, para que ele se voc tentar executar a
soluo ser lanar um erro. Voc ir atualizar sua diretiva de segurana para conceder
permisso de confiana total ao conjunto em uma etapa posterior.
Para editar o manifesto do aplicativo incorporado, use a ServerDocument classe que Visual Studio
Tools for Office fornece. Quando voc usa a ServerDocument classe, voc deve executar o
cdigo em um novo projeto (no a Visual Studio Tools for Office Soluo), como um projeto de
console, e o Visual Studio Tools for Office documento de soluo deve ser fechado.
Observao
Inclui Visual Studio Tools for Office um exemplo que demonstre como criar uma ferramenta que
pode ser usada para editar o manifesto do aplicativo incorporado. Para obter mais informaes,
consulte Aplicativo Manifest exemplo Editor.
9. Copie o cdigo a seguir para a Main funo. Este cdigo cria uma ServerDocument que
fornece acesso ao manifesto do aplicativo incorporado de seu documento de soluo. O
cdigo atribui o novo caminho manifesto de implantao para a DeployManifestPath
propriedade, e salva e fecha o ServerDocument.. o ServerDocument
C#
ServerDocument sd = null; try { sd = new
ServerDocument(@"C:\TestDeploy\WordDeployment.doc"); sd.AppManifest.DeployManifestPath =
@"\\DeployServer\ShareFolder\WordDeployment.application"; sd.Save(); } finally { if (sd != null) {
sd.Close(); } }
Agora que voc atualizou o manifesto do aplicativo incorporado no documento Visual Studio Tools
for Office de soluo, voc deve atualizar a manifesto de implantao para apontar para a nova
localizao do manifesto do aplicativo externos.
Alm disso, para atualizar a manifesto de implantao, voc tambm deve editar o manifesto do
aplicativo externo para apontar para os locais implantao final do conjunto de soluo e a
manifesto de implantao. Sempre que voc publicar uma Visual Studio Tools for Office soluo,
um novo manifesto do aplicativo externo gerado que aponta para a verso atual do conjunto de
soluo.
Agora que voc tiver editado os manifestos, voc est pronto para copiar os arquivos de soluo
para o servidor.
Para execute sua Visual Studio Tools for Office soluo a partir da pasta de rede, voc deve
conceder confiana total para a pasta de rede na sua diretiva de segurana no computador de
desenvolvimento. Voc pode modificar a diretiva de segurana de um prompt de comando usando
a ferramenta Diretiva de Segurana para Acesso ao Cdigo (Caspol.exe). Para conceder
confiana para um local de rede, voc deve ter privilgios de administrador e voc dever alterar a
diretiva de segurana no nvel do computador.
Observao
Este procedimento destinado a fim de executar essa explicao passo a passo. No use este
procedimento para conceder confiana a conjuntos ou diretrios se no tiver certeza que sejam
segura e protegida. Para obter mais informaes sobre concesso e remover permisses,
consulte HOW TO: conceder permisses para pastas e montagens e Como remover permisses
de pastas e montagens:.
Testando a soluo
Agora voc pode testar sua soluo para certificar-se que seu cdigo seja executado quando voc
abre o documento a partir do computador de desenvolvimento.
Voc tambm pode implantar a soluo usando um arquivo do Microsoft Windows Installer (.msi).
Para obter mais informaes, consulte Implantando um Word ou Solution do Excel usando um
arquivo do Windows Installer Walkthrough:.
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
Observao
Essa explicao passo a passo inclui etapas para criar uma soluo simples que voc pode usar
em explicao passo a passo o Excel. Se voc deseja executar o explicao passo a passo com
Criando o projeto
Nesta etapa, voc adicionar uma caixa de mensagem ao manipulador Startup de eventos da
pasta de trabalho. Isso permite que voc para verificar se a soluo est funcionando quando
voc abre o documento rapidamente.
Nesta etapa, voc ir criar um projeto de instalao que voc pode compilar para criar um arquivo
do Windows Installer para sua soluo. Para obter mais informaes, consulte Configurar projetos.
Nesta etapa, voc adicionar a sada do projeto ExcelDeployment principal para o projeto de
instalao. A sada do projeto ExcelDeployment principal consiste de pasta de trabalho e o
conjunto de soluo.
Nesta etapa, voc ir criar um projeto que contm aes personalizadas para o projeto de
instalao. Aes personalizadas so um recurso do Windows Installer que permitem a voc para
executar cdigo no final de uma instalao para executar aes que no podem ser executadas
durante a instalao. Para obter mais informaes, consulte Aes Personalizadas.
Quando voc executava seu projeto anteriormente nessa explicao passo a passo pelo
pressionamento F5, a processo de criao editado o manifesto do aplicativo incorporado na pasta
de trabalho para aponte para o caminho relativo do conjunto. Se a pasta de trabalho e o conjunto
permanecer na mesma pasta aps a instalao, ento voc no precisam modificar o manifesto
do aplicativo incorporado, e voc pode ignorar esta seo. No entanto, se voc quiser que o
usurio possa mover a pasta de trabalho para uma pasta diferente aps a instalao, voc deve
editar o manifesto do aplicativo para apontar para o caminho completo da montagem.
Voc deve atualizar o manifesto do aplicativo que est incorporado no Visual Studio Tools for
Office documento de Soluo ao executar uma ao personalizada aps a instalao, porque o
local do conjunto de soluo desconhecido at que o usurio especifica o local durante a
instalao. Editar o manifesto do aplicativo incorporado, usando a ServerDocument classe. Para
usar a ServerDocument classe no projeto de instalao, adicione cdigo para uma Installer
classe dentro do projeto ao personalizada.
Nesta etapa, voc adicionar a sada do projeto ExcelCustomAction principal para o projeto de
instalao. Isso permite que o arquivo Windows Installer para executar a ao personalizada que
edita o manifesto do aplicativo.
Agora voc pode testar a soluo para garantir que sua soluo instalada quando voc executar
o arquivo do Windows Installer no seu computador de desenvolvimento.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
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.
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.
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Agora adicionar um novo grupo de cdigo para conceder confiana total para o conjunto com base
no nome forte.
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
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.
Observao
Observao
Observao
Para adicionar um controle Windows Forms para o documento clicando duas vezes no
controle
Observao
Observao
Compilando o cdigo
Este cdigo deve ser colocado em uma classe folha, no na classe ThisWorkbook.
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.
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
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); }
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.
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
Torna Visual Studio 2005 fcil a gravar aplicativo e assistentes de classe para projetos de
dispositivo.
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:
Os Visual Studio 2005 compiladores do dispositivo C++ ter 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.
Segurana abrangente, desempenho, estabilidade e compatibilidade com padres
funciona em MFC para dispositivos, ATL para dispositivos, a biblioteca (CRT) em tempo de
execuo C para dispositivos, e a Biblioteca C++ Padro para dispositivos
Funcionalidade Common MFC e ATL foi mesclada.
Suporte fluxo foi adicionado Biblioteca C++ Padro para dispositivos.
ATL
Observao
Embora voc possa usar Visual Studio 2005 para programar contra verso 1 e verso 2 do .NET
Compact Framework, no h suporte para os recursos abaixo marcados com um asterisco (*) na
verso 1
Novos recursos
Recurso Details
CAB Gerao de arquivo usando projetos Visual Viso geral Solutions do dispositivo de
Studio instalao e implantao. Esse processo embalagem
elimina a necessidade de personalizar o arquivo.inf
manualmente.
Filtrar sem suporte propriedades / Methods / Recurso inclui IntelliSense filtrado, uma
eventos. etapa de verificao de criao, e
capacidade para converter controles sem
suporte.
Destinos verso 1.0 do .NET Compact Framework Suporte Smartphone 2003 e Pocket PC
2003
Alterar plataformas usando o mesmo cdigo de fonte Como Compartilhar Cdigo Fonte Atravs
de Plataformas (Dispositivos)
Consulte tambm
Referncia
Para iniciar o emulador de dispositivos usando conectar para caixa de dilogo Dispositivo
1. No menu visual studio Tools, clique em Connect to Device.
2. Na caixa Connect to Device de dilogo, selecione um emulador na caixa Devices, e
clique em Connect
Para iniciar o emulador dispositivo usando o Gerenciador de emulador de dispositivo
1. No menu visual studio Tools, clique em Device Emulator Manager.
2. Na Device Emulator Manager janela, clique com boto direito o emulador voc deseja
iniciar.
Observao
O Data Source Configuration Wizard no est disponvel para projetos que destino verso 1.0
do .NET Compact Framework.
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.
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.
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).
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).
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
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.
Para mais informaes sobre como trabalhar com recursos vrias plataformas em um projeto
Visual C++, consulte Usar recursos em vrias plataformas.
Clique Start na rea de trabalho do Windows para iniciar essas ferramentas autnomo, aponte
para All Programs, aponte para Microsoft Visual Studio 2005, clique em Visual Studio Remote
Tools e selecione uma das ferramentas remotos a partir do menu.
Consulte tambm
Prtica prticas requer que Arquivos EXE, DLL, CAB, e MUI (Multilingual User Interface) ser
assinados. Em projetos gerenciados, arquivos do conjunto tambm devem ser assinados.
Modelos de segurana
H tambm vrios modelos de segurana que pode ser definido para executar em um dispositivo.
Os modelos de segurana diferentes podem restringir o acesso a aplicativos que no tm a
autorizao apropriada. Para obter mais informaes sobre dispositivo modelos de segurana,
consulte Guia do Desenvolvedor Smartphone Based Mobile-do Windows e Como Prover um
Dispositivo com um Modelo de Segurana.
Se voc executar uma etapa Post-Build que altera um binrio, voc precisa assinar novamente o
binrio; ou seja, voc dever desativar assinatura Authenticode nas propriedades do projeto, e
entrar em vez disso como uma etapa Post-build. Esta ao necessria porque nada que altera o
binrio aps ele est assinado invalida a assinatura. Assim, o binrio deve ser assinado
novamente.
Arquivos de certificado
Para ajudar a desenvolver aplicativos para uma variedade de modelos de segurana, Visual
Studio 2005 Inclui os seguintes arquivos de certificado, localizados, por padro em \Program
Files\Microsoft 8\SmartDevices\SDK\SDKTools\TestCertificates Visual Studio:
TestCert_Privileged.pfx
TestCert_UnPrivileged.pfx
Muitas opes de conexo esto disponveis, como resumidos posteriormente neste artigo. As
configuraes mais comuns so:
O ActiveSync 4.x
Opes de conexo
PCs de bolso, Smartphones, e outro hardware baseado em Windows CE oferece vrias maneiras
de vincular um dispositivo e um computador. Nesta seo, as vrias opes de conexo e suas
vantagens e desvantagens so discutidas.
Conexo USB
Placas de rede sem fio esto disponveis para PCs de bolso, e vrios modelos agora vm
com redes sem fio como um recurso integral. Redes sem fio so to rpida como uma
conexo de rede Ethernet com fio.
Bluetooth
Dispositivos Pocket PC e Smartphone muitos recurso redes sem fio Bluetooth. O Smart
Device depois pares adequados, pode conectar sobre ActiveSync, desde que ele seja no
intervalo do computador de mesa. BLUETOOTH No como rpido como 802. 11b /. g
sem fio, e no recomendada para depurao
Conexo serial
Conexo de infravermelho
Voc pode migrar projetos Embeddeds Visual C++ utilizando um assistente de migrao. Para
obter mais informaes, consulte eMbedded Visual C++ ao Assistente para atualizao 2005
Studio Visual.
Observao
Dispositivos Windows Mobile 2003 no contm os tempos de execuo eMbedded Visual Basic
em ROM, e os tempos de execuo podem ser baixado para o dispositivo como uma instalao
RAM, embora essa configurao no suportada.
Visual C# e Visual Basic projetos de dispositivo inteligente desenvolvidos no Visual Studio .NET
2003 pode ser importado para Visual Studio 2005. O Assistente para converso Visual Studio
torna as alteraes necessrias para os projetos.
Para obter mais informaes sobre como atualizar projetos para o Windows Mobile 2003 do
Windows Mobile 2000, consulte Windows Mobile Platform FAQ migrao para desenvolvedores.
Visual C#
C# uma linguagem modernos, orientated objeto-. Seus recursos coleo de lixo e suporte para
as classes .NET Compact Framework tornam mais um idioma ideal para desenvolver aplicativos
mveis confiveis e seguros. Visual C# para dispositivos inteligente inclui um nmero dos
controles para rapidamente criar uma interface de grfica do usurio (GUI), e os recursos de
suporte classes Compact Framework como GDI +, XML, e servios da Web grande. Visual C#
tambm pode chamar funes Windows CE nativas para situaes no ofeream suporte a .NET
Compact Framework.
Para obter mais informaes sobre desenvolvimento com Visual C# e acessar nativas funes
Windows CE, consulte:
Visual Basic para dispositivos inteligentes uma implementao completa do Visual Basic, e
consideravelmente mais potentes que a ferramenta de desenvolvimento anterior, eMbedded
Visual Basic. Visual Basic bastante simplifica a tarefa de portabilidade um aplicativo da rea de
trabalho para um dispositivo mvel, ou criando um aplicativo cliente rico-rapidamente. Com Visual
C#, Visual Basic faz uso do .NET Compact Framework. Os desenvolvedores j familiarizados com
o Visual Basic ser capaz para porta aplicativos existentes ou criar novos muito rapidamente.
Como com C#, Visual Basic pode acessar nativas funes Windows CE.
Para obter mais informaes sobre como desenvolver no Visual Basic, consulte:
Para obter mais informaes sobre como desenvolver no Visual C++, consulte:
C/C++ Languages
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.
Para garantir que voc ser solicitado para selecionar um dispositivo quando voc implantar a
soluo, conclua o procedimento a seguir.
1. Clique Options no menu Tools, e Device Tools Clique em General. (Est na parte inferior
da caixa Options de dilogo no visvel, selecione Show all settings se Device Tools.)
2. Marque a Show device choices before deploying a device project caixa de seleo.
Criando um projeto do Windows Forms,, bem como adicionar controles e tratamento de eventos,
segue o mesmo processo para projetos de dispositivo como faz para projetos de mesa. A principal
diferena voc encontrar o menor nmero de classes disponveis no .NET Compact Framework.
1. (Visual Basic) No menu File no Visual Studio 2005, clique em New Project.
ou
(Visual C#) No menu File do Visual Studio 2005, aponte para New, e clique em Project.
2. Project Types Na caixa New Project de dilogo, expanda Visual Basic ou Visual C#
expandir Smart Device, e clique em Pocket PC 2003.
Se no o idioma a ser exibido, no no primeiro expandir Other Languages. Esta tela
regida por suas configuraes de desenvolvimento.
3. Em Templates, clique em Device Application.
4. Na caixa Name, digite DeviceSample, e depois clique em OK.
5. (C Visual #) somente Na caixa Location, Verifique onde voc deseja armazenar seus
arquivos de projeto, e clique em OK.
Aparece uma representao de um dispositivo Pocket PC no Windows Forms Designer.
ou
Insira o seguinte cdigo C#:
MessageBox.Show("Hello, World!");
Nesse ponto, voc encontrar uma diferena de projetos de mesa. Em um projeto de dispositivo,
voc pode escolher entre vrios destinos onde o projeto para executar normalmente. Nessa
explicao passo a passo, voc escolher um emulador Pocket PC. Se voc tiver um dispositivo
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
Nesta seo
O que h de novo no Managed projetos de dispositivo
Fornece instrues passo a passo sobre como criar um projeto de dispositivo Visual Basic
ou Visual C# simples
Criao Visual Basic e Visual C# gerenciados projetos para segue dispositivos o mesmo gerais
processa como criar projetos para rea de trabalho, exceto que voc deve selecionar um
plataforma de destino (por exemplo, Pocket PC 2003) e Verso .NET Compact Framework (v2.0
Por exemplo,) no qual o projeto projetado para ser executado.
Uma caixa de dilogo Avanado New Project em Visual Studio 2005 substitui inteligente
dispositivo Assistente aplicativo Visual Studio .NET 2003. No Visual Studio 2005, voc fazer todas
as escolhas sobre tipos de projeto e Modelos na caixa New Project de dilogo.
Observao
Observao
Um modelo que tem (1.0) seu nome desenvolvido para verso 1.0 do .NET Compact
Framework. acrescentado ao Outros modelos so criados para verso 2.0.
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
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.
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
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.
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.
btn.Caption = "MyButton"
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.
Observao
Se o designer foi aberto quando voc alterou opes, feche e reabri-la para as alteraes sejam
efetivadas.
Observao
Se o designer foi aberto quando voc alterou opes, feche e reabri-la para as alteraes sejam
efetivadas.
Use as seguintes etapas para alterar o dispositivo de destino padro em projetos gerenciados.
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
Fornece Visual Studio um filtro inteligente Development dispositivo para o ndice de Contedo e
ndice. Quando voc aplica esse filtro, os tpicos visveis so reduzidos para incluir apenas
documentao considerada bsica para os desenvolvedores de dispositivo inteligente. Mais
importante, aplicar este filtro uma maneira excelente para exibir somente os subconjuntos de
dispositivo inteligente de tpicos de referncia em tempo de execuo, incluindo .NET Compact
Framework e as bibliotecas da MFC e ATL.
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.
O emulador Smartphone tenha nenhum Explorer arquivo. Use a tcnica a seguir para acessar o
sistema de arquivos Smartphone. Para concluir o processo, voc deve ter o ActiveSync 4.0 ou
posterior instalado.
Antes de tentar usar o ActiveSync com um emulador, certifique-se de que nenhum dispositivo
esteja conectado ao computador de mesa e que conexes USB esto desativadas no ActiveSync.
Observao
Observao
Observao
Sempre que desejar para usar um emulador conectado com Visual Studio usando o ActiveSync,
usar o dispositivo, emulador, destino da plataforma correspondente no.
As duas primeiras etapas preparao do dispositivo e Visual Studio, necessidade de ser feito
apenas uma vez. O ltimo conjunto de etapas, configurao de segurana e estabelecer a
conexo, deve ser repetido sempre que voc quer se conectar de uma nova instncia do Visual
Studio.
Observao de segurana
As etapas a seguir demonstram como usar Pasta compartilhamento para acessar arquivos no
computador de desenvolvimento do emulador de dispositivo.
Observao
oferece Visual Studio 2005 vrias opes para conectar o computador de desenvolvimento para
um dispositivo. Utilize a Device Properties caixa de dilogo para gerenciar essas conexes.
ships Visual Studio com conexes do emulador defaulted para o transporte de DMA e dispositivos
fsicos defaulted ao TCP / IP.
O depurador de dispositivo nativo no oferece suporte Funo evaluation. Voc no pode digitar
em uma expresso que contm uma funo dentro dela e a funo avaliada e o resultado ter
retornado.
Voc no pode depurar cdigo nativo e gerenciados em uma nica instncia do depurador.
Para depurar aplicativos que possui mistos cdigo gerenciado e nativo (ou cdigo que usa
pInvoke gerenciado), definir pontos de interrupo no cada seo onde voc deseja comear
depurao atravs de seu cdigo. Em seguida, anexar o depurador necessrio para uma
determinada seo (por exemplo, uma seo gerenciada). Desanexar que depurador e anexe a
outra quando o outro for necessria. Voc pode repetir essas Detach / anexar etapas com
freqncia conforme necessrio para percorrer o programa..
Voc no pode usar os depuradores do dispositivo para depurar aplicativos escritos para rea de
trabalho. Use os depuradores de mesa.
Para obter mais informaes e sintaxe completa, consulte Depurador Runtime (Cordbg.exe).
Comando Descrio
Problemas de Conexo
Desativando o dispositivo enquanto o depurador est sendo executado faz o depurador para
fechar por causa da falha de conexo. A falha de conexo ocorre porque o aplicativo ainda est
sendo executado em segundo plano para o dispositivo. O boto X no Pocket PC um recurso
Voc anexar a um processo em um dispositivo do muito o mesmo modo como voc faria na rea
de trabalho, exceto que voc deve definir uma chave de Registro no dispositivo para ativar
depurao gerenciado se o processo est sendo executado sem o depurador j. A configurao
dessa chave persiste at voc alter-lo, ou, no caso de um emulador, at que o emulador seja
fechado sem salvar suas configuraes.
Observao
Uma mensagem de erro exibida se voc tentar se anexar dois depuradores ou tente se conectar
com um depurador gerenciado quando a chave registro dispositivo no tiver sido definida.
Voc pode iniciar um processo de vrias formas, incluindo Explorer arquivo, da linha de comando,
e assim por diante. Na etapa seguinte, voc iniciar o processo por iniciar a partir do Debug menu.
Voc pode tambm iniciar um processo sem o depurador gerenciado, e depois anex-lo
posteriormente.
Se o objetivo for uma plataforma Windows CE gerada a partir construtor Platform, voc precisar
ter a biblioteca toolhelp.dll para preencher o Available Processes painel. Esta biblioteca est
includa no SDKs Windows Mobile.
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.
Observao
Se voc planeja fazer anexar a um processo que j est executando, por, por exemplo, clicando
Start Without Debugging e ento anexar a processo gerenciado em execuo, precisar
primeiro definir a chave registro dispositivo antes do incio do processo e voc tentar se conectar
usando a Attach to Process caixa de dilogo antes. As seguintes etapas detalham o processo.
Para definir a chave do Registro do dispositivo para ativar anexar a um processo em execuo
1. No menu Windows Start, aponte para All Programs, aponte para Microsoft Visual
Studio 2005, aponte para Visual Studio Tools, e clique em Remote Registry Editor.
2. Usando o Editor do Registro remoto, se conectar o dispositivo.
3. Para navegar ou crie a seguinte chave: depurador
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ .NETCompactFramework\Managed
4. Definir ou crie um valor DWORD nomeado AttachEnabled.
5. Definir os dados para o valor em 1.
Observao
1. Aps definir a chave conforme descrito nas etapas anteriores, iniciar um processo sem o
depurador.
2. No menu Tools, clique em Attach to Process.
3. Na caixa Transport, clique em Smart Device.
4. Na caixa Qualifier, clique em Browse.
Observao
Observao
Por padro, Tipo de cdigo definido automaticamente para Managed (.NET Compact
Framework) se estiver disponvel,. caso contrrio para Native (Smart Device) Para substituir as
configuraes padro, clique Select para abrir a Select Code Type caixa de dilogo. Observe que
Observao
No h suporte para interoperabilidade depurao. Isto , voc no pode depurar os dois tipos
cdigo gerenciado e nativo ao mesmo tempo.
Observao
Voc pode reabri caixa Attach to Process de dilogo a partir neste mesmo menu de atalho.
Use o Editor do Registro Remoto para alterar configuraes do Registro para o dispositivo.
Passo-a-passo: Depurando uma Soluo que Inclui Cdigo Cdigo Gerenciado e Cdigo Nativo
Essa explicao passo a passo Fornece as etapas para depurao uma soluo que inclui ambas
gerenciado,.NET Compact Framework e componentes nativos. No Visual Studio 2005 oferece
suporte interoperabilidade Depurao de aplicativos do dispositivo como tal. Isto , voc no pode
ter os depuradores nativos e gerenciados anexados ao mesmo tempo.
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 Development Visual C#. Ele
contm as sees a seguir:
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.
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
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
A prxima etapa configurar um ponto de interrupo no cdigo nativo para preparar para anexar
o depurador 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.
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
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.
A prxima etapa para definir um ponto de interrupo no cdigo gerenciado para preparar para
conectar o depurador 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.
Consulte tambm
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) ou Como Adicionar um Banco de Dados SQL Server Mobile a
um Projeto de Dispositivo.
Em um dispositivo projeto, Visual Studio por padro gera cdigo para somente um DataSet. Voc
pode alterar esse valor padro para gerar um resultset em vez disso, ou para gerar ambos. Para
obter mais informaes sobre as diferenas entre os dois tipos, consulte Resultsets versus
DataSets (dispositivos).
As opes ResultSet e ResultSet / DataSet tm suporte somente para arquivos.xsd criados contra
conexes SQL Server Mobile. A opo DataSet tem suporte para todas as conexes, e o cdigo
gerado pelo padro.
Observao
Se voc desejar converter um aplicativo DataSet existente para um aplicativo resultset, defina a
Custom Tool propriedade para MSDataSetResultSetGenerator. Essa configurao gera os dois
tipos de classes de acesso a dados. Em seguida, voc pode migrar seu cdigo de uma rede para
a outra sem erros de compilao. Depois de migrar o cdigo, defina a Custom Tool propriedade
para MSResultSetGenerator. Recrie para confirmar se todos os uso DataSet foi removido do
cdigo.
Uma seqncia de conexo Design-time criada por padro quando voc cria uma fonte de
dados SQL Mobile para seu projeto. Usa Visual Studio esta seqncia para se conectar ao banco
de dados em tempo de criao para recuperar informaes de esquema. Durante o curso de
desenvolvimento do projeto, talvez queira alterar essa seqncia.
Observao
Distinguir essa seqncia de seqncia de conexo em tempo de execuo. Para obter mais
informaes, consulte Propriedade Connection String Property, File Properties Dialog Box
(Devices).
Quando voc adiciona uma fonte de dados a um projeto, uma seqncia de conexo gerada no
arquivo.xsd. Essa seqncia considerada uma seqncia de conexo Design-time, adequada
para se conectar Visual Studio fonte de dados em tempo de design. Essa mesma seqncia de
conexo serve como a seqncia de conexo em tempo de execuo padro.
Usar estes procedimentos para fornecer botes de navegao para exibir linhas diferentes em
uma fonte de dados. Essa tcnica funciona em torno a falta de suporte .NET Compact Framework
para a DataNavigator classe do .NET Framework.
As etapas abaixo, escrito em C# e contar com a tabela Clientes do banco de dados Northwind,
suponha que voc tiver um DataSet ou resultset na janela Data Sources. Para obter mais
informaes, consulte Como Adicionar um Banco de Dados SQL Server Mobile a um Projeto de
Dispositivo.Em um projeto real, voc incluiria limites verificao, que no exibido nos exemplos
de cdigo aqui.
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.
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
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
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.
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
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.
Observao 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.
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.
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.
Voc pode adicionar um servio da Web como uma fonte de dados em seu projetos de dispositivo
inteligente.
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).
Observao
No possvel remover uma tabela at que todas as referncias para a tabela sejam excludas.
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).
Observao
Voc no pode fazer uma edio que violaria integridade referencial (por exemplo, tentando se
alterar a Primary Key propriedade para No quando essa coluna referida por outra restrio).
Observao
No possvel remover uma coluna at que todas as referncias para a coluna sejam excludas.
Como Gerenciar Senhas para um Banco de Dados SQL Server Mobile (Dispositivos)
Voc pode definir uma senha quando voc cria um banco de dados do SQL Server Mobile, e voc
pode alterar a senha em um banco de dados existente.
Observao de segurana
Incluindo uma senha em uma seqncia de conexo representa um risco de segurana. Para
obter mais informaes, consulte Securing Databases (SQL Server Mobile Edition).
As etapas de exemplo a seguir presumem voc tiver um aplicativo Windows Forms Pocket PC
abrir.
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).
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) ou Como Adicionar um Banco de Dados SQL Server Mobile a
um Projeto de Dispositivo.
Quando voc desejar que os usurios sejam capazes para inserir valores diferentes para um
parmetro, use um ponto de interrogao (. "? como o parmetro quando voc cria sua consulta) "
Se voc criar sua consulta usando a marca inteligente no Windows Forms Designer, como
mostrado na seguinte conjunto de etapas, uma interface de usurio gerado no formulrio
Observao
Essa explicao passo a passo mostra como usar o Visual Studio 2005 ambiente para
desenvolver um aplicativo simples consulta parametrizada. DataBinding e grande parte da
interface do usurio sero gerados automaticamente para voc. Confiar no banco de dados
Northwind familiarizado, este aplicativo fornece para o cenrio em que os usurios de dispositivo
inteligente precisam para determinar o pas remessa quando eles sabem somente o nmero do
pedido. O aplicativo voc criar aqui fornece para entrada de usurio do nmero do pedido e a
exibio de pas correspondente remessa consequent.
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.
Pr-requisitos
O banco de dados Northwind para SQL Server Mobile Edition, includo no Visual Studio 2005.
Observao
Para garantir que voc ser solicitado para selecionar um dispositivo quando voc implantar a
soluo, conclua o procedimento a seguir.
Isso um aplicativo Windows Forms simples para hospedar a funcionalidade de dados dessa
explicao passo a passo.
Observao
No selecione Device Application (1.0), que depende da verso 1,0 do .NET Compact
Framework e no adequado para essa explicao passo a passo.
1. No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
2. Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
Observao
Observao
Se o acesso para o Northwind.sdf arquivo for negado, copiar o arquivo para a rea de trabalho, e
procure a essa cpia para abrir. Esta situao pode ocorrer se voc no tem direitos suficientes
no computador de desenvolvimento para abrir o arquivo no seu local padro, que listado para o
incio dessa explicao passo a passo.
Nesta seo voc criar o aplicativo, baix-lo para o emulador se Pocket PC 2003, e verifique se o
aplicativo funciona corretamente.
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
As seguintes etapas presumem tiver um banco de dados do SQL Server Mobile com
relacionamentos de tabelas disponveis na janela fontes de dados. Para obter mais informaes,
consulte Como Criar um Banco de Dados SQL Server Mobile (Dispositivos).
Ao arrastar tabelas de detalhes, considere arrastando somente as colunas que servem sua
finalidade, em vez da grade inteira. Voc pode fazer essa opo, clique na seta no canto direito do
nome da tabela.
Observao
Esta a tabela de detalhes como ele aparece dentro da tabela mestre, no a tabela de detalhes
que est no mesmo nvel de rvore como a tabela mestra.
Descreve como para usar o Visual Studio 2005 ambiente para conectar a um banco de dados,
selecione Objetos de banco de dados para incluso em um projeto, e criar controles ligados a
dados para exibir os dados em um aplicativo de dispositivo inteligente essa explicao passo a
passo.
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.
Pr-requisitos
O banco de dados Northwind para SQL Server Mobile Edition, includo no Visual Studio 2005.
Observao
Para garantir que voc ser solicitado para selecionar um dispositivo quando voc implantar a
soluo, conclua o procedimento a seguir.
Isso um aplicativo Windows Forms simples para hospedar a funcionalidade de dados dessa
explicao passo a passo.
1. (Visual Basic) No menu File em Visual Studio 2005, clique em New Project.
ou
(Visual C#) No menu File do Visual Studio 2005, aponte para New, e clique em Project.
2. Project Types Na caixa New Project de dilogo, expanda Visual Basic ou Visual C#
expandir Smart Device, e clique em Pocket PC 2003.
Se no o idioma a ser exibido, no no primeiro expandir Other Languages. Esta tela
regida por suas configuraes de desenvolvimento.
3. Em Templates, clique em Device Application.
Observao
No selecione Device Application (1.0), que depende da verso 1 do .NET Compact Framework
e no adequado para essa explicao passo a passo.
1. No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
2. Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
Observao
Se o acesso para o Northwind.sdf arquivo for negado, copiar o arquivo para a rea de trabalho, e
procure a essa cpia para abrir. Esta situao pode ocorrer se voc no tem direitos suficientes
no computador de desenvolvimento para abrir o arquivo no seu local padro, que listada no
incio dessa explicao passo a passo.
Observao
Esta a Orders tabela como ele aparece dentro da Customers tabela, no a Orders tabela que
4. Clique na seta suspensa para esta Orders Tabela, e selecione a DataGrid opo.
5. Arraste esta Orders tabela da janela Data Sources para o formulrio no designer.
Localize a grade a parte inferior da janela.
Testar o aplicativo
Nesta seo voc criar o aplicativo, baix-lo para o emulador se Pocket PC 2003, e verifique se o
aplicativo funciona corretamente.
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
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).
Voc pode visualizar dados fora usando Server Explorer Um do projeto, ou dentro de um projeto
usando a Data Sources janela, onde voc tambm pode parameterize a consulta que produz o
modo de exibio. Para obter mais informaes, consulte Como: Criar consultas parametrizadas
(Dispositivos).
Como: Gerar resumo e modos de exibio de edio para aplicativos de dados (Dispositivos)
Usar formulrios de dados para exibir e editar linhas de dados em um DataGrid nica.
A interface do usurio de formulrio de dados consiste de duas caixas de dilogo: caixa View de
dilogo exibe uma exibio de resumo de uma linha DataGrid selecionado, e a Edit caixa de
dilogo permite a edio de linha.
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).
Observao
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:.
Uma soluo Smart Device existente. Para fins dessa explicao passo a passo de embalagem,
considere criar e criar um projeto simples,, conforme o projeto descrito no Passo-a-passo: Criando
aplicativos do Windows Forms para um dispositivo.
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.
Observao
Ao criar um projeto CAB dispositivo inteligente para um aplicativo escrito em C++, voc deve
adicionar dependncias, tais como atl80.dll / mfc80U.dll, ou MSVCRT.dll, para o projeto CAB se
voc estiver vinculando a essas DLLs dinamicamente manualmente. Vinculao esttica
altamente recomendvel, entretanto, a fim de reduzir dependncias nas DLLs MFC / ATL. Se voc
estiver vinculando estaticamente, as DLLs no devem ser redistribudas com o aplicativo. Se voc
est vinculando, dinamicamente e precisar redistribuir as DLLs no CAB, no instale as DLLs para
a pasta do sistema, como \windows, para o dispositivo. Em vez disso, instale as DLLs no diretrio
1. No Solution Explorer, clique com o boto direito do mouse em seu nome de projeto CAB,
depois aponte para Add, e clique em File
2. Navigate to <Visual Studio installation folder>\VC\ce\dll\armv4.
3. Selecione os arquivos para adicionar.
o Para um projeto MFC, pressione CTRL e clique MFC80U.DLL, atl80.dll, e
msvcrt80.dll. Talvez tambm precise Clique em uma ou mais das DLLs especficos do
idioma se seu aplicativo exigir recursos especficos do idioma MFC.
o Para um Projeto ATL, pressione CTRL e clique atl80.dll e msvcrt80.dll. Se sua
soluo ATL suporta MFC, clique em MFC80U.DLL tambm.
o Para um projeto Win32, clique em msvcrt80.dll.
4. Clique Open na caixa Add Files de dilogo para adicionar os arquivos no seu projeto
CAB.
5. No painel esquerdo do File System Editor, clique com boto direito File System on
Target Machine.
6. Clique em Add Special Folder e, clique em Windows Folder.
7. No painel esquerdo de File System Editor, clique na pasta que contm a sada principal.
As DLLs tenham sido adicionadas por padro para a mesma pasta como a Sada principal.
Para mov-los para a pasta Windows, selecione os arquivos no painel central da File
System Editor, arraste.-los sobre para o Windows Folder cone
8. Use o mesmo procedimento para adicionar qualquer outras dependncias exigidas pela
sua soluo. Voc pode adicionar dependncias em qualquer pasta; no necessrio para
adicion-los pasta Windows.
1. No painel direito da File System Editor, selecione Primary output from <your
application project name>.
2. No menu Action, selecione Create Shortcut to Primary output from <your application
project name>.
Este comando adiciona um item atalho abaixo do item de sada.
3. Clique com o boto direito do mouse o item atalho, clique Rename, e renomear o atalho
para algo adequado para um atalho.
1. No Windows Explorer, navegue at a pasta onde voc armazenados nesta soluo. Voc
encontrar o arquivo cab na pasta CABProject\Release da sua soluo.
2. Copie o arquivo CAB para um dispositivo que esteja conectado com o ActiveSync 4.0 ou
posterior.
Quando um usurio toques no nome de arquivo CAB File Explorer no dispositivo, Windows
CE explodir o CAB, e instalar o aplicativo no dispositivo.
Para obter mais informaes, consulte a documentao e Smartphone Pocket PC SDK.
Consulte tambm
A Select Certificate caixa de dilogo est o portal central para assinar projetos de dispositivo. Ele
fornece uma entrada caixa Manage Certificates de dilogo caixa e a Certificate Import Wizard
como descritos nas etapas a seguir.
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.
Aps voc ter exibido caixa Select Certificate de dilogo conforme descrito em etapas anteriores,
voc pode selecionar o certificado a ser.
Para selecionar um certificado para o projeto usando a caixa de dilogo Selecionar certificado
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:
Executar signtool.EXE como um evento Post-Build quando outros eventos Post-Build alterar os
binrios originais. Alteraes binrios assinados invalida a assinatura original.
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 iniciar signtool.EXE como um evento Post-Build em projetos do dispositivo Visual Basic e
Visual C#
1. No Solution Explorer, clique com o projeto, e no menu de atalho, clique em Properties
2. Da Build Events pgina (Visual C#) ou a Compile pgina (Visual Basic), clique em Edit
Post-build.
3. Na caixa Post-build Event Command Line de dilogo, digite a linha de comando signtool
com as opes selecionadas.
Para obter mais informaes sobre como executar signtool a partir da linha de comando,
consulte SignTool.
Para iniciar signtool.EXE como um evento Post-Build em projetos de dispositivo Visual C++
1. No Solution Explorer, clique com o projeto, e no menu de atalho, clique em Properties
2. Em Configuration Properties, expanda o Build Events n.
3. Clique em Post-Build Event.
4. Selecione a Command Line propriedade, e clique no ellipsis boto. Para abrir a
Command Line caixa de dilogo ()
5. Digite a linha de comando signtool com as opes selecionadas.
Voc pode consultar um dispositivo para ver quais certificados j esto instalados no
armazenamento de certificados do dispositivo. Voc pode usar essas informaes para determinar
qual certificado desejado para assinar seu aplicativo COM.
O ActiveSync.
RapiConfig.exe.
Consulta armazenamento certificado XML arquivo (CertStoreQuery.xml).
Para consultar um dispositivo para seu modelo de segurana
1. Estabelecer uma conexo do ActiveSync para o dispositivo.
2. Digite o seguinte comando no prompt de comando, onde certstorequery.xml
armazenamento de certificado o arquivo XML de consulta:
Rapiconfig.exe /P /M <certstorequery.xml>
As seguintes etapas presumem voc tiver um dispositivo inteligente Visual Basic ou Projeto Visual
C# na sua soluo. Para obter mais informaes, consulte Programao para Dispositivos usando
o .NET Compact Framework.
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.
As etapas abaixo presumem ter um dispositivo inteligente Visual Basic ou Visual C# projeto na
soluo. Para obter mais informaes sobre como criar esses projetos, consulte Programao
para Dispositivos usando o .NET Compact Framework.
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.
As etapas abaixo presumem voc tiver um projeto CAB dispositivos inteligentes em sua soluo.
Para obter mais informaes, consulte Viso geral Solutions do dispositivo de embalagem.
Observao
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.
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.
RapiConfig.exe, localizado, por padro em \Program Files\Microsoft
8\SmartDevices\SDK\SDKTools Visual Studio.
Arquivo XML de segurana.
Para configurar um dispositivo com um modelo de segurana
1. Estabelecer uma conexo do ActiveSync para o dispositivo.
2. Digite o seguinte comando no prompt de comando, onde securityfile.xml o arquivo XML
de modelo de segurana:
RapiConfig.exe /P /M <securityfile.xml>
ClickOnce
COMO: Publicar um aplicativo ClickOnce
Demonstra como utilizar a propriedade URL de Instalao para especificar o servidor Web
onde os usurios iro fazer download do aplicativo.
Demonstra como utilizar a propriedade URL de Suporte para identificar uma pgina da
Web ou compartilhamento de arquivo onde usurios podem ir para obter informaes
sobre o aplicativo.
Demonstra como ativar AutoIniciar para que o aplicativo ClickOnce seja automaticamente
iniciado quando a mdia for inserida.
Demonstra como alterar a propriedade Verso de Publicao para fazer com que o
aplicativo seja publicado como uma atualizao.
Demonstra como excluir arquivos, marcar os arquivos como arquivos de dados ou pr-
requisitos, e criar grupos de arquivos para instalao condicional.
Fornece tarefas que devem ser executadas no servidor que executa o Systems
Management Server.
Fornece procedimento para mostrar como usar um aplicativo ClickOnce para obter
informaes de seqncia de consulta. Ele tambm mostra como seu aplicativo ClickOnce
pode usar um pedao pequeno de cdigo para ler esses valores na primeira vez que inicia
o aplicativo.
Demonstra como definir uma zona de segurana para preencher as permisses exigidas
pela tabela de aplicativo.
Demonstra como restringir o aplicativo s permisses especficas que ele precisa para
operar corretamente.
Demonstra como depurar o aplicativo com as mesmas permisses que o usurio final.
O Windows Installer
Implantao do Windows Installer
Links para artigos sobre como usar a implantao do Windows Installer para criar pacotes
instaladores a serem distribudos aos usurios.
Passo a passo: Usando uma ao personalizada para exibir uma mensagem na instalao
Demonstra como usar uma ao personalizada para tirar a entrada do usurio e pass-la a
uma caixa de mensagem que aparece durante a instalao.
Passo a passo: Usando uma ao personalizada para criar um banco de dados na instalao
Passo a passo: Redirecionando um aplicativo para alcanar um XML Web Service diferente na
instalao
Demonstra como criar um aplicativo da Web que pode ser redirecionado para alcanar um
XML Web Service diferente usando a propriedade Comportamento da URL, uma classe de
instalador, e um projeto de Configurao Web.
Demonstra como especificar onde e como sua soluo ser implantada durante e depois
do desenvolvimento.
Demonstra como criar arquivos do Windows Installer (.msi), que so usados para distribuir
seu aplicativo para instalao em outro computador ou servidor Web.
Demonstra como criar um projeto CAB para criar arquivos de gabinete (.CAB) que podem
ser usados por componentes baixados em um navegador da Web.
Demonstra como especificar o que precisa ser includo no instalador e onde instal-lo no
computador de destino.