Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Visual C Consolidada PT BR PDF
Apostila Visual C Consolidada PT BR PDF
Visual C# Consolidado
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
Visual C# Consolidado
Visual C# Consolidado
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
Visual C# Consolidado
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
Visual C# Consolidado
Visual C# Consolidado
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
Visual C# Consolidado
11
Visual C# Consolidado
12
Visual C# Consolidado
13
Visual C# Consolidado
14
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
Guia de Introduo ao Visual C#
Apresenta os recursos do C# 2.0 para programadores novos para a linguagem ou novos
para o Visual Studio, e fornece um roadmap para encontrar ajuda no Visual Studio. Isso
tambm est localizado nas pginas "Como Fazer".
Guia de programao C #
Fornece informaes e exemplos prticos sobre como usar construes de linguagem C#.
Referncia C#
Fornece informaes de referncia detalhadas em conceitos de programao C#,
palavras-chave, tipos, operadores, atributos, diretivas de pr-processador, opes de
compilador, e erro de compilador e avisos.
Especificao da linguagem C#
Links para a verso mais recente das especificaes C# no formato Microsoft Word.
Exemplos de Visual C#
Exemplo de cdigo fonte que demonstram como programar usando Visual C#.
Visual C# Consolidado
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
Visual C# Consolidado
18
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
Linguagem e Compilador
Editor de cdigos
Ambiente de desenvolvimento
Depurao
Linguagem e Compilador
A linguagem C# agora suporta tipos genrico, iteradores e tipos parciais. A verso mais recente
do compilador C# tambm inclui novos recursos e opes. Para mais informaes, consulte O que
h de novo na Linguagem e Compilador C# 2.0.
Editor de cdigos
O Editor de cdigos contm os seguintes recursos novos para Visual C# 2005.
Trechos de cdigo
Visual C# Consolidado
20
Refatorao
Ferramentas de refactorao podem automaticamente reestruturar seu cdigo fonte, por exemplo,
promovendo as variveis locais para parmetros ou convertendo um bloco de cdigo em um
mtodo.
Extrair o mtodo
Encapsular o campo
Extrair a interface
Renomear
Remover parmetros
Reordenar parmetros
Ambiente de Desenvolvimento
O ambiente de desenvolvimento inclui os seguintes aperfeioamentos para Visual C# 2005.
O IntelliSense
O IntelliSense foi aprimorado com os novos recursos a seguir:
A lista de concluso de List Members aparece automaticamente quando voc volta com o
cursor para um operador de escopo que precede um objeto, ou quando voc desfaz a ao de
concluso.
Quando voc escreve cdigo de tratamento de erros, o Membros lista o ajuda a descobrir
qual exceo atrair filtrando membros irrelevantes da lista de concluso em uma clusula
catch.
Quando voc precisa inserir cdigo padronizado, o Automatic Code Generation agora
permite que voc determine que o IntelliSense insira o cdigo para voc.
Class Designer
O Class Designer um novo editor que exibe graficamente classes e tipos e permite que os
mtodos sejam adicionados ou modificados. Tambm possvel usar ferramentas de refatorao
a partir da janela Class Designer.
Implantao ClickOnce
A implantao ClickOnce permite que voc publique aplicativos do Windows em um servidor Web
ou em compartilhamento de arquivos de rede para instalaes simplificadas.
Visual C# Consolidado
21
Assistentes de Cdigo
Os assistentes cdigo a seguir esto agora obsoletos:
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.
3.
4.
Expanda a lista Common Controls, e arraste o controle Label para seu formulrio.
5.
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.
8.
2.
3.
Na Web
A Ajuda do Microsoft e Suporte
Fornece acesso a artigos da KB, downloads e atualizaes, WebCasts de suporte e outros
servios.
O Microsoft Visual C# Developer Center
Fornece exemplos de cdigo, informaes sobre atualizao, e contedo tcnico.
Grupos de discusso MSDN
Fornece uma maneira para conectar-se a uma comunidade de especialistas de todo o
mundo.
Fruns
Forums tcnico da Microsoft
Fruns discusso baseados na Web para muitas tecnologias Microsoft incluindo C# e o
Framework .NET.
Grupos de notcias
microsoft.public.dotnet.languages.csharp
Fornece um frum para perguntas e discusso geral sobre Visual 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
Visual C# Consolidado
28
Modo de Exibio de Classe, para navegar atravs de cdigo fonte de acordo com
tipos, no arquivos.
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#).
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.
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
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.
Embora voc tambm possa criar sua UI escrevendo seu prprio cdigo, designers permitem que
voc realize este trabalho muito mais rapidamente que na codificao manual.
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.
Quando voc adiciona um manipulador de eventos atravs da janela Properties, o designer
automaticamente escrever para voc o corpo do mtodo como vazio, e fica por sua conta
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:
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:
Trechos de cdigo: Voc pode procurar uma biblioteca que contm padres de
cdigo repetidos freqentemente.
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
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
O Visual C# fornece as seguintes ferramentas para ajud-lo a navegar e pesquisar o
cdigo fonte, arquivos de projeto e janelas abertas.
Exibio de classe
Barras de navegao
Navegao CTRL+TAB
Localizao em arquivos
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
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):
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.
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
Visual C# Consolidado
50
Pesquisar F1
Pesquisa
ndice
ndice Analtico
Como Eu
Ajuda Dinmica
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
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
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
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.
Negrito Colorization
Quando voc editar qualquer uma dos pares construo de cdigo a seguir a seqncia, ou pares
construo de cdigo rapidamente so exibidos em negrito para indicar uma associao entre
elas:
""
Uma seqncia
@" "
#if, #endif
#region, #endregion
case, break
default, break
for, break
for, continue
foreach, break
foreach, continue
while, break
while, continue
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.
Visual C# Consolidado
58
Class View
No
Janela de
Comando
No
Dynamic Help
Window
No
Visual C# Consolidado
59
No
Janela Output
No
Start Page
Lista de tarefas
(Visual Studio)
No
Toolbox
Teclado
Recurso
Comportamento
Teclas de atalho
Emulao breve
Emulao Emacs
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:
Teclas de
Descrio
Visual C# Consolidado
60
atalho
Ativar menu
aplicativo
ALT +
espaos
Ativar menu
Janela
Documento
ALT + HFEN
Ativar ferramenta
menu Janela
ALT + HFEN
Aplicativo de
fechamento
ALT + F4
Fecha o IDE.
Fechar
documento
CTRL+F6
Recolher Todos
os ns de rvore
Num +-
Expandir todos os
ns de rvore
Num + *
ALT
Mova para
ferramentas
prxima
CTRL + TAB
CTRL +
SHIFT + TAB
Mova para
SHIFT + ALT
ferramentas
Janela ferramenta
Mover o foco de
rvore abaixo
CTRL +
DOWN.
Move o foco de
rvore cima
CTRL + UP
Menu de atalho
SHIFT + F10
Alternar
visibilidade lista
drop-down
F4
Alternar seleo
foco de rvore
CTRL +
SPACEBAR
Visual C# Consolidado
61
Visual C# Consolidado
as combinaes
as
as
as
as combinaes de
as
62
Visual C# Consolidado
63
Para obter mais informaes sobre a biblioteca de classe do .NET Framework, consulte
Viso geral da estrutura da biblioteca de classe .NET e Programao no .NET Framework.
Para obter mais informaes sobre a arquitetura .NET Framework, consulte Viso Geral do
.NET Framework.
Para obter informaes sobre como executar tarefas especficas usando as bibliotecas de
classe, consulte Como fazer em C# ou clique em How Do I no menu Help do Visual C#.
Visual C# Consolidado
64
Implantao ClickOnce.
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:
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.
Abra uma soluo existente no Visual Studio com Visual Studio 2005 Tools for Office
instalado.
O Visual Studio Conversion Wizard aparece.
2.
3.
4.
Clique em Next.
5.
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.
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
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Excel
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de aplicativos do Excel.
2.
3.
Pressione ENTER.
Um NamedRange controle adicionado clula A1. No h nenhuma indicao visvel na
planilha, mas formInput aparece na caixa Name (logo acima a planilha no lado
esquerdo). e na Properties janela quando a clula A1 selecionada
Visual C# Consolidado
71
2.
3.
4.
5.
2.
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.
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.
2.
3.
4.
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.
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:
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Visual C# Consolidado
73
Para essa explicao passo a passo, voc precisar trs CheckBox controles e algum texto em
um NamedRange controle.
Verifique se a pasta de trabalho est abra no designer visual studio e que Sheet1 est
aberto.
2.
3.
4.
Propriedade
Value (Valor)
Name
applyBoldFont
Text
Negrito
5.
Propriedade
Value (Valor)
Name
applyItalicFont
Text
Itlico
6.
Propriedade
Value (Valor)
Name
applyUnderlineFont
Text
Sublinhado
7.
8.
Observao
Voc tambm pode adicionar o NamedRange controle digitando textFont na caixa Name.
Visual C# Consolidado
74
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.
5.
Propriedade
Value (Valor)
Name
textFont
Value2
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.
Clique com o boto direito do mouse Sheet1 e clique View Code no menu de atalho
2.
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.
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.
2.
3.
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:.
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:
Excel.
Criando o projeto
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
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.
2.
3.
4.
5.
Propriedade
Value (Valor)
Name
insertText
Text
Inserir texto
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#
2.
Clique no boto.
Visual C# Consolidado
77
3.
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:.
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:
Nesta etapa, voc ir criar pasta de trabalho Excel usando Visual Studio Tools for Office Um do
projeto.
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,
2.
3.
4.
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.
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.
6.
7.
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
2.
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
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.
Visual C# Consolidado
80
3.
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.
6.
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:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Visual C# Consolidado
81
2.
3.
Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
5.
6.
Clique em Save.
7.
8.
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.
2.
3.
4.
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.
2.
3.
4.
5.
6.
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.
2.
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.
7.
Clique em Next.
8.
9.
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
83
1.
2.
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
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.
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.
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.
5.
Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6.
7.
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.
2.
3.
4.
5.
6.
7.
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
2.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para cada
boto.
C#
Visual C# Consolidado
86
Agora voc pode testar sua pasta de trabalho para certificar-se que voc pode navegar atravs
dos registros no banco de dados.
2.
3.
4.
Clique nos outros botes de rolagem para confirmar que o registro muda conforme o
esperado.
Prximas etapas
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.
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
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
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.
3.
Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
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.
5.
Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6.
7.
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.
88
1.
2.
3.
4.
Ao inicializar o controle
1.
2.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para o b
utton.
C#
this.button1.Text = "Save";
3.
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.
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.
Verifique que quando abrir a pasta de trabalho, o objeto lista preenchido com dados da
tabela Employees.
2.
2.
Digitar Last Name, incluindo um espao entre as duas palavras, e pressione ENTER.
2.
3.
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.
2.
CdigoDoFuncionrio
Sobrenome
FirstName
Ttulo
10
ITO
Shu
Gerenciador de vendas
Selecionar linha 16, que deve conter a nova linha que voc adicionou, clicando no nmero
16 no lado esquerdo da planilha.
No menu Edit, clique em Delete.
2.
3.
Visual C# Consolidado
90
2.
3.
4.
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:.
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
Acesso ao Exemplo de SQL Server do Northwind. O banco de dados pode ser no seu computador
de desenvolvimento ou em um servidor.
Visual C# Consolidado
91
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My MasterDetail projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
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.
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.
5.
Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
6.
7.
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.
2.
3.
4.
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.
2.
2.
3.
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.
2.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para os
botes.
C#
Visual C# Consolidado
93
C#
private void button1_Click(object sender, EventArgs e) {
this.ordersBindingSource.MovePrevious(); }
2.
Pressione F5.
Verifique que o intervalo nomeado e o objeto lista so preenchidos com dados da fonte de
dados.
3.
4.
5.
6.
7.
Rolar pelos alguns dos registros para ver que a planilha opera normalmente quando
desconectado.
8.
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
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
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.
2.
3.
4.
Clique com o boto direito do mouse na Sheet3 guia e, em seguida clique Rename no
menu de atalho.
Renomear a planilha para Data for Chart.
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
2.
3.
4.
Na planilha Data for Chart, selecionar o bloco de clulas que contm os nmeros, que
inclui A4 no canto esquerdo superior para E8 no canto direito inferior.
5.
Para aceitar todos os padres para Step 3, clique Next em Next novamente.
6.
Visual C# Consolidado
95
7.
8.
Clique em Finish.
9.
Reposicionar o grfico para que o canto direito superior alinhe com Clula E2.
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
Propriedade
Value (Valor)
Name
dataChart
HasLegend
False
2.
3.
Na caixa Add New Item de dilogo, clique User Control, nome do controle
ChartOptions, e clique em Add
2.
Propriedade
Value (Valor)
Visual C# Consolidado
96
Name
columnChart
Text
Grfico de coluna
3.
Propriedade
Value (Valor)
Name
barChart
Text
Grfico de barras
4.
Propriedade
Value (Valor)
Name
lineChart
Text
Grfico de linha
5.
Propriedade
Value (Valor)
Name
areaBlockChart
Text
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.
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; }
}
Visual C# Consolidado
97
1.
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#
2.
Visual C# Consolidado
98
3.
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
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.
2.
3.
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
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
Criando o projeto
A primeira etapa para criar um projeto de pasta de trabalho do Excel.
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
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.
3.
Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
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.
Visual C# Consolidado
100
7.
8.
9.
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.
Adicionar controles a planilha
Em seguida, adicione um NamedRange controle e um ListObject controle primeira planilha.
2.
3.
4.
Arraste Company Name a partir da Data Sources janela para na Sheet1 Clula A2.
Um NamedRange controle denominado CompanyNameNamedRange criado, e o
<CompanyName> de texto aparece na clula A2. Ao mesmo tempo, nomeado
suppliersBindingSource, um adaptador de tabela, e um DataSet so adicionados ao
projeto. um BindingSource O controle acoplado que por sua vez est vinculado a
DataSet instncia. o BindingSource,
5.
Na janela Data Sources, role para baixo aps as colunas que esto sob a Suppliers
tabela. Na parte inferior da lista a Products tabela; ele aqui porque ele um filho da
Suppliers tabela. Selecionar esta Products Tabela, no a um que seja no mesmo nvel
como a Suppliers Tabela, e clique a seta suspensa que aparece.
6.
7.
Em seguida, voc precisa um controle painel Aes que contenha uma caixa de combinao.
2.
3.
Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl e clique em Add
Visual C# Consolidado
101
2.
3.
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
Clique com o boto direito do mouse no controle painel Aes e selecione View Code a
partir do menu de atalho
Adicione o seguinte cdigo ao evento Load do controle painel Aes:
C#
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#
2.
2.
Visual C# Consolidado
102
3.
Selecione uma empresa na caixa Lista. Verifique se o nome da empresa est listado no
controle NamedRange e se os detalhes do produto esto listados no ListObject
controle.
4.
Selecione vrias empresas para verificar o nome da empresa e Detalhes do Produto altere
conforme apropriado.
Prximas etapas
Essa explicao passo a passo mostra as noes bsicas de vinculao de dados a controles em
um painel Aes no Excel. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Word. Para obter mais informaes, consulte Vinculao
de Dados para controles em um painel Aes do Word Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Visual C# Consolidado
103
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.
2.
4.
5.
Sair do Word.
2.
3.
4.
Visual C# Consolidado
104
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.
Quando voc publicar uma soluo, o manifesto do aplicativo incorporado no aponta de
documento de soluo para o caminho completo da manifesto de implantao. Se voc
relanamento os arquivos de soluo para outro local, dever atualizar o manifesto do aplicativo
incorporado para apontar para a nova localizao da manifesto de implantao. Voc tambm
deve atualizar a manifesto de implantao e o manifesto do aplicativo externo para apontar para
os novos locais de arquivo.
Atualizando o manifesto Application incorporados
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.
2.
3.
using Microsoft.VisualStudio.Tools.Applications.Runtime;
4.
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(); } }
5.
Visual C# Consolidado
105
2.
3.
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.
2.
3.
4.
Agora que voc tiver editado os manifestos, voc est pronto para copiar os arquivos de soluo
para o servidor.
Visual C# Consolidado
106
2.
3.
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:.
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.
Visual C# Consolidado
107
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 prrequisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
2.
Visual C# Consolidado
108
4.
5.
Saia do Excel.
2.
3.
No painel Project types, expanda Other Project types e selecione Setup and
Deployment.
4.
5.
6.
Clique em OK.
O projeto instalao aparece no Solution Explorer. Por padro, o arquivo que voc ir
criar usando este projeto instalao Windows Installer inclui uma caixa de dilogo que
permite ao usurio final que especifique o local de instalao da soluo. Para obter mais
informaes, consulte Caixa de dilogo interface do usurio da pasta de instalao.
Adicionar o pasta de trabalho e assembly da soluo para o Project da instalao
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.
2.
3.
4.
5.
6.
7.
Clique em OK.
A sada do projeto e dependncias aparecem no painel direito.
8.
9.
Clique com boto direito mouse cada dependncia, exceto para Microsoft .NET
Framework, e clique Exclude no menu de atalho.
Visual C# Consolidado
109
2.
3.
4.
5.
6.
Clique em OK.
O novo projeto aparece na Solution Explorer.
7.
No Solution Explorer, clique com o boto direito do mouse Class1.vb ou Class1.cs sob
o ExcelCustomAction projeto e, em seguida, clique em Delete. Este arquivo
desnecessrio para essa explicao passo a passo.
Criar uma ao personalizada que salvas o manifesto de aplicativo
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.
2.
3.
4.
5.
6.
using Microsoft.VisualStudio.Tools.Applications.Runtime;
Visual C# Consolidado
110
7.
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.
4.
5.
6.
7.
Visual C# Consolidado
111
8.
9.
2.
3.
4.
Visual C# Consolidado
112
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
2.
3.
Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
5.
6.
Clique em Save.
7.
8.
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.
2.
3.
4.
Visual C# Consolidado
113
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.
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.
2.
3.
4.
5.
6.
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.
2.
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.
Visual C# Consolidado
114
7.
Clique em Next.
8.
9.
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
2.
Visual C# Consolidado
115
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:
Neste procedimento, voc ir criar projeto usando Visual Studio Tools for Office um 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.
Visual C# Consolidado
116
Propriedade
Value (Valor)
Name
applyBoldFont
Text
Negrito
5.
Pressione Enter para mover o ponto de insero abaixo da primeira caixa de seleo.
6.
Propriedade
Value (Valor)
Name
applyItalicFont
Text
Itlico
7.
8.
Pressione Enter para mover o ponto de insero abaixo da segunda caixa de seleo.
Adicionar uma caixa de seleo terceira para o documento abaixo da ApplyItalicFont
caixa de seleo e alterar as propriedades a seguir:
Propriedade
Value (Valor)
Name
applyUnderlineFont
Text
Sublinhado
9.
Observao
Voc tambm pode adicionar o Bookmark controle usando a Bookmark caixa de dilogo,
encontrada no menu Insert.
Mover o ponto de insero abaixo os controles caixa de seleo e digite o seguinte texto
no documento:
Clique em uma caixa de seleo para alterar a formatao de texto.
2.
3.
4.
Certifique-se de que que Bookmark1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e alterar a propriedade Nome para fontText.
Visual C# Consolidado
117
Em seguida, escreva o cdigo para formatar o texto quando uma caixa de seleo marcada ou
desmarcada.
Formatao a caixa de texto quando a verificao checked ou Cleared
Quando o usurio seleciona uma opo de formatao, alterar o formato do texto no documento.
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
eventos, consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio
do Office:.
C#
2.
Visual C# Consolidado
118
3.
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:.
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:
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
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.
Visual C# Consolidado
119
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.
3.
4.
5.
Propriedade
Value (Valor)
Name
insertText
Text
Inserir texto
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#
2.
Clique no boto.
3.
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.
Visual C# Consolidado
120
Escrever cdigo para responder a com o boto direito do mouse texto em um indicador.
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
Nesta etapa, voc ser adicionar texto ao seu documento do Word e depois adicionar dois
indicadores.
2.
Visual C# Consolidado
121
3.
Observao
As palavras right-click the text aparecero no bookmark1 e bookmark2.
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
Visual C# Consolidado
122
2.
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.
2.
Clique com o boto direito do mouse dentro do indicador e selecione Bold primeiro.
3.
4.
Clique com o boto direito do mouse dentro do texto dos indicadores sobrepostos e
selecione Italic.
5.
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.
Visual C# Consolidado
123
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:
Nesta etapa, voc ir criar projeto usando Visual Studio Tools for Office um documento do Word.
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
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
Visual C# Consolidado
124
Feche a Datasheet janela para aceite os valores padro no grfico e clique dentro do
documento para mover foco fora do grfico.
4.
5.
2.
3.
Na caixa Add New Item de dilogo, clique User Control, nome do controle
ChartOptions, e clique em Add
2.
Propriedade
Value (Valor)
Name
columnChart
Text
Grfico de coluna
3.
Propriedade
Value (Valor)
Name
barChart
Text
Grfico de barras
4.
Propriedade
Value (Valor)
Name
lineChart
Text
Grfico de linha
5.
Propriedade
Value (Valor)
Name
areaBlockChart
Text
Visual C# Consolidado
125
Para acessar o grfico do controle de usurio em um documento, voc deve ter uma referncia
11.0 biblioteca objeto do Graph Microsoft no seu projeto.
2.
3.
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.
2.
Visual C# Consolidado
126
Microsoft.Office.Interop.Graph.XlChartType.xlColumnClustered; if (this.SelectionChanged !=
null) { this.SelectionChanged(this, EventArgs.Empty); } } }
4.
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#
2.
3.
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
Visual C# Consolidado
127
C#
this.ChartOptions1.SelectionChanged += new
EventHandler(ChartOptions1_SelectionChanged);
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que o estilo do grfico atualizado
corretamente quando voc seleciona um boto de opo.
2.
3.
Essa explicao passo a passo mostra noes bsicas de usando botes de opo e
programaticamente alterando estilos do grfico em documentos do Word 2003. Aqui esto
algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Use uma Relao mestre / detalhes quando exibir dados nos controles.
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
Visual C# Consolidado
128
Criando o projeto
Nesta etapa, voc ir criar um projeto Documento do Word.
Criar um projeto Documento do Word com o nome My Word Actions Pane. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte
Como criar Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Word Actions Pane projeto
para Solution Explorer o Visual Studio.
Adicionar controles ao painel de aes
Para essa explicao passo a passo, necessrio um controle painel Aes que contm controles
ligados a dados Windows Forms. Adicionar uma fonte de dados para o projeto, e arraste os
controles a partir da Data Sources janela para o controle painel Aes.
2.
3.
Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl, e clique em Add
Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data
menu.
Observao
Se Show Data Sources Clique dentro do documento do Word e marque novamente. no estiver
disponvel,
2.
3.
Clique Add New Data Source Para iniciar o Data Source Configuration
Wizard.
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.
7.
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.
129
1.
2.
3.
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.
6.
7.
8.
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,
Propriedade
Value (Valor)
Name
Inserir
Text
Inserir
C#
Visual C# Consolidado
130
2.
3.
4.
5.
6.
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.
Visual C# Consolidado
131
row["ProductName"].ToString(); newRow.Cells[3].Range.Text =
row["QuantityPerUnit"].ToString(); newRow.Cells[4].Range.Text =
Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00"); } else {
MessageBox.Show("Cursor must be within a table.", "Actions Pane", MessageBoxButtons.OK,
MessageBoxIcon.Error); } }
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#
Criar uma nova instncia do controle na parte superior da classe ThisDocument de forma que ele
tenha como no Exemplo a seguir:
C#
private ActionsControl actions = new ActionsControl();
Adicione cdigo ao manipulador Startup de eventos de ThisDocument forma que ele tenha como no
Exemplo a seguir:
Observao
Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.ActionsPane.Controls.Add(actions);
Testar o aplicativo
Visual C# Consolidado
132
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.
2.
3.
4.
5.
Essa explicao passo a passo mostra as noes bsicas de vinculao de dados a controles em
um painel Aes no Word. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Excel. Para obter mais informaes, Vinculao de Dados
para controles em um painel Aes do Excel Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto Documento do Word com o nome My Smart Tag, usando o Visual
Basic ou C#. Verifique que Create a new document est selecionada. Para obter mais
informaes, consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Smart Tag projeto para
Solution Explorer o Visual Studio.
Visual C# Consolidado
133
Configurando o projeto
Para esta etapa, voc ir configurar o projeto para executar o cdigo fornecido nessa explicao
passo a passo.
2.
Na guia COM, selecione biblioteca tipo 2.0 marcas inteligentes Microsoft e clique em OK.
3.
4.
using System.Text.RegularExpressions;
Criando a marca inteligente
Nesta etapa, voc ser criar uma Visual Studio Tools for Office marca inteligente e adicion-lo
para o documento. Tambm ir adicionar uma expresso regular para a lista de termos que
reconhece a marca inteligente, e criar uma ao que estar disponvel quando o usurio clica a
marca inteligente.
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#
Visual C# Consolidado
134
C#
void action1_Click(object sender, Microsoft.Office.Tools.Word.ActionEventArgs e) { string value
= e.Properties.get_Read("number"); double fahrenheit = Convert.ToDouble(value); int celsius =
(int)(fahrenheit - 32) * 5 / 9; e.Range.Text = celsius.ToString() + "C"; }
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que a marca inteligente converte
Fahrenheit temperaturas para Celsius.
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.
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Visual C# Consolidado
135
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.
2.
4.
5.
Sair do Word.
2.
Visual C# Consolidado
136
5.
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.
Quando voc publicar uma soluo, o manifesto do aplicativo incorporado no aponta de
documento de soluo para o caminho completo da manifesto de implantao. Se voc
relanamento os arquivos de soluo para outro local, dever atualizar o manifesto do aplicativo
incorporado para apontar para a nova localizao da manifesto de implantao. Voc tambm
deve atualizar a manifesto de implantao e o manifesto do aplicativo externo para apontar para
os novos locais de arquivo.
Atualizando o manifesto Application incorporados
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.
2.
3.
using Microsoft.VisualStudio.Tools.Applications.Runtime;
4.
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#
Visual C# Consolidado
137
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.
2.
3.
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.
2.
3.
4.
Agora que voc tiver editado os manifestos, voc est pronto para copiar os arquivos de soluo
para o servidor.
Visual C# Consolidado
138
2.
3.
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:.
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:.
Visual C# Consolidado
139
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 prrequisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
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.
Visual C# Consolidado
140
1.
2.
4.
5.
Saia do Excel.
2.
3.
No painel Project types, expanda Other Project types e selecione Setup and
Deployment.
4.
5.
6.
Clique em OK.
O projeto instalao aparece no Solution Explorer. Por padro, o arquivo que voc ir
criar usando este projeto instalao Windows Installer inclui uma caixa de dilogo que
permite ao usurio final que especifique o local de instalao da soluo. Para obter mais
informaes, consulte Caixa de dilogo interface do usurio da pasta de instalao.
Adicionar o pasta de trabalho e assembly da soluo para o Project da instalao
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.
2.
3.
4.
5.
6.
7.
Clique em OK.
Visual C# Consolidado
141
9.
Clique com boto direito mouse cada dependncia, exceto para Microsoft .NET
Framework, e clique Exclude no menu de atalho.
Criar um projeto de ao personalizada
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.
2.
3.
4.
5.
6.
Clique em OK.
O novo projeto aparece na Solution Explorer.
7.
No Solution Explorer, clique com o boto direito do mouse Class1.vb ou Class1.cs sob
o ExcelCustomAction projeto e, em seguida, clique em Delete. Este arquivo
desnecessrio para essa explicao passo a passo.
Criar uma ao personalizada que salvas o manifesto de aplicativo
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.
2.
3.
4.
Visual C# Consolidado
142
5.
6.
using Microsoft.VisualStudio.Tools.Applications.Runtime;
7.
// Override the Install method to update the customization location // in the application
manifest. public override void Install(System.Collections.IDictionary stateSaver) {
UpdateApplicationManifest(); base.Install(stateSaver); } // Update the application manifest
according to the the install location. private void UpdateApplicationManifest() { // Get the
parameters passed to the task. string targetDir = this.Context.Parameters["targetdir"]; string
documentName = this.Context.Parameters["documentname"]; string assemblyName =
this.Context.Parameters["assemblyname"]; // Get the application manifest from the document.
string documentPath = System.IO.Path.Combine(targetDir, documentName); ServerDocument
serverDocument1 = new ServerDocument(documentPath, System.IO.FileAccess.ReadWrite); try
{ AppManifest appManifest1 = serverDocument1.AppManifest; string assemblyPath =
System.IO.Path.Combine(targetDir, assemblyName); appManifest1.Dependency.AssemblyPath
= assemblyPath; serverDocument1.Save(); } finally { if (serverDocument1 != null) {
serverDocument1.Close(); } } }
8.
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.
4.
5.
6.
7.
8.
9.
Visual C# Consolidado
143
2.
3.
4.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
144
1.
2.
3.
Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
5.
6.
Clique em Save.
7.
8.
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.
2.
3.
4.
5.
Clique em Yes.
6.
Voltar para Visual Studio, e pressione F5 para executar o projeto meu teste de segurana.
Visual C# Consolidado
145
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.
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.
2.
3.
4.
5.
6.
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.
2.
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.
7.
Clique em Next.
8.
9.
Visual C# Consolidado
146
Agora voc pode testar sua pasta de trabalho para certificar-se que seu cdigo seja executado
quando a pasta de trabalho aberta.
2.
2.
Na guia Common Controls Da Clique no controle que voc deseja adicionar e arrasteo para o documento. o Toolbox,
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED("WinForms.Control.Host","")
no Formula Bar. Este texto necessrio e no devem ser excludos.
2.
3.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED("WinForms.Control.Host","")
no Formula Bar. Este texto necessrio e no devem ser excludos.
Visual C# Consolidado
147
Para adicionar um controle Windows Forms para o documento clicando uma nica vez
sobre o controle
1.
2.
3.
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.
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.
2.
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.
Voc tambm pode adicionar controles Windows Forms dinamicamente a um documento em
tempo de execuo usando os mtodos auxiliar fornecidos pelo Microsoft Visual Studio 2005
Tools for the Microsoft Office System. No Exemplo abaixo, clula A1 de um projeto de aplicativo
Excel. adicionado um Button Para obter informaes sobre como adicionar outros controles
Windows Forms, consulte Adicionar controles a documentos do Office em tempo de execuo.
Adicionando controles em tempo de execuo
Visual C# Consolidado
148
Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
this.Controls.AddNamedRange(this.get_Range("A1", missing), "NamedRange1");
2.
C#
this.Application.Calculate();
Compilando o cdigo
Este cdigo deve ser colocado em uma classe folha, no na classe ThisWorkbook.
Visual C# Consolidado
149
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."; }
Visual C# Consolidado
150
// Create the command bar variables at the class level. Office.CommandBar commandBar;
Office.CommandBarButton firstButton; Office.CommandBarButton secondButton; private void
ThisDocument_Startup(object sender, System.EventArgs e) { AddToolbar(); } private void
AddToolbar() { try { commandBar = Application.CommandBars["Test"]; } catch
(ArgumentException e) { // Toolbar named Test does not exist so we should create it. } if
(commandBar == null) { // Add a commandbar named Test. commandBar =
Application.CommandBars.Add("Test", 1, missing, true); } try { // Add a button to the
command bar and an event handler. firstButton =
(Office.CommandBarButton)commandBar.Controls.Add(1, missing, missing, missing, missing);
firstButton.Style = Office.MsoButtonStyle.msoButtonCaption; firstButton.Caption = "button 1";
firstButton.Tag = "button1"; firstButton.Click += new
Office._CommandBarButtonEvents_ClickEventHandler(ButtonClick); // Add a second button
to the command bar and an event handler. secondButton =
(Office.CommandBarButton)commandBar.Controls.Add(1, missing, missing, missing, missing);
secondButton.Style = Office.MsoButtonStyle.msoButtonCaption; secondButton.Caption =
"button 2"; secondButton.Tag = "button2"; secondButton.Click += new
Office._CommandBarButtonEvents_ClickEventHandler(ButtonClick); commandBar.Visible =
true; } catch (ArgumentException e) { MessageBox.Show(e.Message); } } // Handles the event
when a button on the new toolbar is clicked. private void
ButtonClick(Office.CommandBarButton ctrl, ref bool cancel) { MessageBox.Show("You clicked:
" + ctrl.Caption); }
Visual C# Consolidado
151
DESENVOLVIMENTO
CORPORATIVO (VISUAL C#)
Voc pode programar em C# para desenvolver uma variedade de aplicativos corporativos,
executando em arquiteturas baseadas em servidor e produtos de servidor. A seo Servidores e
desenvolvimento da empresa da biblioteca MSDN contm a orientao de arquitetura,
informaes de padres e prticas, e documentao e artigos tcnicos sobre o uso dos produtos
de servidor Microsoft, incluindo:
Microsoft MapPoint
Visual C# Consolidado
152
Para mais informaes, consulte Windows Media Encoder 9 Series SDK no MSDN Online. O
tpico Programao C# descreve quais referncias incluir ao trabalhar em C#.
O Windows Media Server
O Microsoft Windows Media Services 9 Series Software Development Kit (SDK) uma
poderosa Application Programming Interface (API) baseada em automao projetada para
qualquer pessoa que deseje desenvolver um aplicativo Windows Media Services 9 Series. Voc
pode usar este SDK no C# programaticamente para gerenciar um servidor do Windows Media
para enviar contedo de mdia digital a clientes em redes que permitem unicast e multicast. Para
mais informaes, consulte Windows Media Services 9 Series SDK.
Visual C# Consolidado
153
Visual C# Consolidado
154
Recurso
Consulte o tpico
Classe
Interface
struct (Referncia do
C#)
Matrizes (Guia de
programao do C#)
Indexadores (guia de
programao C#)
bool
Visual C# Consolidado
155
long
struct
Classe
(referncia) C# ref
Fora (referncia C#)
Alternar
Delegar
Base
Consulte tambm os
exemplos para
Substituir
Ocultando mtodo: C++ oferece suporte a implcito " ocultar " do mtodo
atravs de herana. Em C#, voc deve usar o new modificador para
explicitamente ocultar um membros herdadas
Novo
Directives
Preprocessor C#
A manipulao de exceo e exceo acionada.: C# fornece palavrachave finally para fornecer para cdigo que deve ser executado
independentemente de se
& Operator
Operador |
Operador ^
TypeOf
extern
Palavra-chave static: em C++, static pode ser usado tanto para declarar
entidades nvel de classe e para declarar tipos que so especficos para
um mdulo. No C#, static s usada para declarar entidades nvel de
classe.
static
Main() e argumentos
de linha de comando
(Guia de programao
C#)
No seguro
Operadores C#
string
String
foreach, em
Visual C# Consolidado
156
Estrutura geral de um
programa C#
Usando
Viso Geral Sobre
Metadados
Mtodos (Guia de
programao do C#)
Coleta de Lixo
Destructors
Instruo using
(Referncia do C#)
Construtores da
instncia
Tabela de valores
padro
Tour linguagem C#
Formatao numrica
tabela de resultados
Compilador CS0241 de
erro
Generics em C#
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#).
Visual C# Consolidado
157
GUIA DE PROGRAMAO C#
Esta seo fornece informaes detalhadas sobre vrios recursos chaves da linguagem C#
acessveis atravs do .NET Framework.
Sees de idioma
Em um programa C#
Main() e argumentos de linha de comando (Guia de programao C#)
Tipos de dados (guia de programao C#)
Matrizes (Guia de programao do C#)
Seqncias (guia de programao C#)
Instrues, expresses, e operadores (guia de programao C#)
Objetos, classes e Structs (guia de programao C#)
Propriedades (Guia de programao do C#)
Indexadores (guia de programao C#)
Representantes (guia de programao C#)
Eventos (Guia de programao do C#)
Generics (Guia de programao C#)
Iterators (guia de programao C#)
Namespaces (Guia de programao C#)
Tipos anulveis (guia de programao C#)
No seguro cdigo e ponteiros (guia de programao C#)
Comentrios de documentao XML (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
Guia de Programao C#
Referncia C#
Exemplos do Visual C#
Especificao da Linguagem C#
Para obter mais informaes, consulte as sees a seguir no Especificao da Linguagem C#:
Introduo 1
Visual C# Consolidado
158
CSharp
static void Main() { //... }
Podendo tambm retornar um int:
CSharp
static int Main() { //... return 0; }
Com ambos os tipos de retorno, pode levar argumentos:
CSharp
static void Main(string[] args) { //... }
OuCSharp
static int Main(string[] args) { //... return 0; }
O parmetro do mtodo Main uma matriz (array) de string que representa os argumentos de
linha de comando usados para chamar o programa. Observe que, diferentemente C++, essa
matriz no inclui o nome do arquivo executvel (EXE).
Para obter mais informaes sobre como usar argumentos de linha de comando, consulte o
Exemplo em Main() e argumentos de linha de comando (Guia de programao C#) e COMO: Criar
e usar DLLs em C# (Guia de programao C#).
Entrada e Sada
Visual C# Consolidado
159
Crie o arquivo de origem usando qualquer editor de texto e salv-lo usando um nome,
como Hello.cs. Arquivos cdigo fonte C# usam a extenso .cs.
Para chamar o compilador, digite o comando:
csc Hello.cs
Se seu programa no contm quaisquer erros de compilao, um arquivo chamado Hello.exe
ser criado.
Hello
Para obter mais informaes sobre o compilador C# e suas opes, consulte Opes do
compilador C#.
Visual C# Consolidado
160
CSharp
class TestClass { static void Main(string[] args) { // Display the number of command line
arguments: System.Console.WriteLine(args.Length); } }
Viso Geral
Ele declarado dentro de uma classe ou estrutura. Ele deve ser esttico (static) e ele no deve
ser pblico. (No Exemplo acima, como no especificamos um modificador de acesso
explicitamente, ele recebe o modificador de acesso padro, que (private) particular).
Parmetros podem ser lidos como argumentos de linha de comando indexados a partir do
zero.
Visual C# Consolidado
161
C#
public class Functions { public static long Factorial(int n) { if (n < 0) { return -1; } //error result
- undefined if (n > 256) { return -2; } //error result - input is too big if (n == 0) { return 1; } //
Calculate the factorial iteratively rather than recursively: long tempResult = 1; for (int i = 1; i <=
n; i++) { tempResult *= i; } return tempResult; } }
C#
class MainClass { static int Main(string[] args) { // Test if input arguments were supplied: if
(args.Length == 0) { System.Console.WriteLine("Please enter a numeric argument.");
System.Console.WriteLine("Usage: Factorial <num>"); return 1; } try { // Convert the input
arguments to numbers: int num = int.Parse(args[0]); System.Console.WriteLine("The Factorial
of {0} is {1}.", num, Functions.Factorial(num)); return 0; } catch (System.FormatException) {
System.Console.WriteLine("Please enter a numeric argument.");
System.Console.WriteLine("Usage: Factorial <num>"); return 1; } } }
Sada
The Factorial of 3 is 6.
Comentrios
A seguir esto dois executa de Exemplo de programa assumindo o que Factorial.exe o nome do
programa.
Execute # 1:
Insira a seguinte linha de comando:
Factorial 10
Voc obtm o seguinte resultado:
The Factorial of 10 is 3628800.
Execute # 2:
Insira a seguinte linha de comando:
Factorial
Voc obtm o seguinte resultado:
Please enter a numeric argument.
Usage: Factorial <num>
executable.exe a b c
"a"
"b"
"c"
" um "
" dois "
Visual C# Consolidado
162
Sada
parameter count = 3 Arg[0] = [a] Arg[1] = [b] Arg[2] = [c]
Sada
Number of command line parameters = 3 John Paul Mary
Visual C# Consolidado
163
ERRORLEVEL
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:.
Em seguida, um arquivo em lotes usado para chamar o executvel resultante do Exemplo de
cdigo anterior. Porque o cdigo retorna zero, o arquivo em lotes ir reportar xito, mas se o
cdigo anterior alterado para retornar um valor diferente de zero, e ento re-Compiled,
subseqente execuo do arquivo em lotes indicar falha.
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
Tipos de referncia (referncia C#) que armazenam referncias para os dados reais.
Sees relacionadas
Para obter mais informaes sobre tipos, consulte as sees a seguir no Especificao da
Linguagem C#:
Visual C# Consolidado
164
MATRIZES (GUIA DE
PROGRAMAO DO C#)
Uma matriz uma estrutura de dados que contm um nmero de variveis do mesmo tipo.
Matrizes so declaradas com um tipo:
type[] arrayName;
Os exemplos a seguir criar matrizes dimensional nica, multidimensional, e denteadas:
C#
class TestArraysClass { static void Main() { // Declare a single-dimensional array int[] array1 =
new int[5]; // Declare and set array element values int[] array2 = new int[] { 1, 3, 5, 7, 9 }; //
Alternative syntax int[] array3 = { 1, 2, 3, 4, 5, 6 }; // Declare a two dimensional array int[,]
multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values int[,]
multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; // Declare a jagged array int[][] jaggedArray
= new int[6][]; // Set the values of the first array in the jagged array structure jaggedArray[0] =
new int[4] { 1, 2, 3, 4 }; } }
Viso geral de matriz
Uma matriz tem as seguintes propriedades:
Uma matriz denteada uma matriz de matrizes, e portanto seus elementos so tipos de
referncia e so inicializados para null.
Matrizes forem zero indexado: uma matriz com n elementos indexada a partir 0 para n-1.
Tipos de matriz so Tipos de referncia derivados do tipo Array base abstrato. Desde isso
e IEnumerable implementa IEnumerable Tipo, voc pode utilizar foreach iterao em todas as
matrizes em C#.
Visual C# Consolidado
165
Sada
The array has 2 dimensions.
Visual C# Consolidado
166
Voc tambm pode inicializar e passa uma nova matriz em uma etapa Por exemplo:
C#
PrintArray(new int[] { 1, 3, 5, 7, 9 });
Exemplo 1
Descrio
No Exemplo a seguir, a uma matriz de seqncia de caracteres inicializado e passado como um
parmetro para o PrintArray mtodo, onde seus elementos so exibidos:
Cdigo
C#
class ArrayClass { static void PrintArray(string[] arr) { for (int i = 0; i < arr.Length; i++) {
System.Console.Write(arr[i] + "{0}", i < arr.Length - 1 ? " " : ""); } System.Console.WriteLine();
} static void Main() { // Declare and initialize an array: string[] weekDays = new string[] {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; // Pass the array as a parameter:
PrintArray(weekDays); } }
Sada 1
Sun Mon Tue Wed Thu Fri Sat
Passando Matrizes multidimensionais como parmetros
Voc pode passar uma matriz multidimensional inicializado para um mtodo. Por exemplo, matriz
dimensional for theArray Um dois:
C#
PrintArray(theArray);
O mtodo chamado na linha acima poderia ser definido como:
C#
void PrintArray(int[,] arr) { // method code }
Voc tambm pode inicializar e passa uma nova matriz em uma etapa Por exemplo:
C#
PrintArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });
Exemplo 2
Descrio
Neste exemplo, uma matriz bidimensional inicializado e passada para o PrintArray mtodo,
onde seus elementos so exibidos.
Cdigo
C#
class ArrayClass2D { static void PrintArray(int[,] arr) { // Display the array elements: for (int i =
0; i < 4; i++) { for (int j = 0; j < 2; j++) { System.Console.WriteLine("Element({0},{1})={2}", i, j,
arr[i, j]); } } } static void Main() { // Pass the array as a parameter: PrintArray(new int[,] { { 1, 2
}, { 3, 4 }, { 5, 6 }, { 7, 8 } }); } }
Sada 2
Element(0,0)=1
Element(0,1)=2
Element(1,0)=3
Element(1,1)=4
Element(2,0)=5
Visual C# Consolidado
167
Element(2,1)=6
Element(3,0)=7
Element(3,1)=8
Visual C# Consolidado
168
Exemplo matrizes
Download sample
Este Exemplo descreve e mostra como matrizes funcionam em C#. Para obter mais informaes,
consulte Matrizes (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
169
Escape caracteres
Escape caracteres, como " \n " (nova linha) e " \t " (guia) pode ser includas em seqncias. A
linha:
C#
string hello = "Hello\nWorld!";
o mesmo que:
Hello
World!
Se voc desejar incluir uma barra com verses anteriores, ele deve ser precedido com outro
invertida. A seqncia a seguir:
C#
string filePath = "\\\\My Documents\\";
realmente o mesmo que:
\\My Documents\
O smbolo @
O @ Smbolo informa o Construtor de seqncia para ignorar caracteres de escape e quebras de
linha. As seguintes seqncias duas so portanto idnticas:
C#
string p1 = "\\\\My Documents\\My Files\\"; string p2 = @"\\My Documents\My Files\";
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"
Visual C# Consolidado
170
Alterando a Caixa
Para alterar as letras em uma seqncia para superior ou minsculas, use ToUpper() ou
ToLower(), como isso:
C#
string s6 = "Battle of Hastings, 1066"; System.Console.WriteLine(s6.ToUpper()); // outputs
"BATTLE OF HASTINGS 1066" System.Console.WriteLine(s6.ToLower()); // outputs "battle of
hastings 1066"
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
Visual C# Consolidado
171
por exemplo, um caractere de espao, e retorna uma matriz de substrings. Voc pode acessar
essa matriz com foreach, como este:
C#
char[] delimit = new char[] { ' ' }; string s10 = "The cat sat on the mat."; foreach (string substr in
s10.Split(delimit)) { System.Console.WriteLine(substr); }
Esse cdigo sadas cada palavra em uma linha separada, como este:
The
cat
sat
on
the
mat.
Usando StringBuilder
A StringBuilder classe cria um buffer de seqncia que oferece melhor desempenho se seu
programa executa uma grande quantidade de manipulao de seqncia de caracteres. A
StringBuilder seqncia tambm permite que voc para reatribuir caracteres individuais, algo
que o tipo de dados de seqncia interna no oferece suporte. Esse cdigo, por exemplo, altera o
contedo de uma seqncia sem criar uma nova seqncia:
C#
System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet"); sb[0] = 'C';
System.Console.WriteLine(sb.ToString()); System.Console.ReadLine();
Neste exemplo, um StringBuilder objeto usado para criar uma seqncia de um conjunto de
tipos numricos:
C#
class TestStringBuilder { static void Main() { System.Text.StringBuilder sb = new
System.Text.StringBuilder(); // Create a string composed of numbers 0 - 9 for (int i = 0; i < 10;
i++) { sb.Append(i.ToString()); } System.Console.WriteLine(sb); // displays 0123456789 //
Copy one character of the string (not possible with a System.String) sb[0] = sb[9];
System.Console.WriteLine(sb); // displays 9123456789 } }
Visual C# Consolidado
172
ESPECIFICAO DA LINGUAGEM
C#
As verses 1.2 e 2.0 das especificaes da linguagem C# so a fonte autorizada de gramtica e
sintaxe C#. Elas contm informaes detalhadas sobre todos os aspectos da linguagem, incluindo
muitos pontos no abordados na documentao do produto Visual C#.
A especificao 1.2 discute recursos que foram adicionados para a linguagem antes do Visual C#
2005 e a especificao 2.0 discute recursos que foram adicionados para o Visual C# 2005.
As especificaes da linguagem C# esto disponveis no formato Microsoft Word nos seguintes
locais:
No MSDN Online em
http://msdn.microsoft.com/vcsharp/Programming/Language/default.aspx
Visual C# Consolidado
173
REFERNCIA C#
Esta seo fornece material de referncia para as palavras-chave do C#, operadores, erros de
compilador e avisos.
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.
abstract
event
new
struct
as
explicit
null
switch
base
extern
object
this
bool
false
operator
throw
break
finally
out
true
byte
fixed
override
try
case
foat
params
typeof
catch
for
private
uint
char
foreach
protected
uong
checked
goto
public
unchecked
class
if
readonly
unsafe
const
implicit
ref
ushort
continue
in
return
using
decimal
int
sbyte
virtual
default
interface
sealed
volatile
delegate
internal
short
void
do
is
sizeof
while
double
ock
stackaloc
else
ong
static
enum
namespace string
Palavras-chave contextuais
Obter
parcial
Definir
Valor
Onde
Produzir
Palavra-chave abstract
O modificador abstract pode utilizar com classes, mtodos, propriedades, indicadores e
eventos.
Visual C# Consolidado
174
Utilize o modificador abstract em uma declarao de classe se deseja indicar que a classe s
deve atuar como classe-base de outras classes.
As classes do tipo abstract apresentam as seguintes caractersticas:
No possvel modificar uma classe abstrata com o modificador sealed, o qual significa que
a classe no pode heredar.
Uma classe no abstrata derivada de uma classe abstrata deve incluir implementaes
reales de todos os descritores de acesso e mtodos abstratos herdados.
Utilize o modificador abstract em uma declarao de mtodo ou propriedade para indicar que o
mtodo ou a propriedade no contm implementao.
Os mtodos abstratos apresentam as seguintes caractersticas:
Uma propriedade abstrata herdada pode substituir em uma classe derivada se se inclui uma
declarao de propriedade que use o modificador override.
Uma classe abstrata deve proporcionar implementaes para todos os membros da interface.
Uma classe abstrata que implementa uma interface poderia assinalar os mtodos da interface os
mtodos abstratos. Por exemplo:
interface I
{
void M();
}
abstract class C: I
{
public abstract void M();
}
Exemplo
Neste exemplo, a classe MyDerivedC derivada de uma classe abstrata MyBaseC. A classe
abstrata contm um mtodo abstrato, MyMethod(), e duas propriedades abstratas, GetX() e
GetY().
// abstract_keyword.cs
// Abstract Classes
Visual C# Consolidado
175
using System;
abstract class MyBaseC // Abstract class
{
protected int x = 100;
protected int e = 150;
public abstract void MyMethod(); // Abstract method
public abstract int GetX // Abstract property
{
get;
}
public abstract int GetY // Abstract property
{
get;
}
}
class MyDerivedC: MyBaseC
{
public override void MyMethod()
{
x++;
y++;
}
public override int GetX // overriding property
{
get
{
return x+10;
}
}
public override int GetY // overriding property
{
get
{
return y+10;
}
}
public static void Main()
{
MyDerivedC mC = new MyDerivedC();
mC.MyMethod();
Console.WriteLine("x = {0}, e = {1}", mC.GetX, mC.GetY);
}
}
Resultado
x = 111, e = 161
No Exemplo anterior, se intenta criar uma instancia da classe abstrata mediante uma instruo
como a seguinte:
MyBaseC mC1 = new MyBaseC(); // Erro
obter a seguinte mensagem de erro:
Visual C# Consolidado
176
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)
abstract
new
override
static
virtual
extern
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.
Visual C# Consolidado
177
c. Os mtodos que chaman ao evento. Estes mtodos podem ser reemplazos de cierta
funcionalidad da classe-base.
Esta classe define ou evento.
2.
Defina ao menos uma classe que conecte os mtodos com o evento. Cada uma de estas
classes incluir o seguinte:
3.
Utilize ou evento:
Crie um objeto da classe que contm a declarao do 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;
public void FireAway()
{
if (MyEvent != null)
MyEvent();
}
}
public class MainClass
{
static private void f()
{
Console.WriteLine("This is called whem the event fires.");
}
static public void Main ()
{
I i = new MyClass();
i.MyEvent += new MyDelegate(f);
i.FireAway();
Visual C# Consolidado
178
}
}
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;
public delegate void MyDelegate1(int i);
public delegate void MyDelegate2(string s);
public delegate void MyDelegate3(int i, object o);
public delegate void MyDelegate4();
public class PropertyEventsSample
{
private Hashtable eventTable = new Hashtable();
public event MyDelegate1 Event1
{
add
{
eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] + value;
}
remove
{
eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] - value;
}
}
public event MyDelegate1 Event2
{
add
{
eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] + value;
}
remove
{
eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] - value;
}
}
public event MyDelegate2 Event3
{
add
{
eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] + value;
}
remove
{
eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] - value;
}
Visual C# Consolidado
179
}
public event MyDelegate3 Event4
{
add
{
eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] + value;
}
remove
{
eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] - value;
}
}
public event MyDelegate3 Event5
{
add
{
eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] + value;
}
remove
{
eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] - value;
}
}
public event MyDelegate4 Event6
{
add
{
eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] + value;
}
remove
{
eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] - value;
}
}
}
public class MyClass
{
public static void Main()
{
}
}
Exemplo 3
Outro uso das propriedades de eventos contempla o caso no que se implementam duas
interfaces, cada uma com um evento do mesmo nome. Nesse caso, deve utilizar uma propriedade
de evento de implementao explcita:
// event_keyword3.cs
using System;
public delegate void MyDelegate1();
public interface I1
Visual C# Consolidado
180
{
event MyDelegate1 MyEvent;
}
public delegate int MyDelegate2(string s);
public interface I2
{
event MyDelegate2 MyEvent;
}
public class ExplicitEventsSample: I1, I2
{
public event MyDelegate1 MyEvent; // normal implementation of I1.MyEvent.
event MyDelegate2 I2.MyEvent // explicit implementation of I2.MyEvent
{
add
{
MyEvent2Storage += value;
}
remove
{
MyEvent2Storage -= value;
}
}
private MyDelegate2 MyEvent2Storage; // underlying storage for I2.MyEvent.
private void FireEvents()
{
if (MyEvent != null)
MyEvent();
if (MyEvent2Storage != null)
MyEvent2Storage("helo");
}
}
public class MyClass
{
public static void Main()
{
}
}
Palavra-chave new
Em C#, a palavra-chave new pode utilizar como operador ou como modificador.
base.
OPERADOR NEW
O operador new utilizado para criar objetos e invocar construtores, por exemplo:
Class1 MyClass = new Class1();
Visual C# Consolidado
181
Tambm utilizado com o fim de invocar o construtor predeterminado para tipos de valores, por
exemplo:
int myInt = new int();
Na instruo anterior se inicializa myInt com o valor 0, que ou predeterminado para o tipo int.
Essa instruo tno mesmo efeito que:
int myInt = 0;
Lembre que um erro declarar um construtor predeterminado para um tipo struct, j que todos os
tipos de valores posuem implcitamente um construtor pblico predeterminado. No obstante, se
podem se declarar construtores com parmetros para um tipo struct.
Os objetos do tipo valor, tais como as estruturas, so criados na pilha, enquanto que os objetos do
tipo referencia, tais como as classes, so criados na pilha.
O operador new no pode sobrecargar.
Se o operador new fala na assinalao de memoria, iniciar a exceo
OutOfMemoryException.
Exemplo
No seguinte exemplo, so criados e se inicializam, mediante o operador new, um objeto struct e
um objeto class y, a continuao, se lhes assinalam valores. Os valores predeterminados e
assinalados se mostram em tela.
// cs_operator_new.cs
// The new operator
using System;
class NewTest
{
struct MyStruct
{
public int x;
public int y;
public MyStruct (int x, int y)
{
this.x = x;
this.y = y;
}
}
class MyClass
{
public string name;
public int id;
public MyClass ()
{
}
Visual C# Consolidado
182
Resultado
Default values:
Struct members: 0, 0
Class members: , 0
Assigned values:
Struct members: 10, 20
Visual C# Consolidado
183
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 modifiqueo 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 classebase com a mesma firma.
incorreto utilizar simultneamente new e override no mesmo membro.
Visual C# Consolidado
184
Resultado
100
55
22
Se elimina o modificador new, ou programa seguir compilndose e executndose, pois se obter a
advertencia:
The keyword new is required on 'MyDerivedC.x' because it hides
inherited member 'MyBaseC.x'.
Tambm pode utilizar o modificador new para modificar um tipo anidado, Se o tipo anidado est
ocultando outro tipo, como se mostra no seguinte exemplo.
Exemplo
Neste exemplo, uma classe anidada, MyClass, oculta uma classe com o mesmo mome na classebase. o Exemplo demostra o uso do modificador new para eliminar ou mensagem dadvertencia,
assim como ou acesso a os membros da classe oculta mediante sus nomes completos.
// cs_modifer_new_nested.cs
// Using the new modifier with nested types
using System;
public class MyBaseC
{
public class MyClass
{
public int x = 200;
public int y;
Visual C# Consolidado
185
}
}
public class MyDerivedC : MyBaseC
{
new public class MyClass // nested type hiding the base type members
{
public int x = 100;
public int y;
public int z;
}
public static void Main()
{
// Criating object from the overlapping class:
MyClass S1 = new MyClass();
// Criating object from the hiddem class:
MyBaseC.MyClass S2 = new MyBaseC.MyClass();
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:
[attributes] [modifiers] s t r u c t identifier [: interfaces] body [; ]
de onde:
attributes (opcional)
Informao declarativa adicional. Para obter mais informao sobre os atributos e as classes
datributo, veja 17. Atributos.
modifiers (opcional)
Visual C# Consolidado
186
Lista que contm as interfaces implementadas pela estrutura, todas separadas por comas.
body
Comentarios
O tipo struct adequado para representar objetos de poca complejidad, como puntos,
rectnguos e cores. Mas possvel representar um ponto como uma classe, uma estrutura mais
eficaz em algunos casos. Por exemplo, se se declara uma matriz de 1000 objetos Point, se deber
assinalar memoria adicional para fazer referencia a cada objeto. Neste caso, a estrutura apresenta
um menor costo.
um erro declarar um construtor predeterminado (sin parmetros) para uma estrutura. Siempre
existe um construtor predeterminado que inicializa os membros da estrutura com sus valores
predeterminados.
um erro inicializar um campo de instancia de uma estrutura.
Quando se cria um objeto struct mediante o operador new, se cria e se chama ao construtor
apropriada. A diferena das classes, podem se criar instancias das estruturas sem utilizar o
operador new. Se no utilizado new, os campos permanecero sem assinalar e ou objeto no
se poder utilizar at haver inicializado todos os campos.
A diferena das classes, para as estruturas no existe herana. uma estrutura no pode heredar
de outra estrutura ou classe, nem pode ser a base de uma classe. Sem embargo, as estruturas
herdam da classe-base Object. uma estrutura pode implementar interfaces do mesmo modo que
as classes.
A diferena de C++, no pode declarar uma classe mediante a palavra-chave struct. Em C#, as
classes e as estruturas so semnticamente diferentes. uma estrutura um tipo de valor,
enquanto que uma classe um tipo de referencia.
A menos que se necessite semntica de tipos de referencia, o sistema pode processar uma classe
que ocupe menos de 16 bytes de forma mais eficaz como estrutura.
Para obter mais informao sobre estruturas, veja 11. Estruturas e ou Tutorial de estruturas.
Em as extenses administradas para C++, os equivalentes a uma classe do C# e a uma estrutura
do C# so os seguintes:
Extenses administradas
para C++
class
__gc struct
ou
__gc class
struct
__value struct
ou
__value class
C#
Exemplo 1
Este Exemplo mostra a inicializao de um tipo struct mediante construtores predeterminados e
construtores com parmetros.
// keyword_struct.cs
Visual C# Consolidado
187
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;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
class MainClass
{
public static void Main()
{
// Declare an object:
Visual C# Consolidado
188
Point myPoint;
// 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
Visual C# Consolidado
189
{
}
public class IsTest
{
public static void Main()
{
object [] myObjects = new object[6];
myObjects[0] = new MyClass1();
myObjects[1] = new MyClass2();
myObjects[2] = "helo";
myObjects[3] = 123;
myObjects[4] = 123.4;
myObjects[5] = null;
for (int i=0; i<myObjects.Length; ++i)
{
string s = myObjects[i] as string;
Console.Write ("{0}:", i);
if (s != null)
Console.WriteLine ( "'" + s + "'" );
else
Console.WriteLine ( "not a string" );
}
}
}
Resultado
0:not a string
1:not a string
2:'helo'
3:not a string
4:not a string
5:not a string
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
}
}
A diferena da converso implcita, os operadores de converso explcita devem invocarse
mediante uma converso explcita do tipo (cast).
int i;
MyType x = (MyType)i; // int-to-MyType requires cast
Visual C# Consolidado
190
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.
Visual C# Consolidado
191
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 corpo. 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
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
O controle se transfere a uma instruo case especfica segundo o valor desta expresso.
Comentarios
O controle se transfere instruo case cuja constante constant-expression coincide com a
expresso expression. A instruo switch pode incluir qualquer nmero de elementos case,
pois no pode haver dos constantes case com o mesmo valor em uma mesma instruo switch.
A execuo do corpo da instruo empieza na instruo selecionada e contina at que a
instruo de salto jump-statement transfere o controle fora do corpo case.
Observe que necessrio colocar jump-statement ao final de cada boque, incluido ou ltimo
boque, j seja uma instruo caSe o uma instruo default. A diferena da instruo switch
de C++, C# no admite ou paso explcito de uma etiqueta case a outra. Se o deseja, pode utilizar
goto a uma etiqueta caSe o goto default.
Se expression no coincide com nenhuma constante constant-expression, o controle se
transfere s instrues que seguem etiqueta default opcional. Se no existe uma etiqueta
default, o controle se transfere fora da instruo switch.
Exemplo
// statements_switch.cs
using System;
class SwitchTest
{
public static void Main()
{
Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
Console.Write("Please enter your selection: ");
Visual C# Consolidado
192
string s = Console.ReadLine();
int n = int.Parse(s);
int cost = 0;
switch(n)
{
case 1:
cost += 25;
break;
case 2:
cost += 25;
goto case 1;
case 3:
cost += 50;
goto case 1;
default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
if (cost != 0)
Console.WriteLine("Please insert {0} cents.", cost);
Console.WriteLine("Thank you for your business.");
}
}
Entrada
2
Resultados do Exemplo
Coffee sizes: 1=Small 2=Medium 3=Large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.
Descrio do cdigo
No Exemplo anterior, se utilizou uma varivel do tipo integral, n, para os casos da instruo
switch. Observe que tambm pode utilizar a varivel de srie, s, diretamente. Nesse caso, a
estrutura switch pode apresentar a seguinte forma:
switch(s)
{
case "1":
...
case "2":
...
Visual C# Consolidado
193
Palavra-chave base
A palavra-chave base utilizada para obter acesso a os membros da classe-base desde uma
classe derivada:
Visual C# Consolidado
194
E.GetInfo();
}
}
Resultado
Name: John L. Malgraine
SSN: 444-55-6666
Empoyee ID: ABC567EFG
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)");
}
public int GetNum()
{
return num;
}
}
public class MyDerived: MyBase
{
// This construtor will call MyBase.MyBase()
public MyDerived() : base()
{
}
// This construtor will call MyBase.MyBase(int i)
public MyDerived(int i) : base(i)
{
}
public static void Main()
{
MyDerived md = new MyDerived();
MyDerived md1 = new MyDerived(1);
}
}
Visual C# Consolidado
195
Resultado
in MyBase()
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);
public static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox(0, myString, "My Message Box", 0);
}
}
Execuo de Exemplo
Enter your message: Where do you want to go today?
Tras escrever o texto anterior, aparece na pantala um quadro de mensagem com ese texto.
Exemplo
Este Exemplo utiliza dos arquivos, CM.cs e Cmdll.c, para demostrar o uso de extern. o arquivo
C uma DLL externa que se invoca desde ou programa escrito em C#.
Arquivo Cmdll.c
Visual C# Consolidado
196
// cmdll.c
// compile with: /LD /MD
int __declspec(dllexport) MyMethod(int i)
{
return i*10;
}
Arquivo CM.cs
// cm.cs
using System;
using System.Runtime.InteropServices;
public class MyClass
{
[DllImport("Cmdll.dll")]
public static extern int MyMethod(int x);
public static void Main()
{
Console.WriteLine("MyMethod() returns {0}.", MyMethod(5));
}
}
Resultado
MyMethod() returns 50.
Compilao
Para gerar ou proyecto, siga estes pasos:
Compile Cmdll.c como uma DLL mediante a lnea de comandos de Visual C++:
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;
Visual C# Consolidado
197
}
public class MyClass2
{
public static void Main()
{
object a;
a = 1; // an example of boxing
Console.WriteLine(a);
Console.WriteLine(a.GetType());
Console.WriteLine(a.ToString());
Console.WriteLine();
a = new MyClass1 ();
MyClass1 ref_MyClass1;
ref_MyClass1 = (MyClass1)a;
Console.WriteLine(ref_MyClass1.i);
}
}
Resultados
1
System.Int32
1
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;
}
CalcTax(this);
Visual C# Consolidado
198
array[param] = value;
}
}
incorreto fazer referencia a this em um mtodo esttico, em um descritor de acesso a uma
propriedade esttica ou em um inicializador de varivel de uma declarao de campo.
Exemplo
Neste exemplo, this utilizado para obter acesso a os membros da classe Empoyee, name e
alias, que apresentam ambigedad com nomes similares. Tambm utilizado para passar um
objeto ao mtodo CalcTax, o qual pertence a outra classe.
// keywords_this.cs
// this example
using System;
public class Empoyee
{
public string name;
public string alias;
public decimal salary = 3000.00m;
// 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));
}
}
public class MainClass
{
public static void Main()
{
// Criate objects:
Empoyee E1 = new Empoyee ("John M. Trainer", "jtrainer");
// Display results:
E1.printEmpoyee();
}
Visual C# Consolidado
199
Resultado
Name: John M. Trainer
Alias: jtrainer
Taxes: $240.00
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))
Visual C# Consolidado
200
if (Char.IsOwer(c))
Console.WriteLine("The character is owercase.");
else
Console.WriteLine("The character is uppercase.");
else
Console.WriteLine("The character is not an alphabetic character.");
}
}
Entrada
X
Resultados do Exemplo
Enter a character: X
The character is uppercase.
Sucesivas execues de Exemplo podran ter este aspecto:
Enter a character: x
The character is owercase.
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;
Visual C# Consolidado
201
class test
{
public static void Main()
{
bool a = false;
Console.WriteLine( a ? "yes" : "no" );
}
}
Resultado
no
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
unary-operator
Uno de os seguintes: + - ! ~ ++
true false
op-type
operand
binary-operator
Uno de os seguintes:
op-type2
operand2
conv-type-out
conv-type-in
Visual C# Consolidado
202
Comentarios
As dos primeras formas declaram operadores definidos pelo usuario que sobrecarrega operadores
integrados. Tenga em cuenta que no todos os operadores integrados podem sobrecargarse (veja
Operadores sobrecargables). Ao menos uno de os tipos op-type e op-type2 deve ser ou tipo
contenedor (assim, ou tipo do qual membro ou operador). De este modo, por exemplo, se evita
ter que redefinir o operador dadio de inteiros.
As dos ltimas formas declaram operadores de conversin. S uno de os tipos conv-type-in e
conv-type-out deve ser ou tipo contenedor (assim, um operador de converso s pode realizar
converses de seu tipo contenedor a outro tipo, ou de outro tipo a seu tipo contenedor).
Os operadores s podem tomar parmetros de valor, no parmetros ref ou out.
Qualquer declarao de operador pode estar precedida por uma lista opcional de atributos.
Exemplo
A continuao, se mostra uma classe muy simplificada para nmeros racionales. Sobrecarga os
operadores + e * para implementar a adio e multiplicao de nmeros fraccionarios, e tambm
proporciona um operador que convierte fraces em nmeros reales do tipo double.
// cs_keyword_operator.cs
using System;
class Fraction
{
int num, den;
public Fraction(int num, int den)
{
this.num = num;
this.dem = den;
}
// 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);
}
// define operator double
public static implicit operator double(Fraction f)
{
return (double)f.num / f.den;
}
}
class Test
{
public static void Main()
{
Fraction a = new Fraction(1, 2);
Fraction b = new Fraction(3, 7);
Visual C# Consolidado
203
Resultado
0.880952380952381
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());
}
Console.Write("The string s is null"); // not executed
}
}
Resultado
Se produza a exceo seguinte:
System.ArgumentNullException
Visual C# Consolidado
204
Palavra-chave break
A instruo break permite terminar a instruo switch ou o lao envolvente em os quais
aparece. o controle se transfere instruo que sigue instruo terminada, se existe alguna. A
instruo apresenta a seguinte forma:
break;
Exemplo
Neste exemplo, a instruo condicional contm um contador preparado para contar de 1 a 100;
sem embargo, a instruo break termina ou lao tras 4 iteraes.
// statements_break.cs
using System;
class BreakTest
{
public static void Main()
{
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
}
}
Resultado
1
2
3
4
Exemplo
Este Exemplo mostra o uso de break em uma instruo switch.
// statements_break2.cs
// break and switch
using System;
class Switch
{
public static void Main()
{
Console.Write("Enter your selection (1, 2, or 3): ");
string s = Console.ReadLine();
int n = Int32.Parse(s);
switch(n)
{
case 1:
Console.WriteLine("Current value is {0}", 1);
break;
case 2:
Console.WriteLine("Current value is {0}", 2);
break;
Visual C# Consolidado
205
case 3:
Console.WriteLine("Current value is {0}", 3);
break;
default:
Console.WriteLine("Sorry, invalid selection.");
break;
}
}
}
Entrada
1
Resultados do Exemplo
Enter your selection (1, 2, or 3): 1
Current value is 1
Se se escreveu 4, ou resultado sera:
Enter your selection (1, 2, or 3): 4
Sorry, invalid selection.
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
finally-bock
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;
Visual C# Consolidado
206
try
{
// Invalid conversion; ou contains a string not an int
i = (int) o;
}
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
Visual C# Consolidado
207
// cs_out.cs
using System;
public class MyClass
{
public static int TestOut(out char i)
{
i = 'b';
return -1;
}
public static void Main()
{
char i; // varivel need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
}
}
Resultado
-1
b
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
Visual C# Consolidado
208
{
public static void Main()
{
bool a = true;
Console.WriteLine( a ? "yes" : "no" );
}
}
Resultado
yes
Palavra-chave byte
A palavra-chave byte denota um tipo integral que armazena valores segundo se indica na taba
seguinte.
Tipo
Intervalo
Tamanho
Tipo do .NET
Framework
byte
0 a 255
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;
Visual C# Consolidado
209
Assim mesmo, no existe converso implcita de tipos de ponto flutuante a tipo byte. Por
exemplo, a instruo seguinte gerar um erro de compilao, a menos que se utilize uma
converso explcita:
byte x = 3.0;
// Erro: no implicit conversion from double
byte e = (byte)3.0; // OK: explicit conversion
Para chamar os mtodos sobrecarregados, deve se utilizar uma converso explcita de tipos.
Considere, por exemplo, os dos seguintes mtodos sobrecarregados que utilizam parmetros do
tipo byte e int:
public static void MyMethod(int i) {}
public static void MyMethod(byte b) {}
Se utilizada a converso ao tipo byte, se garante a chamada ao tipo correto; por exemplo:
MyMethod(5);
// Calling the method with the int parameter
MyMethod((byte)5); // Calling the method with the byte parameter
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.
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
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:
Visual C# Consolidado
210
Resultado
25 6
Visual C# Consolidado
211
Palavra-chave override
Utilize o modificador override para modificar um mtodo, uma propiedad, um indicador ou um
evento. Os mtodos de reemplazo proporcionam uma nueva implementao de um membro
herdado de uma classe-base. ou mtodo substitudo por uma declarao override se conhece
como mtodo base reemplazado. ou mtodo base substitudo deve ter a mesma firma que o
mtodo de reemplazo.
No pode substituir um mtodo esttico ou no virtual. ou mtodo base substitudo deve ser
virtual, abstract u override.
Uma declarao override no pode cambiar a accesibilidad do mtodo virtual. Tanto ou mtodo de
reemplazo como ou mtodo virtual devem ter o mesmo modificador de nivo de acesso .
No podem se utilizar os seguintes modificadores para modificar um mtodo de reemplazo:
new
static
virtual
abstract
Visual C# Consolidado
212
Resultado
Area of Square = 27.04
Area of Cube = 162.24
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
Comentarios
Visual C# Consolidado
213
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 ant que as menos especficas.
Se pode utilizar uma instruo throw no bloco catch para voltar a provocar a exceo capturada
pela instruo catch. Por exemplo:
catch (InvalidCastException e)
{
throw (e); // Rethrowing exception e
}
Se deseja voltar a provocar a exceo que est sendo atualmente controlada por uma clusula
catch sem parmetros, use a instruo throw sem argumentos. Por exemplo:
catch
{
throw;
}
Quando estes dentro de um bloco try, inicialice s variveis declaradas em seu interior; caso
contrario, pode provocarse uma exceo ant de que se complete a execuo do boque. Por
exemplo, no seguinte Exemplo de cdigo, a varivel x se inicializa dentro do bloco try. Ao
intentar utilizar a varivel fora do bloco try, na instruo Write(x), se gerar ou seguinte erro do
compilador: Uso de varivel ocal no assinalada.
public static void Main()
{
int x;
try
{
x = 123; // Don't do that.
// ...
}
catch
{
// ...
}
Console.Write(x); // Erro: Use of unassigned ocal varivel 'x'.
}
Visual C# Consolidado
214
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)
{
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)
Visual C# Consolidado
215
{
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:
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
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
Visual C# Consolidado
216
O controle se transfere a uma instruo case especfica segundo o valor desta expresso.
Comentarios
O controle se transfere instruo case cuja constante constant-expression coincide com a
expresso expression. A instruo switch pode incluir qualquer nmero de elementos case,
pois no pode haver dos constantes case com o mesmo valor em uma mesma instruo switch.
A execuo do corpo da instruo empieza na instruo selecionada e contina at que a
instruo de salto jump-statement transfere o controle fora do corpo case.
Observe que necessrio colocar jump-statement ao final de cada boque, incluido ou ltimo
boque, j seja uma instruo caSe o uma instruo default. A diferena da instruo switch
de C++, C# no admite ou paso explcito de uma etiqueta case a outra. Se o deseja, pode utilizar
goto a uma etiqueta caSe o goto default.
Se expression no coincide com nenhuma constante constant-expression, o controle se
transfere s instrues que seguem etiqueta default opcional. Se no existe uma etiqueta
default, o controle se transfere fora da instruo switch.
Exemplo
// statements_switch.cs
using System;
class SwitchTest
{
public static void Main()
{
Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
Console.Write("Please enter your selection: ");
string s = Console.ReadLine();
int n = int.Parse(s);
int cost = 0;
switch(n)
{
case 1:
cost += 25;
break;
case 2:
cost += 25;
goto case 1;
case 3:
cost += 50;
goto case 1;
default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
if (cost != 0)
Console.WriteLine("Please insert {0} cents.", cost);
Console.WriteLine("Thank you for your business.");
}
}
Entrada
2
Visual C# Consolidado
217
Resultados do Exemplo
Coffee sizes: 1=Small 2=Medium 3=Large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.
Descrio do cdigo
No Exemplo anterior, se utilizou uma varivel do tipo integral, n, para os casos da instruo
switch. Observe que tambm pode utilizar a varivel de srie, s, diretamente. Nesse caso, a
estrutura switch pode apresentar a seguinte forma:
switch(s)
{
case "1":
...
case "2":
...
}
Mas no se admite passar explcitamente de uma etiqueta de caso a outra, se est permitido
apilhar etiquetas de caso, por exemplo:
case 0:
case 1:
// do something;
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
foat
Intervalo aproximado
45
38
1.5 10 a 3.4 10
Precisin
Tipo do .NET
Framework
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 no existe nenhum tipo double na expresso, esta se avalie como foat (o bool no
caso de expresses relacionales ou booleanas).
Visual C# Consolidado
218
Para obter mais informao sobre estes valores, consulte o estndar IEEE para aritmtica binaria
de ponto flutante, disponivel no sitio Web http://www.ieee.org/.
Exemplo
No seguinte exemplo, se inclui um int, um short e um foat em uma expresso matemtica que
proporciona um resultado do tipo foat (observe que no existe nenhum double na expresso).
// keyword_foat.cs
// Mixing types in expressions
using System;
class MixedTypes
{
public static void Main()
{
int x = 3;
foat e = 4.5f;
short z = 5;
Console.WriteLine("The result is {0}", x*y/z);
}
}
Resultados
The result is 2.7
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 palavraschave 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()
{
Visual C# Consolidado
219
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");
int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}
Resultado
1
2
3
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;
public class MyClass
{
public int intI;
public void MyMeth()
{
}
public static void Main()
{
Visual C# Consolidado
220
Type t = typeof(MyClass);
// alternatively, you could use
// MyClass t1 = new MyClass();
// Type t = t1.GetType();
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}",
Visual C# Consolidado
221
(radius*radius*Math.PI).GetType());
}
}
Resultado
Area = 28.2743338823081
The type is System.Double
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
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.
Visual C# Consolidado
222
Se pode utilizar uma instruo throw no bloco catch para voltar a provocar a exceo capturada
pela instruo catch. Por exemplo:
catch (InvalidCastException e)
{
throw (e); // Rethrowing exception e
}
Se deseja voltar a provocar a exceo que est sendo atualmente controlada por uma clusula
catch sem parmetros, use a instruo throw sem argumentos. Por exemplo:
catch
{
throw;
}
Quando estes dentro de um bloco try, inicialice s variveis declaradas em seu interior; caso
contrario, pode provocarse uma exceo antes de que se complete a execuo do boque. Por
exemplo, no seguinte Exemplo de cdigo, a varivel x se inicializa dentro do bloco try. Ao
intentar utilizar a varivel fora do bloco try, na instruo Write(x), se gerar ou seguinte erro do
compilador: Uso de varivel ocal no assinalada.
public static void Main()
{
int x;
try
{
x = 123; // Don't do that.
// ...
}
catch
{
// ...
}
Console.Write(x); // Erro: Use of unassigned ocal varivel 'x'.
}
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)
Visual C# Consolidado
223
{
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)
{
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:
Visual C# Consolidado
224
System.ArgumentNullException
No Exemplo anterior, se empieza com a clusula catch menos especfica, se obter o mensagem:
A previous catch clause already catches 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 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
statement
Comentarios
A instruo for executa sus instrues internas repetidamente da seguinte forma:
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()
Visual C# Consolidado
225
{
for (int i = 1; i <= 5; i++)
Console.WriteLine(i);
}
}
Resultado
1
2
3
4
5
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();
// Accessing the public field:
string n = e.name;
// Accessing the private field:
double s = e.AccessSalary();
}
Visual C# Consolidado
226
}
No Exemplo anterior, se intenta obter acesso diretamente a os membros privados mediante uma
instruo como a seguinte:
double s = e.salary;
obter o seguinte mensagem de erro:
'Empoyee.Salary' is inaccessible due to its protection level.
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
Intervalo
Tamanho
Tipo do .NET
Framework
uint
0 a 4.294.967.295
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.
Visual C# Consolidado
227
PALAVRA-CHAVE CHAR
A palavra-chave char utilizado para declarar um carcter Unicode no intervalo indicado na
seguinte tabla. Os caracteres Unicode so caracteres de 16 bits que se utilizam para representar
a maiora de os lenguajes escritos de todo ou mundo.
Tipo
Intervalo
Tamanho
Tipo do .NET
Framework
char
U+0000 a U+ffff
System.Char
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
Visual C# Consolidado
228
Comentarios
As instrues do lao seguem executndose para cada elemento da matriz ou a coleco.
Quando j se han recorrido todos os elementos da coleco, o controle se transfere seguinte
instruo fora do bloco foreach.
Para obter mais informao acerca da palavra-chave foreach, incluidos exemplos de cdigo,
veja os temas seguintes:
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:
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()
{
Visual C# Consolidado
229
}
}
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
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)
{
Visual C# Consolidado
230
SomeFunction(21);
}
public static void DelegateFunction(int i)
{
System.Console.WriteLine("Called by delegate with number: {0}.", i);
}
}
Resultados
Called by delegate with number: 21.
Exemplo 2
no seguinte exemplo, um delegado se assinala os mtodos estticos e de instancia e devolve
informao especfica de cada uno de elos.
// keyword_delegate2.cs
// Calling both static and instance methods from delegates
using System;
// delegate declaration
delegate void MyDelegate();
public class MyClass
{
public void InstanceMethod()
{
Console.WriteLine("A message from the instance method.");
}
static public void StaticMethod()
{
Console.WriteLine("A message from the static method.");
}
}
public class MainClass
{
static public void Main()
{
MyClass p = new MyClass();
// Map the delegate to the instance method:
MyDelegate d = new MyDelegate(p.InstanceMethod);
d();
// Map to the static method:
d = new MyDelegate(MyClass.StaticMethod);
d();
}
}
Resultados
A message from the instance method.
A message from the static method.
Visual C# Consolidado
231
Palavra-chave ock
A palavra-chave ock marca um bloco de instrues como uma seo crucial, para o que utiliza ou
boqueo de exclusin mutua de um objeto, a execuo de uma instruo y, posteriormente, a
liberao do boqueo. A instruo apresenta a seguinte forma:
o c k ( expression) statement_bock
de onde:
expression
Especifica ou objeto sobre ou que se deseja aplicar a instruo ock. Expression deve ser um tipo
de referencia.
Normalmente, expression ser this, se se deseja proteger uma varivel de instancia, ou biem
typeof(classe), se se deseja proteger uma varivel do tipo static (o se a seo crtica se encontra
em um mtodo esttico da classe dada).
statement_bock
Comentarios
A instruo ock permite garantizar que um subproceso no va a entrar em uma seo crtica de
cdigo enquanto outro subproceso j se encontra em ella. Se outro subproceso intenta entrar em
um cdigo boqueado, esperar at que o objeto se libere.
Exemplo 1
O seguinte Exemplo mostra um uso simple de subprocesses em C#.
// statements_ock.cs
using System;
using System.Threading;
class ThreadTest
{
public void runme()
{
Console.WriteLine("runme called");
}
public static void Main()
{
ThreadTest b = new ThreadTest();
Thread t = new Thread(new ThreadStart(b.runme));
t.Start();
}
}
Resultado
runme called
Exemplo 2
O seguinte Exemplo usa subprocesses e ock. Enquanto a instruo ock est presente, o bloco
de instrues constituye uma seo crtica e balance nunca se converter em um nmero
negativo.
// statements_ock2.cs
using System;
Visual C# Consolidado
232
using System.Threading;
class Account
{
int balance;
Random r = new Random();
public Account(int initial)
{
balance = initial;
}
int Withdraw(int amount)
{
// This condition will never be true unless the ock statement
// is commented out:
if (balance < 0)
{
throw new Exception("Negative Balance");
}
// Comment out the next line to see the effect of leaving out
// the ock keyword:
ock (this)
{
if (balance >= amount)
{
Console.WriteLine("Balance before Withdrawal :" +balance);
Console.WriteLine("Amount to Withdraw
:-"+ amount);
balance = balance - amount;
Console.WriteLine("Balance after Withdrawal : " + balance);
return amount;
}
else
{
return 0; // transaction rejected
}
}
}
public void DoTransactions()
{
for (int i = 0; i < 100; i++)
{
Withdraw(r.Next(1, 100));
}
}
}
class Test
{
public static void Main()
{
Thread[] threads = new Thread[10];
Account acc = new Account (1000);
for (int i = 0; i < 10; i++)
{
Thread t = new Thread(new ThreadStart(acc.DoTransactions));
Visual C# Consolidado
233
threads[i] = t;
}
for (int i = 0; i < 10; i++)
{
threads[i].Start();
}
}
}
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
Visual C# Consolidado
234
1
2
3
5
8
13
21
34
55
Visual C# Consolidado
235
Visual C# Consolidado
236
OPERADORES C#
C# fornece um conjunto grande de operadores, que so smbolos que especificam as operaes
para executar em uma expresso. C# predefines os operadores aritmticos e lgicos normal, bem
como uma variedade de outras pessoas como mostrado na tabela a seguir. Operaes em
integral tipos, como ==, !=, <, >, <=, >=, binary +, binary -, ^, &, |, ~, ++, --,. e
sizeof() geralmente so permitidos em enumeraes Alm disso, vrios operadores podem ser
Sobrecarregado pelo usurio, assim alterando seu significado quando aplicado a um tipo definido
pelo usurio.
Categoria de operadores
Operadores
Aritmtica
+ - * / %
Incremento, decrement
++ --
SHIFT
<< >>
Relacional
Atribuio
Acesso membro
Indexao
[]
Converso
()
Condicional
?:
+ -
A criao do objeto
Novo
Informaes de Tipo
Marcada desmarcada
Indirection e endereo
* -> [] &
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:
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).
Visual C# Consolidado
237
Os operadores aritmticos, alm de tipo integral-tipo para integral-casts podem causar estouro,
por exemplo, Projetando e esto sujeitas s execuo marcado ou desmarcado. para um Longo
An Int, Entretanto, operadores bit a bit e operadores SHIFT nunca causar 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:
Operadores
Posibilidade de sobrecarrega
Visual C# Consolidado
238
&&, ||
[]
()
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
Visual C# Consolidado
239
indicador ficam entre colchetes, como os ndices de um array, mas podem ser declarar de
qualquer tipo (a diferena dos ndices de um array, que somente podem ser integrais).
Por exemplo, .NET Framework define um tipo Hashtable que asoa chaves e valores do tipo
arbitrario:
Collections.Hashtable h = new Collections.Hashtable();
h["a"] = 123; // note: using a string as the index
Os colchetes tambm so utilizados para especificar atributos:
[attribute(AllowMultiple=true)]
public class Attr {
}
Podem ser utilizados colchetes para obter o valor que aponta um ponteiro segundo um ndice
(veja A.2 Tipos de ponteiros):
unsafe fixede ( int* p = fib ) // p points to fib from earlier example
{
p[0] = p[1] = 1;
for( int i=2; i<100; ++i ) p[i] = p[i-1] + p[i-2];
}
No obstante, tenga em cuenta que no se realiza uma comprobao dos lmites do ndice.
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);
Visual C# Consolidado
240
}
}
Resultado
1234
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.
Visual C# Consolidado
241
+ expr
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 simplemente o valor do operando.
Os operadores + binrios esto predefinidos para os tipos numricos e de cadena de caracteres.
Para tipos numricos, + calcula a suma de seus dos operandos. Quando ao menos um dos
operandos do tipo string, + concatena as representaes do tipo string dos operandos.
Os tipos delegados tambm proporcionam um operador binrio +, o qual realiza a concatenao
de delegados.
Os tipos definidos pelo usuario podem sobrecarregar os operadores + unrio e binrio (veja
operator).
Exemplo
// cs_operator_plus.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(+5);
// unary plus
Console.WriteLine(5 + 5); // addition
Console.WriteLine(5 + .5); // addition
Console.WriteLine("5" + "5"); // string concatenation
Console.WriteLine(5.0 + "5"); // string concatenation
// note automatic conversion from double to string
}
}
Resultado
5
10
5.5
55
55
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
Visual C# Consolidado
243
Expresso.
Comentarios
O operador * tambm utilizado para declarar tipos de ponteiros e para desfazer a referena a
ponteiros (veja A.2 Tipos de ponteiros).
Os tipos definidos pelo usuario podem sobrecarregar o operador * (veja operator).
Exemplo
// cs_operator_mult.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(5 * 2);
Console.WriteLine(-.5 * .2);
Console.WriteLine(-.5m * .2m); // decimal type
}
}
Resultado
10
-0.1
-0.10
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);
}
}
Visual C# Consolidado
244
Resultado
-2
-2.5
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).
Visual C# Consolidado
246
Exemplo
// cs_operator_OR.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(true | false); // logical or
Console.WriteLine(false | false); // logical or
Console.WriteLine("0x{0:x}", 0xf8 | 0x3f); // bitwise or
}
}
Resultado
True
False
0xff
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
Visual C# Consolidado
247
0xc7
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()
{
Visual C# Consolidado
248
Resultado
!0x00000008 = 0xfffffff7
!0xfffffff8 = 0x00000007
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
Visual C# Consolidado
249
Operador <
Todos os tipos numricos e de enumerao definem um operador relacional "menor que" (<) que
devolve true se o primeiro operando menor 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_less_than.cs
using System;
class Test
{
public static void Main()
{
Console.WriteLine(1 < 1.1);
Console.WriteLine(1.1 < 1.1);
}
}
Resultado
True
False
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
Visual C# Consolidado
250
using System;
class Test
{
public static void Main()
{
Console.WriteLine(1.1 > 1);
Console.WriteLine(1.1 > 1.1);
}
}
Resultado
True
False
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
Visual C# Consolidado
251
Resultado
0.993346653975306
0.998334166468282
1
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;
Visual C# Consolidado
252
x = 1.5;
Console.WriteLine(++x);
x = 1.5;
Console.WriteLine(x++);
Console.WriteLine(x);
}
}
Resultado
2.5
1.5
2.5
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);
}
}
Visual C# Consolidado
253
Resultado
0.5
1.5
0.5
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;
}
static bool fn2()
{
Console.WriteLine("fn2 called");
Visual C# Consolidado
254
return true;
}
public static void Main()
{
Console.WriteLine("regular AND:");
Console.WriteLine("result is {0}", fn1() & fn2());
Console.WriteLine("short-circuit AND:");
Console.WriteLine("result is {0}", fn1() && fn2());
}
}
Resultado
regular AND:
fn1 called
fn2 called
result is False
short-circuit AND:
fn1 called
result is False
Visual C# Consolidado
255
DIRECTIVES PREPROCESSOR C#
Esta seo discute diretivas pr-processamento a linguagem C#:
#IF
# Else
#elif
#endif
Definir #
#undef
#warning
#Error
# Line
#Region
#endregion
# pragma
Aviso # pragma
Soma de verificao # pragma
Enquanto o compilador no no tm um preprocessor separado, as diretivas descritas nesta
seo so processadas como se no havia um; essas diretivas so usadas para ajudar na
compilao condicional. Ao contrrio das diretivas C e C++, voc no pode usar essas diretivas
para criar macros.
Uma diretiva de pr-processamento deve ser a nica instruo em uma linha.
Visual C# Consolidado
256
Um smbolo que voc define com /define ou com #define no entrar em conflito com uma
varivel com o mesmo nome. Isto , um nome de varivel no deve ser passado para uma
Diretiva de pr-processamento e um smbolo s pode ser avaliado por uma diretiva de prprocessamento.
O escopo de um smbolo criado com #define o arquivo no qual ele foi definido.
Exemplo
// preprocessor_if.cs #define DEBUG #define VC_V7 using System; public class MyClass { static
void Main() { #if (DEBUG && !VC_V7) Console.WriteLine("DEBUG is defined"); #elif (!DEBUG
&& VC_V7) Console.WriteLine("VC_V7 is defined"); #elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined"); #else Console.WriteLine("DEBUG and
VC_V7 are not defined"); #endif } }
Sada
DEBUG and VC_V7 are defined
Visual C# Consolidado
257
Comentrios
Uma diretiva condicional, comeando com uma #if diretiva, explicitamente deve ser terminada
com uma #endif diretiva. Veja #If (referncia C#) um Exemplo de como usar #endif.
Visual C# Consolidado
258
Exemplo
// preprocessor_warning.cs // CS1030 expected #define DEBUG class MainClass { static void
Main() { #if DEBUG #warning DEBUG is defined #endif } }
Visual C# Consolidado
259
O Exemplo a seguir mostra como o depurador ignora as linhas ocultas no cdigo. Quando voc
executar o exemplo, ela exibir trs linhas de texto. No entanto, quando voc define um ponto de
interrupo, como mostrado no exemplo, e visitas F10 para passar pelo cdigo, voc notar que o
depurador ignora a linha oculta. Observe tambm que mesmo que voc defina um ponto de
interrupo na linha oculta, o depurador ir ignor-la ainda.
// preprocessor_linehidden.cs using System; class MainClass { static void Main() {
Console.WriteLine("Normal line #1."); // Set break point here. #line hidden
Console.WriteLine("Hidden line."); #line default Console.WriteLine("Normal line #2."); } }
Visual C# Consolidado
260
Uma lista de nmeros de aviso separted vrgulas. Digite os nmeros sozinho, sem o
prefixo " CS ".
Quando nenhum nmero aviso so especificados, disable Desativa todos os avisos e
restore permite que todos os avisos.
Exemplo
// pragma_warning.cs using System; #pragma warning disable 414, 3021 [CLSCompliant(false)]
public class C { int i = 1; static void Main() { } } #pragma warning restore 3021
[CLSCompliant(false)] // CS3021 public class D { int i = 1; public static void F() { } }
Visual C# Consolidado
261
OPES DO COMPILADOR C#
O compilador produz arquivos executvel (.exe), bibliotecas de vnculo dinmico (.dll), ou mdulos
de cdigo (.netmodule).
Cada opo de compilador est disponvel de duas formas: -option e /option. A
documentao s mostra o /option formulrio.
Uma seqncia rodeada por aspas duplas (" seqncia ") interpretada como um
argumento nico, independentemente de espao em branco contida. Uma seqncia entre
aspas pode ser incorporada em um argumento.
Precedido de aspas duplas por uma barra invertida (. \ " interpretado como um caractere
literal aspas duplas ("))
Visual C# Consolidado
262
Se um nmero par de barras invertidas for seguido de aspas duplas, uma barra invertida
colocada na matriz argv para cada par de barras invertidas, e as aspas duplas interpretada
como um delimitador de seqncia de caracteres.
Se um nmero mpar de barras invertidas for seguido de aspas duplas, uma barra invertida
colocada na matriz argv para cada par de barras invertidas, e as aspas duplas " escaped ",
a barra invertida restante, causando de aspas duplas (") para ser colocado em argv literal.
Linhas de comando de exemplo
Compila File.cs produzir File.exe:
csc File.cs
Compila File.cs produzir File.dll:
Se a verso atual do Visual Studio estiver instalada em um computador que tambm possui uma
verso anterior do Visual Studio, voc no deve executar vsvars32.bat ou vcvars32.bat de verses
diferentes na mesma janela de comando.
Para executar VSVARS32.BAT
1.
2.
Cuidado
VSVARS32.bat pode variar de mquina para mquina. No substituir um arquivo VSVARS32.bat
ausente ou danificado com um VSVARS32.bat do outro computador. Execute novamente a
instalao para substituir o arquivo ausente.
Visual C# Consolidado
263
IMPLANTAO DE APLICATIVOS
C#
Aps a concluso criar seu aplicativo C#, a prxima etapa para distribu-lo. C# uma linguagem
.NET; portanto, distribuir qualquer executveis C# para outras mquinas requer o .NET
Framework para ser instalado em cada mquina de execuo (e possivelmente outras
dependncias especficas para seu aplicativo). Voc tem uma variedade de opes disponveis
para distribuir o .NET Framework. Para obter uma viso geral, consulte Redistribuindo o .NET
Framework.
Mover concludos aplicativos para outros computadores chamado geralmente de implantao.
Ambiente de desenvolvimento da Microsoft fornece mecanismos para implantao; para obter
mais informaes, consulte Implantando aplicativos e componentes.
Se voc criar e distribuir principalmente na linha de comando, voc talvez precise considerar
outros mtodos de implantao e redistribuindo dependncias.
Otimizao
Opo
Propsito
/filealign
/ Otimizar
Arquivos de sada
Opo
Propsito
/Doc
/ Fora
/PDB
Propsito
/addmodule
/delaysign
Instrui o compilador para adicionar a chave pblica mas para deixar o conjunto no
assinado.
/lib
Visual C# Consolidado
264
/nostdlib
/Reference
Propsito
/bugreport
Cria um arquivo que contm informaes que torna fcil a relatar um erro.
/
selecionada
Especifica se far com que uma exceo em tempo de execuo inteiro aritmtico
que estoura os limites do tipo de dados.
/Debug
/errorreport
/fullpaths
/nowarn
/ Avisar
Preprocessor
Opo
Propsito
/ Define
Recursos
Opo
Propsito
/linkresource
/Resource
/win32icon
/win32res
Diversos
Opo
Propsito
/?
/help
/langversion
/ Principal
/noconfig
/nologo Evita
/recurse
Visual C# Consolidado
265
/ unsafe
/utf8output
Obsoleto opes
Permite compilao incremental.
/incremental
Propsito
/?
/addmodule
Cria um arquivo ' Relatrio de erros '. Este arquivo ser enviado junto com
qualquer informao de falha se usado com /errorreport:prompt ou
/errorreport:Send.
/Debug
/ Define
/delaysign
Signs atraso-o conjunto usando somente a parte pblica da chave do nome de alta
segurana.
/Doc
/errorreport
Especifica como lidar com erros de compilador interno: prompt, envio, ou nenhum.
O padro Nenhum.
/filealign
/fullpaths
/help
/langversion
/lib
/linkresource
/ Principal
Especifica o tipo que contm o ponto de entrada (Ignorar todos os outros pontos
de entrada possveis).
/noconfig
/nologo Evita
Visual C# Consolidado
266
/nostdlib
/nowarn
/ Otimizar
/ Fora
/PDB
/platform
Limites que plataformas esse cdigo pode executado em: x 86, Itanium, x 64, ou
anycpu. O padro anycpu.
/recurse
/Reference
/Resource
/target
/ unsafe
/utf8output
/ Avisar
/warnaserror
/win32icon
/win32res
Visual C# Consolidado
267
EXEMPLOS DO VISUAL C#
Voc pode acessar cdigo de exemplo, procurando resumos de Exemplo nesta seo. Cada
abstrato contm um link para abrir ou copiar o Exemplo na arquivos. Alm disso, o SDK do .NET
Framework inclui tecnologia e aplicativo Exemplos e tutoriais QuickStart que demonstram recursos
.NET Framework e cdigo Visual C#.
Os tutoriais QuickStart so a maneira mais rpida para entender o que a tecnologia .NET
Framework oferece desenvolvedores lder-borda. Os QuickStarts so uma srie de exemplos e
suporte documentao projetadas para rapidamente acquaint voc com a sintaxe, arquitetura, e
poder do Visual Studio e o .NET Framework. Do ASP.NET Os tutoriais QuickStart inclui exemplos
na e aplicativos Windows Forms, alm de muitos aplicativos instruo que abrangem os recursos
da tecnologia .NET Framework mais atraentes.
Para acessar o QuickStarts, clique em Start, aponte para Programs, aponte para Microsoft
.NET Framework SDK v2.0, e clique em QuickStart Tutorials. Uma pgina da Web do
aplicativo " tutoriais QuickStart SDK Microsoft .NET Framework " exibida. Para executar o
QuickStarts, siga as instrues na pgina, que configura o banco de dados amostras e conclui a
instalao. Para obter mais informaes, consulte Amostras e QuickStarts.
Exemplos de introduo
Annimo Exemplo
representantes
Exemplo matrizes
Coleo Exemplo
classes
Mostra como fazer classes coleo Generic no-que podem ser usados
com a foreach instruo.
Mostra como fazer classes a coleo genrica que podem ser usados
com a foreach instruo.
Exemplo de
implementao de
interface explcita
Exemplo World de
saudao
Exemplo indexadores
Indexado Exemplo
propriedades
Exemplo propriedades
Visual C# Consolidado
268
Exemplo Structs
Exemplo Overloading
do operador
Exemplo Conversions
definidas pelo usurio
Exemplo de verso
Produzir exemplo
Exemplo parte 1
Interop COM
Exemplo parte 2
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
Exemplo BD OLE
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke
exemplo
Exemplo de
segurana
Segmentao de
exemplo
Exemplo de cdigo
no seguros
Exemplo de
documentao XML
Visual C# Consolidado
269
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir os arquivos de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da pasta CEP, clique em Extract all files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta os arquivos sero extrados para, ou clique em
Next novamente.
4.
Certifique-se de que a Show extracted files caixa de seleo esteja marcada e clique
em Finish.
3.
4.
5.
6.
7.
8.
9.
2.
Digite o seguinte:
Visual C# Consolidado
270
Digite o seguinte:
cd ..\HelloWorld2 csc Hello2.cs Hello2
4.
Digite o seguinte:
cd ..\HelloWorld3 csc Hello3.cs Hello3 A B C D
5.
Digite o seguinte:
cd ..\HelloWorld4 csc Hello4.cs Hello4
Consulte tambm
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
4.
5.
6.
Para criar e executar os exemplos parmetros de linha de comando a partir da linha de comando
Visual C# Consolidado
271
1.
2.
Digite o seguinte:
csc cmdline1.cs cmdline1 A B C
3.
4.
Digite o seguinte:
csc cmdline2.cs cmdline2 John Paul Mary
Exemplo matrizes
Download sample
Este Exemplo descreve e mostra como matrizes funcionam em C#. Para obter mais informaes,
consulte Matrizes (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
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
Visual C# Consolidado
272
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
2.
Digite o seguinte:
csc person.cs person
3.
4.
Digite o seguinte:
csc abstractshape.cs shapes.cs shapetest.cs shapetest
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
Visual C# Consolidado
273
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
4.
5.
Clique em OK.
6.
2.
Digite o seguinte:
csc /target:library /out:Functions.dll Factorial.cs DigitCounter.cs
3.
4.
Digite o seguinte:
copy ..\Functions\Functions.dll . csc /out:FunctionTest.exe /R:Functions.DLL
FunctionClient.cs FunctionTest 3 5 10
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
Para abrir o arquivo de Exemplo no Solution Explorer
Visual C# Consolidado
274
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
275
2.
3.
2.
Digite o seguinte:
csc tokens.cs tokens
3.
4.
Digite o seguinte:
csc tokens2.cs tokens2
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
276
1.
2.
3.
2.
Digite o seguinte:
csc struct1.cs struct1
3.
4.
Digite o seguinte:
csc struct2.cs struct2
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
4.
Clique em OK.
Visual C# Consolidado
277
5.
Para alterar o arquivo revertido para Normal, execute o programa no mesmo arquivo
novamente.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
278
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
Para criar e executar os exemplos Conversions pelo usurio a partir da linha de comando
1.
2.
Digite o seguinte:
csc conversion.cs conversion
3.
4.
Digite o seguinte:
csc structconversion.cs structconversion
Visual C# Consolidado
279
da lista. O Exemplo tambm mostra como cdigo de cliente cria uma instncia da classe,
especificando um argumento Tipo, e como restries sobre o parmetro type ativar operaes
adicionais a serem executadas sobre os argumentos Tipo.
Para obter um Exemplo de uma classe a coleo genrica que implementa um bloco do iterador,
consulte COMO: Criar um bloco iterador para uma lista genrica (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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Comentrios
Este Exemplo fornecido para fins de demonstrao e no se destina a ser usado sem
modificaes no cdigo de produo. Para cdigo de qualidade de produo, ele recomendvel
que voc usar as classes coleo no espao para nome System.Collections.Generic sempre que
possvel.
Exemplo Overloading
do operador
Download sample
Este Exemplo demonstra classes definidas pelo usurio como poder sobrecarregar operadores.
Consulte Operadores C# Para obter mais informaes.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
Visual C# Consolidado
280
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
2.
Digite o seguinte:
csc complex.cs complex
3.
4.
Digite o seguinte:
csc dbbool.cs dbbool
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
Para abrir o arquivo de Exemplo no Solution Explorer
Visual C# Consolidado
281
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
2.
Digite o seguinte:
csc bookstore.cs bookstore
3.
4.
Digite o seguinte:
csc compose.cs compose
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
Visual C# Consolidado
282
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.
2.
3.
2.
Digite o seguinte:
csc events1.cs events1
3.
4.
Digite o seguinte:
csc events2.cs events2
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Visual C# Consolidado
283
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar os exemplos Explicit implementao interface no Visual Studio
1.
2.
3.
Para criar e executar os exemplos Explicit implementao interface a partir da linha de comando
1.
2.
Digite o seguinte:
csc explicit1.cs explicit1
3.
4.
Digite o seguinte:
csc explicit2.cs explicit2
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
284
2.
3.
4.
5.
6.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
Visual C# Consolidado
285
4.
No menu Build, clique em Build. O arquivo de sada XML poder ser no diretrio de
depurao.
2.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
2.
Digite o seguinte:
csc PinvokeTest.cs PinvokeTest
3.
Visual C# Consolidado
286
4.
Digite o seguinte:
csc Marshal.cs Marshal
5.
6.
Digite o seguinte:
csc logfont.cs pinvoke.cs pinvoke
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
2.
3.
4.
5.
Clique em OK.
6.
7.
Visual C# Consolidado
287
2.
3.
4.
5.
6.
Recrie Interop1.
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.
2.
Digite o seguinte:
tlbimp %windir%\system32\quartz.dll /out:QuartzTypeLib.dll csc /r:QuartzTypeLib.dll
interop1.cs interop1 %windir%\clock.avi
3.
4.
Digite o seguinte:
csc interop2.cs interop2 %windir%\clock.avi
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Visual C# Consolidado
288
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 2 Part Interop COM no Visual Studio
1.
2.
3.
4.
Clique em OK.
5.
Para criar e executar o Exemplo 2 Part Interop COM a partir da linha de comando
1.
2.
3.
Compilar o servidor:
csc /target:library CSharpServer.cs regasm CSharpServer.dll /tlb:CSharpServer.tlb
4.
5.
Execute o cliente:
COMClient friend
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
Visual C# Consolidado
289
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
290
3.
2.
Digite o seguinte:
csc ImperativeSecurity.cs ImperativeSecurity
3.
4.
Digite o seguinte:
csc DeclarativeSecurity.cs DeclarativeSecurity
5.
6.
Digite o seguinte:
csc SuppressSecurity.cs SuppressSecurity
Segmentao de Exemplo
Download sample
Este Exemplo demonstra as seguintes tcnicas segmentao. Consulte Segmentao (guia de
programao C#) Para obter mais informaes.
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
291
1.
2.
3.
2.
Digite o seguinte:
cd ThreadStartStop csc ThreadStartStop.cs ThreadStartStop
3.
Digite o seguinte:
cd ..\ThreadPool csc ThreadPool.cs ThreadPool
4.
Digite o seguinte:
cd ..\ThreadSync csc ThreadSync.cs ThreadSync
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
292
3.
4.
5.
6.
7.
Clique em OK.
8.
9.
2.
Digite o seguinte:
cd FastCopy csc FastCopy.cs /unsafe FastCopy
3.
Digite o seguinte:
cd ..\ReadFile csc ReadFile.cs /unsafe ReadFile ReadFile.cs
4.
Digite o seguinte:
cd ..\PrintVersion csc PrintVersion.cs /unsafe PrintVersion
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
293
Observao
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
Para criar e executar o Exemplo OLE DB a partir da linha de comando
Digite o seguinte no prompt de comando:
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
Para abrir o arquivo de Exemplo no Solution Explorer
1.
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
294
1.
Use o Change Directory (cd) comando para alterar para o Yield Diretrio.
2.
Digite o seguinte:
csc Yield.cs Yield
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Visual C# Consolidado
295
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Use o Change Directory (cd) comando para alterar para o PartialTypes Diretrio.
2.
Digite o seguinte:
csc PartialTypes.cs PartialTypes
Exemplo anulvel
Download sample
Este Exemplo demonstra o uso de tipos anulveis. Esse recurso permite que tipos de valores para
que um estado no inicializada, ou vazio, semelhante a como tipos de referncia podem ser
definidos como null.
Este Observao de segurana cdigo de Exemplo fornecido para ilustrar um conceito e
no deve ser usado em aplicativos ou sites da Web, como no-pode ilustrar as prticas de
codificao mais segura. Microsoft supe que nenhum RESPONSABILIDADE POR DANOS
INCIDENTAIS OU CONSEQENCIAIS o cdigo do Exemplo deve ser usado para fins diferente
da maneira desejada
Visual C# Consolidado
296
2.
Clique em Open e, na coluna esquerda da janela pasta CEP, clique em Extract all
files.
O Extraction Wizard abre.
3.
Clique em Next. Voc pode mudar a pasta que os arquivos sero extrados para, e clique
em Next novamente.
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Use o Change Directory (cd) comando para alterar para o diretrio Nullable.
2.
Digite o seguinte:
csc Nullable.cs Nullable
Visual C# Consolidado
297
TERMINOLOGIA C#
Modificador de acesso
Uma palavra-chave, como Particular, Protegido ou Pblica, que restringe o acesso a um
tipo ou membro Tipo., interno Para obter mais informaes, consulte Modificadores de
acesso.
Membro acessvel
Um membro que pode ser acessado por um tipo determinado. Um membro acessvel para
um tipo no est necessariamente acessvel para um outro tipo. Para obter mais
informaes, consulte Modificadores de acesso e Conjuntos de amigo.
Assessor
Um mtodo que Define ou recupera o valor de um valor que est associado a uma
propriedade membro dados particulares. Propriedades de leitura-gravao e set ter get
assessores. Propriedades que so somente leitura tm apenas um get acessador. Para
obter mais informaes, consulte Propriedades.
Mtodo annimo
Um mtodo annimo um bloco de cdigo que passado como um parmetro para um
Delegar. Para obter mais informaes, consulte Mtodos annimo.
Classe base
Uma Classe que herdado por outra classe ' derivado '. Para obter mais informaes,
consulte Herana.
Chamar pilha
A srie de mtodo chama esquerda do incio do programa para a instruo atualmente
sendo executado em tempo de execuo.
Classe
Um tipo de dados que descreve um objeto. Classes conter dados, e os mtodos para agir
sobre os dados. Para obter mais informaes, consulte Classes.
Construtor
Um mtodo especial em class ou struct que inicializa os objetos do mesmo tipo. Para obter
mais informaes, consulte Construtores.
Delegar
Um representante um tipo que referencia um mtodo. Depois que um representante
atribudo um mtodo, ele funciona exatamente como esse mtodo. Para obter mais
informaes, consulte Representantes.
Classe derivada
Um Classe que usa herana para obter, aumentar, ou modificar o comportamento e dados
de outra classe ' base '. Para obter mais informaes, consulte Herana.
destruidor
Um mtodo especial em ou struct que prepara a instncia para Destruio pelo sistema.
um Classe Para obter mais informaes, consulte Destructors.
Evento
Um membro da OU struct que envia notificaes de alterao. um Classe Para obter mais
informaes, consulte Eventos.
Visual C# Consolidado
298
Campo
Um membro de dados ou struct que acessado diretamente. um Classe
generics
Generics permitir que voc a definir e ou mtodo que so definidas com um parmetro de
tipo. um Classe Quando cdigo cliente instancia o tipo, ele especifica um tipo especfico
como um argumento. Para obter mais informaes, consulte Generics.
IDE
Ambiente de desenvolvimento integrado. O aplicativo que fornece a interface do usurio
unificada para as ferramentas de desenvolvimento vrios incluindo o compilador,
depurador, editor de cdigo, e designers.
Tipo imutvel
Um tipo cujos dados de instncia, campos e propriedades, no altera depois a instncia for
criada. A maioria dos tipos valor so imutveis.
Membro inacessvel
Um membro que no pode ser acessado por um tipo determinado. Um membro inacessvel
para um tipo no necessariamente inacessvel para outro tipo. Para obter mais
informaes, consulte Modificadores de acesso.
Herana
C# herana oferece suporte, para uma Classe que deriva de outra classe, conhecido como
a classe base, herda os mesmos mtodos e propriedades. Herana envolve classes base
e classes derivadas. Para obter mais informaes, consulte Herana.
Interface
Um tipo que contm somente as assinaturas de mtodos pblicos, eventos e
representantes. Um objeto que herda a interface deve implementar todos os mtodos e
eventos definidos na interface. Classes ou estruturas podem herdar qualquer nmero de
interfaces. Para obter mais informaes, consulte Interfaces
iterador
Um iterador um mtodo que permite que os consumidores de uma Classe que contm
uma coleo ou matriz para usar foreach, na referncia (C#) para percorrer essa coleo
ou matriz.
Membro
Um campo, propriedade, mtodo, ou evento declarado no ou struct. um Classe
Mtodo
Um bloco de cdigos nomeado que fornece comportamento para ou struct. um Classe
Tipo mutveis
Um tipo cujos dados de instncia, campos e propriedades, podem ser alteradas aps a
ocorrncia criada. A maioria Tipos de referncia est mutveis.
tipo aninhado
Um tipo declarado na declarao de outro tipo.
object
Uma instncia de um Classe. Um objeto existe na memria, e tem dados e mtodos que
atuam sobre os dados. Para obter mais informaes, consulte Objetos, classes, e Structs.
Propriedade
Visual C# Consolidado
299
Um membro de dados acessado por meio de um acessador. Para obter mais informaes,
consulte Propriedades.
refatorao
Reutilizando anteriormente digitado cdigo. Visual Express Editor cdigo C#
inteligentemente pode reformatar cdigo para, por exemplo, transformar um bloco de
cdigo de realce em um mtodo. Para obter mais informaes, consulte Refatorao.
Tipo de referncia
Um tipo de dados. Uma varivel declarada como um ponto Tipo de referncia para um
local em que os dados so armazenados. Para obter mais informaes, consulte Tipos de
referncia.
static
Existe uma classe ou mtodo declarado como esttico sem primeiro sendo instanciado
usando a palavra-chave new. Main() um mtodo esttico. Para obter mais informaes,
consulte Classes estticas e membros de classe estticos.
struct
Um tipo composto dados que normalmente usado para conter algumas variveis que tm
alguma relao lgica. Structs tambm podem conter mtodos e eventos. Structs no
oferecerem suporte herana mas eles fazer suporte interfaces. uma estrutura a Tipo de
valor,. enquanto um Classe um Tipo de referncia Para obter mais informaes, consulte
Structs.
Tipo de valor
Um tipo de valor um tipo de dados que est alocado na pilha, em um tipo de referncia
que alocado em pilha vez. Incluindo o Tipos internas, os tipos numricos, bem como o
tipo estrutura e o tipo anulvel, so todos os tipos valor. O Classe tipo e Seqncia Tipo
so Tipos de referncia. Para obter mais informaes, consulte Tipos valor (referncia C#).
Visual C# Consolidado
300
EXEMPLOS DO VISUAL C#
Voc pode acessar cdigo de exemplo, procurando resumos de Exemplo nesta seo. Cada
abstrato contm um link para abrir ou copiar o Exemplo na arquivos. Alm disso, o SDK do .NET
Framework inclui tecnologia e aplicativo Exemplos e tutoriais QuickStart que demonstram recursos
.NET Framework e cdigo Visual C#.
Os tutoriais QuickStart so a maneira mais rpida para entender o que a tecnologia .NET
Framework oferece desenvolvedores lder-borda. Os QuickStarts so uma srie de exemplos e
suporte documentao projetadas para rapidamente acquaint voc com a sintaxe, arquitetura, e
poder do Visual Studio e o .NET Framework. Do ASP.NET Os tutoriais QuickStart inclui exemplos
na e aplicativos Windows Forms, alm de muitos aplicativos instruo que abrangem os recursos
da tecnologia .NET Framework mais atraentes.
Para acessar o QuickStarts, clique em Start, aponte para Programs, aponte para Microsoft
.NET Framework SDK v2.0, e clique em QuickStart Tutorials. Uma pgina da Web do
aplicativo " tutoriais QuickStart SDK Microsoft .NET Framework " exibida. Para executar o
QuickStarts, siga as instrues na pgina, que configura o banco de dados amostras e conclui a
instalao. Para obter mais informaes, consulte Amostras e QuickStarts.
Nesta seo
Exemplos de introduo
Annimo Exemplo
representantes
Exemplo matrizes
Coleo Exemplo
classes
Mostra como fazer classes coleo Generic no-que podem ser usados
com a foreach instruo.
Mostra como fazer classes a coleo genrica que podem ser usados
com a foreach instruo.
Exemplo de
implementao de
interface explcita
Visual C# Consolidado
301
Exemplo World de
saudao
Exemplo indexadores
Indexado Exemplo
propriedades
Exemplo propriedades
Exemplo Structs
Exemplo Overloading
do operador
Exemplo Conversions
definidas pelo usurio
Exemplo de verso
Produzir exemplo
Exemplo parte 1
Interop COM
Exemplo parte 2
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
Exemplo BD OLE
Visual C# Consolidado
302
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke
exemplo
Exemplo de
segurana
Segmentao de
exemplo
Exemplo de cdigo
no seguros
Exemplo de
documentao XML
6.
Clique em Open e, na coluna esquerda da pasta CEP, clique em Extract all files.
O Extraction Wizard abre.
7.
Clique em Next. Voc pode mudar a pasta os arquivos sero extrados para, ou clique em
Next novamente.
8.
Certifique-se de que a Show extracted files caixa de seleo esteja marcada e clique
em Finish.
Visual C# Consolidado
303
7.
Digite o seguinte:
cd HelloWorld1 csc Hello1.cs Hello1
8.
Digite o seguinte:
cd ..\HelloWorld2 csc Hello2.cs Hello2
9.
Digite o seguinte:
cd ..\HelloWorld3 csc Hello3.cs Hello3 A B C D
Visual C# Consolidado
304
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
8.
9.
6.
Digite o seguinte:
csc cmdline1.cs cmdline1 A B C
7.
8.
Digite o seguinte:
csc cmdline2.cs cmdline2 John Paul Mary
Exemplo matrizes
Download sample
Este Exemplo descreve e mostra como matrizes funcionam em C#. Para obter mais informaes,
consulte Matrizes (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
Visual C# Consolidado
305
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
306
Certifique-se de que a Show extracted files caixa de seleo est selecionada e clique
em Finish.
Clique duas vezes o Exemplo na Arquivo.sln.
A soluo de Exemplo exibida no Solution Explorer. Voc pode receber um aviso de
segurana que diz o local de soluo no confivel. Clique OK para continuar.
Para criar e executar os exemplos propriedades no Visual Studio
4.
5.
6.
6.
Digite o seguinte:
csc person.cs person
7.
8.
Digite o seguinte:
csc abstractshape.cs shapes.cs shapetest.cs shapetest
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
307
7.
8.
9.
6.
Digite o seguinte:
csc /target:library /out:Functions.dll Factorial.cs DigitCounter.cs
7.
8.
Digite o seguinte:
copy ..\Functions\Functions.dll . csc /out:FunctionTest.exe /R:Functions.DLL
FunctionClient.cs FunctionTest 3 5 10
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
308
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.
5.
6.
6.
Digite o seguinte:
csc tokens.cs tokens
Visual C# Consolidado
309
7.
8.
Digite o seguinte:
csc tokens2.cs tokens2
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
5.
6.
6.
Digite o seguinte:
csc struct1.cs struct1
7.
8.
Digite o seguinte:
csc struct2.cs struct2
Visual C# Consolidado
310
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
7.
8.
9.
Clique em OK.
Para alterar o arquivo revertido para Normal, execute o programa no mesmo arquivo
novamente.
Visual C# Consolidado
311
Este Exemplo mostra como classes C# podem declarar indexadas propriedades para representa
uma coleo de tipos diferentes de itens semelhantes matriz-. Para obter mais informaes,
consulte Propriedades (Guia de programao do C#).
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
312
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.
5.
6.
Para criar e executar os exemplos Conversions pelo usurio a partir da linha de comando
5.
6.
Digite o seguinte:
csc conversion.cs conversion
7.
8.
Digite o seguinte:
csc structconversion.cs structconversion
Visual C# Consolidado
313
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.
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.
Visual C# Consolidado
314
5.
6.
6.
Digite o seguinte:
csc complex.cs complex
7.
8.
Digite o seguinte:
csc dbbool.cs dbbool
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
315
4.
5.
6.
6.
Digite o seguinte:
csc bookstore.cs bookstore
7.
8.
Digite o seguinte:
csc compose.cs compose
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
5.
6.
Visual C# Consolidado
316
5.
6.
Digite o seguinte:
csc events1.cs events1
7.
8.
Digite o seguinte:
csc events2.cs events2
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.
5.
6.
Para criar e executar os exemplos Explicit implementao interface a partir da linha de comando
5.
6.
Digite o seguinte:
csc explicit1.cs explicit1
7.
Visual C# Consolidado
317
8.
Digite o seguinte:
csc explicit2.cs explicit2
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.
8.
9.
Visual C# Consolidado
318
Este Exemplo mostra como usar XML ao documento cdigo. Consulte Comentrios de
documentao XML (Guia de programao C#) Para obter informaes adicionais.
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
6.
7.
8.
No menu Build, clique em Build. O arquivo de sada XML poder ser no diretrio de
depurao.
4.
Visual C# Consolidado
319
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.
5.
6.
8.
Digite o seguinte:
csc PinvokeTest.cs PinvokeTest
9.
Visual C# Consolidado
320
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
8.
9.
10. Na guia COM, selecione o componente denominado, " biblioteca Tipo de Controle
ActiveMovie ".
11. Clique em Select e, clique em OK.
12. Recrie Interop1.
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.
Visual C# Consolidado
321
6.
Digite o seguinte:
tlbimp %windir%\system32\quartz.dll /out:QuartzTypeLib.dll csc /r:QuartzTypeLib.dll
interop1.cs interop1 %windir%\clock.avi
7.
8.
Digite o seguinte:
csc interop2.cs interop2 %windir%\clock.avi
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
7.
8.
9.
Clique em OK.
Visual C# Consolidado
322
Para criar e executar o Exemplo 2 Part Interop COM a partir da linha de comando
6.
7.
8.
Compilar o servidor:
csc /target:library CSharpServer.cs regasm CSharpServer.dll /tlb:CSharpServer.tlb
9.
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
323
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
5.
6.
8.
Digite o seguinte:
csc ImperativeSecurity.cs ImperativeSecurity
9.
Visual C# Consolidado
324
Segmentao de Exemplo
Download sample
Este Exemplo demonstra as seguintes tcnicas segmentao. Consulte Segmentao (guia de
programao C#) Para obter mais informaes.
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
5.
6.
6.
Digite o seguinte:
cd ThreadStartStop csc ThreadStartStop.cs ThreadStartStop
7.
Digite o seguinte:
cd ..\ThreadPool csc ThreadPool.cs ThreadPool
8.
Digite o seguinte:
cd ..\ThreadSync csc ThreadSync.cs ThreadSync
Visual C# Consolidado
325
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.
6.
Digite o seguinte:
cd FastCopy csc FastCopy.cs /unsafe FastCopy
Visual C# Consolidado
326
7.
Digite o seguinte:
cd ..\ReadFile csc ReadFile.cs /unsafe ReadFile ReadFile.cs
8.
Digite o seguinte:
cd ..\PrintVersion csc PrintVersion.cs /unsafe PrintVersion
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Se voc estiver criando a soluo no modo Release, copie BugTypes.mdb para a pasta
\bin\release.
Para criar e executar o Exemplo OLE DB a partir da linha de comando
Visual C# Consolidado
327
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
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Use o Change Directory (cd) comando para alterar para o Yield Diretrio.
4.
Digite o seguinte:
csc Yield.cs Yield
Visual C# Consolidado
328
Observao de segurana
Este cdigo de Exemplo fornecido para ilustrar um conceito e no deve ser usado em aplicativos
ou sites da Web, como no-pode ilustrar as prticas de codificao mais segura. Microsoft supe
que nenhum RESPONSABILIDADE POR DANOS INCIDENTAIS OU CONSEQENCIAIS o
cdigo do Exemplo deve ser usado para fins diferente da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
329
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.
Use o Change Directory (cd) comando para alterar para o PartialTypes Diretrio.
4.
Digite o seguinte:
csc PartialTypes.cs PartialTypes
Exemplo anulvel
Download sample
Este Exemplo demonstra o uso de tipos anulveis. Esse recurso permite que tipos de valores para
que um estado no inicializada, ou vazio, semelhante a como tipos de referncia podem ser
definidos como null.
Este Observao de segurana cdigo de Exemplo fornecido para ilustrar um conceito e
no deve ser usado em aplicativos ou sites da Web, como no-pode ilustrar as prticas de
codificao mais segura. Microsoft supe que nenhum RESPONSABILIDADE POR DANOS
INCIDENTAIS OU CONSEQENCIAIS o cdigo do Exemplo deve ser usado para fins diferente
da maneira desejada
Para abrir o arquivo de Exemplo no Solution Explorer
4.
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.
Visual C# Consolidado
330
3.
4.
Use o Change Directory (cd) comando para alterar para o diretrio Nullable.
4.
Digite o seguinte:
csc Nullable.cs Nullable
Visual C# Consolidado
331
Como Fazer em C#
http://msdnwiki.microsoft.com/pt-br/mtpswiki/ms186211.aspx
Como Fazer sua porta de entrada para tpicos-chave baseados em tarefas sobre programao
e desenvolvimento de aplicativos em C#. As categorias essenciais sobre o que voc pode fazer
com C# esto listadas neste tpico. Os links fornecem referncias para pginas de ajuda
importantes baseadas em procedimento.
A Linguagem C#
Especificao da Linguagem C# ... Threading Genricos... Trechos de Cdigo
Exemplos mais
O Framework .NET
Entrada e Sada em Arquivos Strings Colees Serializao Componentes
Mdulos (assemblies) e Domnios de Aplicativo mais
Aplicativos do Windows
Criando Aplicativos do Windows ControlesWindows Forms Desenhando mais
Pginas Web e Web Services
Pages Web do ASP.NET XML Web Services mais
Depurao
Usando o Depurador VS Classe Trace .Framework NET Depurao de Transaes
SQL mais
Accesso a Dados
Conectando a Fontes de Dados O SQL Server... Vinculao de Dados mais
Criando Classes
Class Designer... Trabalhando com Classes e Outros Tipos... Criando e Modificando
Membros-tipo... Linhas-mestras para a Criao de Bibliotecas de Classes mais
Segurana
Segurana no Acesso ao Cdigo Prticas Recomendadas de Poltica de Segurana
Conjuntos de Permisses mais
Programao do Office
Programao do Office Controles Word Excel mais
Dispositivos Inteligentes
Visual C# Consolidado
332
Visual C# Consolidado
333
Visual C# Consolidado
334
Visual C# Consolidado
335
Visual C# Consolidado
336
Fornece um exemplo onde uma classe genrica Stack<T> implementa uma interface
genrica IEnumerator<T>. Um vetor de T tipo declarado e a ele so atribudos valores
usando o mtodo Push. No mtodo GetEnumerator, os valores do vetor so retornados
usando a instruo de retorno yield.
Representantes (Delegates)
COMO: Combinar representantes (Representantes Multicast) (Guia de programao C#)
Fornece um exemplo que demonstra como compor representantes de difuso seletiva.
COMO: Declarar, instanciar e usar um representante (Guia de programao C#)
Fornece um exemplo que ilustra como declarar, criar e usar um representate (delegate).
Sobrecarga de operador
COMO: Usar sobrecarga de operador para criar uma classe para nmeros complexos (Guia de
programao C#)
Mostra como voc pode utilizar sobrecarga de operador para criar uma classe para
nmeros complexos chamada Complex e que define adio de complexos.
Interoperabilidade
COMO: Usar interoperabilidade COM para verificar ortografia usando o Word (Guia de
programao C#)
Este exemplo ilustra como usar o verificador ortogrfico do Word em um aplicativo C#.
COMO: Usar interoperabilidade COM para criar uma planilha do Excel (Guia de programao C#)
Este exemplo ilustra como abrir uma planilha j existente do Excel em C# usando
funcionalidades de interoperabilidade COM no .NET Framework.
COMO: Usar cdigo gerenciado como um suplemento de automao para o Excel (Guia de
programao C#)
Este exemplo ilustra como criar um suplemento C# para calcular taxa de imposto de renda
em uma clula em uma planilha do Excel.
COMO: Usar servios de chamada da plataforma para reproduzir um arquivo WAVE (Guia de
programao C#)
Este exemplo ilustra como usar servios de chamada da plataforma para reproduzir um
arquivo de som wave na plataforma Windows.
Cdigo no gerenciado
COMO: Usar ponteiros para copiar um vetor de bytes (Guia de programao C#)
Mostra como usar ponteiros para copiar bytes de um vetor para outro, usando ponteiros.
COMO: Usar a funo ReadFile do Windows (Guia de programao C#)
Mostra como chamar a funo ReadFile do Windows, que requer o uso de um contexto
no gerenciado pois o buffer de leitura requer um ponteiro como parmetro.
Visual C# Consolidado
337
Visual C# Consolidado
338
Mdulos (assemblies)
COMO: Determinar se um arquivo um mdulo (assembly) (Guia de programao C#)
Contm um exemplo que testa uma DLL para verificar se ela um mdulo (assembly).
COMO: Carregar e descarregar mdulos (assemblies) (Guia de programao C#)
Explica como possvel carregar mdulos (assemblies) especficos no domnio de
aplicao atual em tempo de execuo.
COMO: Compartilhar um mdulo (assembly) com outros aplicativos (Guia de programao C#)
Explica como compartilhar um assembly com outros aplicativos.
Domnios de aplicao
Executar cdigo em outro domnio de aplicao (Guia de programao C#)
Mostra como executar um assembly que tenha sido carregado de outro domnio de
aplicao.
COMO: Criar e usar um domnio de aplicao (Guia de programao C#)
Mostra como a sobrecarga de operador pode ser usada para implementar um tipo lgico
tri-valorado.
Amostras
Exemplos no Visual C#
Contm links para abrir ou copiar arquivos dos exemplos que vo de Exemplo de Hello
World at Exemplo de classes genricas (C#).
Visual C# Consolidado
339
Visual C# Consolidado
340
A caixa de dilogo New Project ser exibida. Esta caixa de dilogo lista os diferentes tipos
de aplicativos padro que Visual C# pode criar.
2.
3.
Especificao da Linguagem C#
As verses 1.2 e 2.0 das especificaes da linguagem C# so a fonte autorizada de gramtica e
sintaxe C#. Elas contm informaes detalhadas sobre todos os aspectos da linguagem, incluindo
muitos pontos no abordados na documentao do produto Visual C#.
A especificao 1.2 discute recursos que foram adicionados para a linguagem antes do Visual C#
2005 e a especificao 2.0 discute recursos que foram adicionados para o Visual C# 2005.
As especificaes da linguagem C# esto disponveis no formato Microsoft Word nos seguintes
locais:
No MSDN Online em
http://msdn.microsoft.com/vcsharp/Programming/Language/default.aspx
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.
Viso Geral
Ele declarado dentro de uma classe ou estrutura. Ele deve ser esttico (static) e ele no
deve ser pblico. (No exemplo acima, como no especificamos um modificador de acesso
explicitamente, ele recebe o modificador de acesso padro, que (private) particular).
Parmetros podem ser lidos como argumentos de linha de comando indexados a partir do
zero.
Visual C# Consolidado
341
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
executable.exe a b c
"a"
"b"
"c"
" um "
" dois "
Sada
parameter count = 3 Arg[0] = [a] Arg[1] = [b] Arg[2] = [c]
Visual C# Consolidado
342
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:.
Em seguida, um arquivo em lotes usado para chamar o executvel resultante do exemplo de
cdigo anterior. Porque o cdigo retorna zero, o arquivo em lotes ir reportar xito, mas se o
cdigo anterior alterado para retornar um valor diferente de zero, e ento re-Compiled,
subseqente execuo do arquivo em lotes indicar falha.
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.
Visual C# Consolidado
343
Especificar o construtor de classe base deve ser chamado ao criar instncias da classe
derivada.
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
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
Visual C# Consolidado
344
A sada do exemplo a seguir mostra que somente o valor do campo de classe alterado quando a
instncia de classe passada para o ClassTaker mtodo. O campo struct, no entanto, no altera,
passando sua instncia para o StructTaker mtodo. Isso ocorre porque uma cpia da estrutura
passada para o StructTaker mtodo, enquanto uma referncia para a classe passada para o
ClassTaker mtodo.
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
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);
Visual C# Consolidado
345
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
Visual C# Consolidado
346
Observe que 0 o valor padro de age e o valor padro de name null. Para obter mais
informaes sobre valores padro, consulte Tabela de valores padro (referncia C#).
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
Area of the circle = 19.63
Area of the cylinder = 86.39
Para obter mais exemplos em chamar os construtores de classe base, consulte (referncia C#)
virtual, Substituir (referncia C#). e base (Referncia do C#)
COMO: Declarar e usar propriedades de leitura/escrita (Guia de programao 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
Visual C# Consolidado
347
Person details - Name = N/A, Age = 0 Person details - Name = Joe, Age = 99 Person details - Name = Joe,
Age = 100
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;
Se separado set e get mtodos foram usados para modelar propriedades, o cdigo equivalente
pode parecer isso:
person.SetAge(person.GetAge() + 1);
Aviso que ToString no explicitamente usado no programa. Ele chamado por padro, as
WriteLine chamadas.
COMO: Definir propriedades abstratas (Guia de programao C#)
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
Visual C# Consolidado
348
Quando declarar uma propriedade abstrata (tais como Area, neste exemplo), voc
simplesmente indicar que assessores Propriedade esto disponveis, mas no fazer
implement-las. Neste exemplo, apenas um Obter acessador est disponvel, portanto a
propriedade somente leitura.
O cdigo a seguir mostra as trs subclasses da Shape e como elas substituiro a Area propriedade
para fornecer seus prprios implementao.
C#
// compile with: csc /target:library /reference:abstractshape.dll shapes.cs public class Square : Shape {
private int m_side; public Square(int side, string id) : base(id) { m_side = side; } public override double Area
{ get { // Given the side, return the area of a square: return m_side * m_side; } } } public class Circle : Shape
{ private int m_radius; public Circle(int radius, string id) : base(id) { m_radius = radius; } public override
double Area { get { // Given the radius, return the area of a circle: return m_radius * m_radius *
System.Math.PI; } } } public class Rectangle : Shape { private int m_width; private int m_height; public
Rectangle(int width, int height, string id) : base(id) { m_width = width; m_height = height; } public override
double Area { get { // Given the width and height, return the area of a rectangle: return m_width * m_height;
}}}
Visual C# Consolidado
349
O cdigo a seguir mostra um programa de teste que cria um nmero de Shape-derivado objetos e
imprime suas reas.
C#
// compile with: csc /reference:abstractshape.dll;shapes.dll shapetest.cs class TestClass { static void Main() {
Shape[] shapes = { new Square(5, "Square #1"), new Circle(3, "Circle #1"), new Rectangle( 4, 5, "Rectangle
#1") }; System.Console.WriteLine("Shapes Collection"); foreach (Shape s in shapes) {
System.Console.WriteLine(s); } } }
Sada
Shapes Collection Square #1 Area = 25.00 Circle #1 Area = 28.27 Rectangle #1 Area = 20.00
Visual C# Consolidado
350
// Override some of the methods that can change the list; // invoke event after each public override int
Add(object value) { int i = base.Add(value); OnChanged(System.EventArgs.Empty); return i; } public
override void Clear() { base.Clear(); OnChanged(System.EventArgs.Empty); } public override object this[int
index] { set { base[index] = value; OnChanged(System.EventArgs.Empty); } } } } namespace TestEvents {
using TestCollections; class EventListener { private ListWithChangedEvent m_list; public
EventListener(ListWithChangedEvent list) { m_list = list; // Add "ListChanged" to the Changed event on
m_list: m_list.Changed += new ChangedEventHandler(ListChanged); } // This will be called whenever the
list changes. private void ListChanged(object sender, System.EventArgs e) { System.Console.WriteLine("This
is called when the event fires."); } public void Detach() { // Detach the event and delete the list
m_list.Changed -= new ChangedEventHandler(ListChanged); m_list = null; } } class Test { // Test the
ListWithChangedEvent class. static void Main() { // Create a new list. ListWithChangedEvent list = new
ListWithChangedEvent(); // Create a class that listens to the list's change event. EventListener listener = new
EventListener(list); // Add and remove items from the list. list.Add("item 1"); list.Clear(); listener.Detach(); }
}}
Sada
This is called when the event fires. This is called when the event fires.
Programao robusta
Declarar um evento
Para declarar um evento dentro uma classe, primeiro um Delegar tipo para o evento deve ser
declarado, se nenhum j est declarado.
C#
public delegate void ChangedEventHandler(object sender, System.EventArgs e);
O tipo delegate define o conjunto de argumentos que so passados para o mtodo que
manipula o evento. Vrios eventos podem compartilhar o mesmo tipo delegate, portanto, essa
etapa s necessria se nenhum tipo delegate adequado j tiver sido declarado.
Em seguida, o evento prprio est declarado.
C#
public event ChangedEventHandler Changed;
Chamar um evento
Depois que uma classe tenha declarado um evento, ele pode tratar desse evento exatamente
como um campo do tipo delegate indicado. O campo ou ser nulo, se nenhum cliente tiver
conectado um representante para o evento, ou ento se refere a um representante que deve
ser chamado quando o evento chamado. Assim, chamar um evento geralmente isso, primeiro
verificando nulo e depois chamar o evento.
C#
if (Changed != null) { Changed(this, e); }
Chamar um evento s pode ser feito de dentro da classe que declarado o evento.
Visual C# Consolidado
351
De fora a classe que declarado-lo, um evento parece um campo, mas acesso a esse campo
bastante restrito. Somente as coisas que podem ser causadas so Redigir novo representante
para aquele campo, e removendo um representante de um campo (possivelmente composto).
Isso feito com e -= operadores. o += Para comear a receber chamadas de eventos, cdigo
de cliente primeiro cria um representante do tipo de evento que se refere ao mtodo que deve
ser chamado a partir do evento. Depois ele composes esse representante para qualquer outros
representantes que o evento pode estar conectado ao uso +=.
C#
m_list.Changed += new ChangedEventHandler(ListChanged);
Quando o cdigo do cliente feito recebimento invocaes de eventos, ele remove seu
representante a partir do evento usando operador -=.
C#
m_list.Changed -= new ChangedEventHandler(ListChanged);
COMO: Criar eventos que estejam de acordo com as diretrizes do .NET Framework (Guia de
programao C#)
Permite a linguagem C# para usar qualquer Delegar Tipo, mas o .NET Framework tem mais
estrita diretrizes para representantes e eventos. um Evento Caso voc pretenda para o
componente a ser usado com o .NET Framework, voc provavelmente ser deseja siga estas
diretrizes.
As diretrizes .NET Framework indicar que o tipo delegate usado para um evento deve tomar dois
parmetros: um Objeto de origem parmetro que indica a fonte de evento, e um parmetro
eventos especficos que encapsula qualquer informao adicional sobre o evento. O parmetro
eventos especficos deve derivar da classe EventArgs. Para eventos que no usam qualquer
informao adicional, o .NET Framework fornece a EventHandler classe.
O exemplo a seguir como o cdigo em COMO: Criar um controle que responde a eventos (Guia
de programao C#), exceto que esta verso segue as diretrizes .NET Framework.
Exemplo
C#
namespace TestCollections { // A class that works just like ArrayList, but sends event // notifications
whenever the list changes: public class ListWithChangedEvent : System.Collections.ArrayList { // An event
that clients can use to be notified whenever the // elements of the list change: public event
System.EventHandler Changed; // Invoke the Changed event; called whenever list changes: protected virtual
void OnChanged(System.EventArgs e) { if (Changed != null) { Changed(this, e); } } // Override some of the
methods that can change the list; // invoke event after each: public override int Add(object value) { int i =
base.Add(value); OnChanged(System.EventArgs.Empty); return i; } public override void Clear() {
base.Clear(); OnChanged(System.EventArgs.Empty); } public override object this[int index] { set {
base[index] = value; OnChanged(System.EventArgs.Empty); } } } } namespace TestEvents { using
TestCollections; class EventListener { private ListWithChangedEvent m_list; public
EventListener(ListWithChangedEvent list) { m_list = list; // Add "ListChanged" to the Changed event on
m_list: m_list.Changed += new System.EventHandler(ListChanged); } // This will be called whenever the
list changes: private void ListChanged(object sender, System.EventArgs e) { System.Console.WriteLine("This
is called when the event fires."); } public void Detach() { // Detach the event and delete the list:
m_list.Changed -= new System.EventHandler(ListChanged); m_list = null; } } class Test { // Test the
Visual C# Consolidado
352
ListWithChangedEvent class: static void Main() { // Create a new list: ListWithChangedEvent list = new
ListWithChangedEvent(); // Create a class that listens to the list's change event: EventListener listener =
new EventListener(list); // Add and remove items from the list: list.Add("item 1"); list.Clear();
listener.Detach(); } } }
Sada
This is called when the event fires. This is called when the event fires.
COMO: Usar um dicionrio para armazenar instncias de eventos (Guia de programao C#)
Um uso para accessor-declarations para expor um grande nmero de eventos sem alocando
um campo para cada evento, mas em vez disso, usar um dicionrio para armazenar as instncias
de eventos. S til se voc tiver um nmero muito grande de eventos, mas voc espera que a
maioria dos eventos no ser implementada.
Exemplo
C#
public delegate void Delegate1(int i); public delegate void Delegate2(string s); public class
PropertyEventsSample { private System.Collections.Generic.Dictionary<string, System.Delegate>
eventTable; public PropertyEventsSample() { eventTable = new
System.Collections.Generic.Dictionary<string, System.Delegate>(); eventTable.Add("Event1", null);
eventTable.Add("Event2", null); } public event Delegate1 Event1 { add { eventTable["Event1"] =
(Delegate1)eventTable["Event1"] + value; } remove { eventTable["Event1"] =
(Delegate1)eventTable["Event1"] - value; } } public event Delegate2 Event2 { add { eventTable["Event2"] =
(Delegate2)eventTable["Event2"] + value; } remove { eventTable["Event2"] =
(Delegate2)eventTable["Event2"] - value; } } internal void FireEvent1(int i) { Delegate1 D; if (null != (D =
(Delegate1)eventTable["Event1"])) { D(i); } } internal void FireEvent2(string s) { Delegate2 D; if (null != (D =
(Delegate2)eventTable["Event2"])) { D(s); } } } public class TestClass { public static void
Delegate1Method(int i) { System.Console.WriteLine(i); } public static void Delegate2Method(string s) {
System.Console.WriteLine(s); } static void Main() { PropertyEventsSample p = new
PropertyEventsSample(); p.Event1 += new Delegate1(TestClass.Delegate1Method); p.Event1 += new
Delegate1(TestClass.Delegate1Method); p.Event1 -= new Delegate1(TestClass.Delegate1Method);
p.FireEvent1(2); p.Event2 += new Delegate2(TestClass.Delegate2Method); p.Event2 += new
Visual C# Consolidado
353
Sada
2 TestString
COMO: Implementar duas interfaces que possuam um evento com o mesmo nome (Guia de
programao C#)
Outro uso para Evento Propriedades aborda a situao onde voc estiver implementando duas
interfaces, cada um com um evento com o mesmo nome. Nesse caso, voc deve usar uma
propriedade de evento explicitamente de implementao.
No entanto, ao explicitamente implementar eventos na interface, voc precisar fornecer adicionar
e remover mtodos.
Exemplo
C#
public delegate void Delegate1(); public delegate int Delegate2(string s); public interface I1 { event Delegate1
TestEvent; } public interface I2 { event Delegate2 TestEvent; } public class ExplicitEventsSample : I1, I2 {
public event Delegate1 TestEvent; // normal implementation of I1.TestEvent. private Delegate2
TestEvent2Storage; // underlying storage for I2.TestEvent. event Delegate2 I2.TestEvent // explicit
implementation of I2.TestEvent. { add { TestEvent2Storage += value; } remove { TestEvent2Storage -=
value; } } private void FireEvents() { if (TestEvent != null) { TestEvent(); } if (TestEvent2Storage != null) {
TestEvent2Storage("hello"); } } }
COMO: Criar manipuladores de evento no Visual C# Code Editor (Guia de programao C#)
O Editor de Cdigo Visual C# oferece uma maneira fcil de criar manipuladores de eventos para o
Windows Forms enquanto trabalha no modo Design. A alternativa exibir o cdigo fonte no modo
de exibio Source e adicionar o manipulador de eventos no cdigo.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Visual Studio configuraes.
Para criar um manipulador de eventos usando o Editor de Cdigo Visual C#
1.
Se clique com o boto direito do mouse no formulrio ou controle para o qual voc deseja
criar um manipulador de eventos, e selecione Properties. no estiver visvel, no modo
Design, o Properties Window
2.
3.
Clique duas vezes no evento que voc deseja criar, por exemplo o evento Load.
Visual C# Cria um mtodo do manipulador de evento vazio e adiciona-o para o seu cdigo.
Como alternativa voc pode adicionar o cdigo em mos no modo de exibio de cdigo.
Por exemplo as seguintes linhas de cdigo declarar um manipulador de eventos de carga
para uma Form classe chamada Form1.
Visual C# Consolidado
354
C#
private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling
code here. }
Sada
Length: 30 Width: 20
Programao robusta
Observe tambm que as seguintes linhas no mtodo Main, e com xito imprima as
dimenses da caixa porque os mtodos esto sendo chamados de uma instncia da interface:
C#
System.Console.WriteLine("Length: {0}", dimensions.getLength()); System.Console.WriteLine("Width:
{0}", dimensions.getWidth());
Visual C# Consolidado
355
representam os sistemas de medida diferente. As duas interfaces ter nomes idnticos membro,
Length e Width.
Exemplo
C#
// Declare the English units interface: interface IEnglishDimensions { float Length(); float Width(); } //
Declare the metric units interface: interface IMetricDimensions { float Length(); float Width(); } // Declare
the Box class that implements the two interfaces: // IEnglishDimensions and IMetricDimensions: class Box :
IEnglishDimensions, IMetricDimensions { float lengthInches; float widthInches; public Box(float length,
float width) { lengthInches = length; widthInches = width; } // Explicitly implement the members of
IEnglishDimensions: float IEnglishDimensions.Length() { return lengthInches; } float
IEnglishDimensions.Width() { return widthInches; } // Explicitly implement the members of
IMetricDimensions: float IMetricDimensions.Length() { return lengthInches * 2.54f; } float
IMetricDimensions.Width() { return widthInches * 2.54f; } static void Main() { // Declare a class instance
box1: Box box1 = new Box(30.0f, 20.0f); // Declare an instance of the English units interface:
IEnglishDimensions eDimensions = (IEnglishDimensions)box1; // Declare an instance of the metric units
interface: IMetricDimensions mDimensions = (IMetricDimensions)box1; // Print dimensions in English
units: System.Console.WriteLine("Length(in): {0}", eDimensions.Length());
System.Console.WriteLine("Width (in): {0}", eDimensions.Width()); // Print dimensions in metric units:
System.Console.WriteLine("Length(cm): {0}", mDimensions.Length()); System.Console.WriteLine("Width
(cm): {0}", mDimensions.Width()); } }
Sada
Length(in): 30 Width (in): 20 Length(cm): 76.2 Width (cm): 50.8
Programao robusta
Se voc desejar tornar as medidas padro em ingls unidades, implementar os mtodos Length e
Width Normalmente, e explicitamente implementar os mtodos Comprimento e Largura da
interface IMetricDimensions:
C#
// Normal implementation: public float Length() { return lengthInches; } public float Width() { return
widthInches; } // Explicit implementation: float IMetricDimensions.Length() { return lengthInches * 2.54f; }
float IMetricDimensions.Width() { return widthInches * 2.54f; }
Nesse caso, voc pode acessar as unidades ingls da instncia de classe e acessar as unidades
mtrica de interface a instncia:
C#
public static void Test() { Box box1 = new Box(30.0f, 20.0f); IMetricDimensions mDimensions =
(IMetricDimensions)box1; System.Console.WriteLine("Length(in): {0}", box1.Length());
System.Console.WriteLine("Width (in): {0}", box1.Width()); System.Console.WriteLine("Length(cm): {0}",
mDimensions.Length()); System.Console.WriteLine("Width (cm): {0}", mDimensions.Width()); }
Visual C# Consolidado
356
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
Visual C# Consolidado
357
os parmetros tipo escolhidos. O resultado uma classe Safe tipo-adequado para sua escolha de
tipos, como o cdigo a seguir ilustra.
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.
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++
Tipos e Generics aninhadas
Um tipo aninhado em um tipo genrico pode depender os parmetros os tipo de delimitador o tipo
genrico, e esses tipos aninhados so considerados genricos pelo tempo de execuo de idioma
comum, mesmo que eles no tenham parmetros tipo genrico de seus prprios. Quando voc
Visual C# Consolidado
358
cria uma instncia de um tipo aninhado, necessrio para especificar argumentos Tipo para todos
os delimitador tipos genricos.
Genricas colees no .NET Framework
Do System.Collections.Generic um nmero de classes a coleo genrica fornecido na
biblioteca de classe do .NET Framework, no e System.Collections.ObjectModel espaos de
nome. Para obter mais informaes sobre essas classes, consulte Comumente usados tipos da
coleo.
System.Collections.Generic
Muitos dos tipos a coleo genrica so diretas analogs dos tipos nongeneric. Dictionary uma
verso genrica do Hashtable; ele utiliza a estrutura KeyValuePair genrica para enumerao, em
vez de DictionaryEntry.
List uma verso do ArrayList genrico. No h genrico Queue e Stack Classes correspondente
s verses nongeneric.
Existem verses genrico e nongeneric do SortedList, ambos os quais so hbridas entre um
dicionrio e uma lista, e que tm caractersticas de desempenho semelhante. A SortedDictionary
classe genrico um dicionrio que oferece caractersticas de desempenho diferente, e que
possui nenhum contraparte nongeneric puro.
A LinkedList classe genrico uma lista vinculada verdadeira. No tem nenhum contraparte
nongeneric.
System.Collections.ObjectModel
A Collection classe genrico oferece uma classe base para derivar seus prprios tipos a coleo
genrica. A ReadOnlyCollection classe fornece uma maneira fcil de produzir uma coleo
somente leitura de qualquer tipo que implementa a IList interface genrico. A KeyedCollection
classe genrica oferece uma maneira para armazenar objetos que contm suas prprias chaves.
Outros tipos genrico
A Nullable estrutura genrica, voc pode usar tipos valor como se eles pode ser atribudos null.
Isso pode ser til ao trabalhar com consultas de banco de dados, onde campos que contm tipos
de valor podem ser ausentes. O parmetro tipo genrico pode ser qualquer tipo de valor.
Observao
Em C# no necessrio para usar Nullable explicitamente, porque o idioma tem sintaxe para
tipos anulveis.
A ArraySegment estrutura genrica oferece uma maneira para delimitar um intervalo de elementos
em uma matriz unidimensional, baseada em zero de qualquer tipo. O parmetro tipo genrico o
tipo de elementos da matriz na.
O EventHandler representante genrico elimina a necessidade para declarar um tipo delegate
para manipular eventos se o evento segue o padro tratamento de eventos-usado pelo .NET
Framework. Por exemplo, suponha que voc tiver criado uma MyEventArgs classe, derivado de
Visual C# Consolidado
359
EventArgs, para manter os dados para o evento. Ento voc pode declarar o evento da seguinte
maneira:
C#
public event EventHandler<MyEventArgs> MyEvent;
Visual C# Consolidado
360
O encadeamento representantes
Muitos dos mtodos que usam esses representantes retornar uma matriz ou lista, que pode ser
passada para outro mtodo. Por exemplo, se voc desejar selecionar determinados elementos de
uma matriz, converter esses elementos para um novo tipo, e salv-las em uma nova matriz, voc
pode passar a matriz retornada pelo mtodo FindAll genrico para o ConvertAll mtodo
genrico. Se o novo tipo elemento possui uma ordem de classificao natural, voc poder passar
a matriz retornada pelo mtodo ConvertAll genrico para o Sort mtodo genrico.
Interfaces genrico
Interfaces genricos fornecem contrapartes Safe tipo-a nongeneric interfaces para Ordem e
igualdade comparaes e para funcionalidade compartilhado por tipos a coleo genrica.
Igualdade e classificao Comparisons
Do System.IComparable no espao para nome System, e System.IEquatable genricos interfaces,
como suas contrapartes nongeneric, definir mtodos para ordenar comparaes e comparaes
de igualdade, respectivamente. Tipos implementar essas interfaces para fornecer a capacidade de
executar tais comparaes.
No espao para nome System.Collections.Generic, ou System.IEquatable interface genrica e
eles fornecem uma maneira para redefinir os relacionamentos de tipos que fazem. e
IEqualityComparer Definir uma comparao ordenao ou igualdade para tipos que no
implementam oferta interfaces genrico uma maneira o IComparer o System.IComparable Essas
interfaces so usados por mtodos e construtores de muitas das classes a coleo genrica. Por
exemplo, voc pode passar um genrica IComparer para o construtor da classe
SortedDictionary para especificar uma ordem de classificao para um tipo que no implementa
genrico System.IComparable. Existem overloads do System.Array.Sort mtodo esttico
genrico e o System.Collections.Generic.List.Sort(System.Collections.Generic.IComparer{ mtodo
da instncia para classificao matriz e lista usando implementaes genricas IComparer.
O Comparer e tambm fornecem comparaes ordem e igualdade padro por seus respectivas
System.Collections.Generic.Comparer.Default e
System.Collections.Generic.EqualityComparer.Default Propriedades. e EqualityComparer Classes
genricos fornecem classes bsicas para implementaes de e IEqualityComparer Interfaces
genricos, o IComparer
Funcionalidade coleo
A ICollection interface genrica a interface para a coleo genrica tipos bsico. Fornece
funcionalidade bsica para adicionar, remover, copiar, e enumerar elementos. Herda ICollection
da genrico IEnumerable e nongeneric IEnumerable.
A IList interface genrica estende a ICollection interface genrica com mtodos para
recuperao indexado.
A IDictionary interface genrica estende a ICollection interface genrica com mtodos para
recuperao com chave. Tipos do Dicionrio genrico na biblioteca de classes base do .NET
Framework tambm implementam a interface nongeneric IDictionary.
A IEnumerable interface genrico oferece uma estrutura de enumerador genrico. A IEnumerator
interface implementada por enumeradores genricos genrico herda a interface nongeneric
IEnumerator, e MoveNext. e Reset membros, que no faa depender o parmetro T de tipo,
aparecem apenas em uma interface nongeneric Isso significa que qualquer consumidor sobre a
interface nongeneric tambm pode consumir a interface genrica.
Visual C# Consolidado
361
Limitaes de Generics
A seguir esto algumas limitaes de generics no .NET Framework verso 2.0:
Tipos genricos podem ser derivados da maioria das classes base, como
MarshalByRefObject (e restries podem ser usadas para exigir que parmetros tipo genrico
derivar de classes base como MarshalByRefObject),. mas nesta verso no h suporte para
tipos genricos vinculados contexto- Um tipo genrico pode ser derivado de
ContextBoundObject, mas ao tentar criar uma instncia do que digitar causas. um
TypeLoadException
Enumeraes no podem ter parmetros tipo genrico. Uma enumerao pode ser
genrica somente por acaso, por exemplo porque ele estiver aninhado em um tipo genrico
definido com Visual Basic, C#, ou C++. Para obter mais informaes, consulte Enumeraes
no CTS (Common Type System).
Leve mtodos dinmicos no podem ser genricos. Para obter mais informaes sobre
mtodos dinmicos, consulte Reflexo Emit dinmico cenrios mtodo.
No Visual Basic, C# e C++ um tipo aninhado entre um tipo genrico no pode ser
instanciado a menos que tipos tiverem sido atribudos aos parmetros os tipo de todos os tipos
de incluso. Outra maneira de dizer isso que no reflexo, um tipo aninhado definido usando
esses idiomas inclui os parmetros os tipo de todos os seus tipos delimitador. Isso permite que
os parmetros os Tipo do colocando tipos a ser usado nas definies as membro de um tipo
aninhado. Para obter mais informaes, consulte " Tipos Nested " no MakeGenericType.
Observao
Um tipo aninhado que definido pelo emissor cdigo em um conjunto dinmico ou usando
parmetros do seu colocando tipos; entretanto, se no tiver depois os parmetros tipo so no no
escopo na classe aninhada. No necessrio para incluir o tipo a Assembler MSIL (Ilasm.exe)
Para obter mais informaes, consulte " Tipos Nested " no MakeGenericType.
Vantagens de Generics
Permitindo que voc para especificar os tipos especficos acionados por uma classe genrico ou
mtodo, o recurso generics desloca a sobrecarga de segurana de tipos de voc para o
compilador. No necessrio ao gravar cdigo para teste para o tipo de dados correto, porque ele
imposto em tempo de compilao. A necessidade de diretores tipo e a possibilidade de erros em
tempo de execuo so reduzidas.
Generics fornecem segurana tipo sem a sobrecarga de vrias implementaes. Por exemplo, crie
uma lista vinculada de seqncias com a seguinte declarao de varivel:
C#
LinkedList<string> llist = new LinkedList<string>();
No necessrio para herdar de um tipo base e substituem membros. A lista vinculada est
pronta para uso imediato. Consulte System.Collections.Generic e System.Collections.ObjectModel
para os tipos a coleo genrica fornecidos pelo .NET Framework.
Alm de segurana de tipo, tipos a coleo genrica geralmente executar melhor para armazenar
e manipular tipos valor porque no h h necessidade de caixa os tipos valor.
Visual C# Consolidado
362
Visual C# Consolidado
363
O exemplo de cdigo a seguir mostra uma maneira de chamar o mtodo, usando Int para o
argumento Tipo:
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#
Visual C# Consolidado
364
Especificao da Linguagem C#
Para obter mais informaes, consulte as sees a seguir no Especificao da Linguagem C#:
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
Onde: New() T
where T : <base
class name>
where T :
<interface
name>
Onde: U T
Visual C# Consolidado
365
T data; public Node(T t) { next = null; data = t; } public Node Next { get { return next; } set { next = value; } }
public T Data { get { return data; } set { data = value; } } } private Node head; public GenericList()
//constructor { head = null; } public void AddHead(T t) { Node n = new Node(t); n.Next = head; head = n; }
public IEnumerator<T> GetEnumerator() { Node current = head; while (current != null) { yield return
current.Data; current = current.Next; } } public T FindFirstOccurrence(string s) { Node current = head; T t =
null; while (current != null) { //The constraint enables access to the Name property. if (current.Data.Name
== s) { t = current.Data; break; } else { current = current.Next; } } return t; } }
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() { // ... }
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.
Unbounded parmetros tipo
Parmetros tipo que tm sem restries, como T na classe SampleClass<T>{} pblica, so
chamados parmetros tipo unbounded. Parmetros tipo unbounded ter as seguintes regras:
Voc pode comparar para Nulo. Se um parmetro unbounded comparado com null, a
comparao sempre retornar FALSE se o argumento Tipo um tipo de valor.
Visual C# Consolidado
366
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# 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#)
Neste exemplo a genrica Classe Stack<T> implementa o Interface IEnumerator<T> Genrico.
Uma matriz de tipo T declarada e atribudo valores usando o mtodo Push. No mtodo
GetEnumerator, os valores da matriz so retornados usando a yield return instruo.
O no-genricos GetEnumerator tambm implementado, porque IEnumerable<T> herdado
IEnumerable. Este exemplo mostra a implementao tpica, que para o mtodo no-generic para
simplesmente encaminhar a chamada para o mtodo genrico.
Exemplo
C#
using System.Collections; using System.Collections.Generic; namespace GenericIteratorExample { public
class Stack<T> : IEnumerable<T> { private T[] values = new T[100]; private int top = 0; public void Push(T
t) { values[top++] = t; } public T Pop() { return values[--top]; } // These make Stack<T> implement
IEnumerable<T> allowing // a stack to be used in a foreach statement. public IEnumerator<T>
GetEnumerator() { for (int i = top; --i >= 0; ) { yield return values[i]; } } IEnumerator
IEnumerable.GetEnumerator() { return GetEnumerator(); } // Iterate from top to bottom. public
IEnumerable<T> TopToBottom { get { // Since we implement IEnumerable<T> // and the default iteration
is top to bottom, // just return the object. return this; } } // Iterate from bottom to top. public
IEnumerable<T> BottomToTop { get { for (int i = 0; i < top; i++) { yield return values[i]; } } } //A
parameterized iterator that return n items from the top public IEnumerable<T> TopN(int n) { // in this
example we return less than N if necessary int j = n >= top ? 0 : top - n; for (int i = top; --i >= j; ) { yield
return values[i]; } } } //This code uses a stack and the TopToBottom and BottomToTop properties //to
enumerate the elements of the stack. class Test { static void Main() { Stack<int> s = new Stack<int>(); for
(int i = 0; i < 10; i++) { s.Push(i); } // Prints: 9 8 7 6 5 4 3 2 1 0 // Foreach legal since s implements
IEnumerable<int> foreach (int n in s) { System.Console.Write("{0} ", n); } System.Console.WriteLine(); //
Prints: 9 8 7 6 5 4 3 2 1 0 // Foreach legal since s.TopToBottom returns IEnumerable<int> foreach (int n in
s.TopToBottom) { System.Console.Write("{0} ", n); } System.Console.WriteLine(); // Prints: 0 1 2 3 4 5 6 7 8
9 // Foreach legal since s.BottomToTop returns IEnumerable<int> foreach (int n in s.BottomToTop) {
System.Console.Write("{0} ", n); } System.Console.WriteLine(); // Prints: 9 8 7 6 5 4 3 // Foreach legal since
s.TopN returns IEnumerable<int> foreach (int n in s.TopN(7)) { System.Console.Write("{0} ", n); }
System.Console.WriteLine(); } } }
Visual C# Consolidado
368
Sada
9876543210987654321001234567899876543
Sada
Invoking delegate a: Hello, A! Invoking delegate b: Goodbye, B! Invoking delegate c: Hello, C! Goodbye, C!
Invoking delegate d: Goodbye, D!
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;
Visual C# Consolidado
369
Sada
Paperback Book Titles: The C Programming Language The Unicode Standard 2.0 Dogbert's Clues for the
Clueless Average Paperback Book Price: $23.97
Programao robusta
Declarar um representante.
A instruo a seguir:
C#
public delegate void ProcessBookDelegate(Book book);
declara um novo tipo delegate. Cada tipo delegate descreve o nmero e tipos dos argumentos,
e o tipo do valor de retorno dos mtodos que ele pode encapsular. Sempre que um novo
Visual C# Consolidado
370
conjunto de tipos de argumento ou tipo de valor de retorno for necessrio, um novo tipo
delegate deve ser declarado.
Instanciar um representante.
Depois que um tipo delegate tiver sido declarado, um objeto de representante deve ser criado
e associado com um mtodo especfico. No exemplo acima, isso feito, passando o PrintTitle
mtodo para o ProcessPaperbackBooks mtodo, como este:
C#
bookDB.ProcessPaperbackBooks(PrintTitle);
Visual C# Consolidado
371
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 Spellverificao do Word em seu aplicativo Visual C#. Para obter mais informaes, consulte
ProofreadingErrors e Objetos Microsoft Word.
Exemplo
Este exemplo ilustra como usar Verificador ortogrfico do Word a partir de um aplicativo C#. Cria
um novo Word.application objeto usando interoperabilidade COM. Em seguida, utiliza a
ProofreadingErrors coleo em um Range objeto e localiza as palavras incorretas no intervalo.
C#
using System.Reflection; using Word = Microsoft.Office.Interop.Word; namespace WordSpell { public partial
class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private
System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; public Form1()
//constructor { InitializeComponent(); } private void button1_Click(object sender, System.EventArgs e) {
Word.Application app = new Word.Application(); int errors = 0; if (textBox1.Text.Length > 0) { app.Visible =
false; // Setting these variables is comparable to passing null to the function. // This is necessary because the
C# null cannot be passed by reference. object template = Missing.Value; object newTemplate =
Missing.Value; object documentType = Missing.Value; object visible = true; Word._Document doc1 =
app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
doc1.Words.First.InsertBefore(textBox1.Text); Word.ProofreadingErrors spellErrorsColl =
doc1.SpellingErrors; errors = spellErrorsColl.Count; object optional = Missing.Value; doc1.CheckSpelling( ref
optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref optional, ref
optional, ref optional, ref optional, ref optional); label1.Text = errors + " errors corrected "; object first = 0;
object last = doc1.Characters.Count - 1; textBox1.Text = doc1.Range(ref first, ref last).Text; } object
saveChanges = false; object originalFormat = Missing.Value; object routeDocument = Missing.Value;
app.Quit(ref saveChanges, ref originalFormat, ref routeDocument); } } }
Compilando o cdigo
Este exemplo requer Word para ser instalado em seu sistema e dependendo da verso do Office
voc tiver instalado, o Word conjunto pode ser chamado Microsoft Office 10 Biblioteca de objetos
ou biblioteca de objetos 11 Word.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Visual C# Consolidado
372
2.
3.
4.
Incluir o Word conjunto como uma referncia para o projeto. Clique com o boto direito do
mouse no projeto, clique em Add Reference, clique na COM guia da caixa Add Reference
de dilogo. Clique duas vezes Microsoft Office 11 Object Library, e pressione OK.
Observe que as caixas de dilogo e comandos de menu voc ver podem diferir dos
descritos na Ajuda dependendo do seu ativos configuraes ou edio. Para alterar as
configuraes, escolha Import and Export Settings (Importar e Exportar Configuraes) no
menu Tools (Ferramentas). Para mais informaes, consulte Configuraes do Visual
Studio.
Segurana
Para usar interoperabilidade COM, voc deve ter permisses de segurana de usurio energia ou
administrador. Para obter mais informaes, consulte Segurana do .NET Framework.
COMO: Usar interoperabilidade COM para criar uma planilha do Excel (Guia de programao
C#)
O exemplo de cdigo a seguir ilustra como usar COM interop para criar uma Excel planilha. Para
obter mais informaes sobre Excel, consulte Objetos do Microsoft Excel, e Mtodo Open
Este exemplo ilustra como abrir uma planilha existente Excel no C# using Capacidade .NET
Framework COM interop. O Excel conjunto usado para abrir e inserir dados em um intervalo de
clulas na planilha Excel.
Observao
Visual C# Consolidado
373
Voc deve ter Excel instalado em seu sistema para este cdigo seja executado corretamente.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para criar uma planilha do Excel com interoperabilidade com
1.
2.
Incluir o conjunto Excel como uma referncia para o projeto Right-Click no projeto,
selecione Add Reference.:
3.
Clique na COM guia da caixa Add Reference de dilogo, e Localizar Microsoft Excel 11
Object Library.
4.
5.
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.
Calcular imposto de renda
Uma tabela de imposto tpica permite para calcular o imposto fornecido receita anual de uma
pessoa. Por exemplo, a seguir mostra uma tabela de imposto hipottico para indivduos.
Uma tabela imposto exemplo
1.
2.
3.
4.
5.
6.
Se renda for sobre $311,950, o imposto ser 35 por cento da quantidade sobre $311,950
mais $90,514.50.
Criar um suplemento de automao para Excel usando o Visual Studio e cdigo gerenciado
1.
2.
3.
Visual C# Consolidado
375
Executando o cdigo
Executar o suplemento do Excel
Observe que as caixas de dilogo e comandos de menu voc ver podem diferir dos
descritos na Ajuda dependendo do seu ativos configuraes ou edio. Para alterar as
configuraes, escolha Import and Export Settings (Importar e Exportar Configuraes) no
menu Tools (Ferramentas). Para mais informaes, consulte Configuraes do Visual Studio.
Segurana
Para usar a interoperabilidade COM, voc deve ter permisses de segurana de usurio energia
ou administrador. Para obter mais informaes, consulte Segurana do .NET Framework.
COMO: Usar servios de chamada da plataforma para reproduzir um arquivo WAVE (Guia de
programao C#)
O exemplo de cdigo C# a seguir ilustra como usar plataforma invocar servios para reproduzir
um arquivo de som wave na plataforma Windows.
Exemplo
Este cdigo de exemplo usa DllImport para ponto de entrada mtodo de importao winmm.dll
na PlaySound como Form1 PlaySound(). O exemplo tem um Windows Form simples com um
boto. Clicar no boto abre uma caixa de dilogo padro janelas OpenFileDialog para que voc
possa abri um arquivo para executar. Quando um arquivo wave selecionado, ela disputada
usando o PlaySound() mtodo do mtodo do conjunto winmm.DLL. Para obter mais informaes
no mtodo winmm.DLL na PlaySound, consulte Usando. Procurar e selecione um arquivo com
uma extenso.wav, e, em seguida clique em Open Para executar o arquivo wave usando
plataforma chamar. Uma caixa de texto mostra o caminho completo do arquivo selecionado.
Caixa Open Files de dilogo filtrada para mostrar somente arquivos com uma extenso.wav
atravs das configuraes de filtro:
C#
dialog1.Filter = "Wav Files (*.wav)|*.wav";
C#
using System.Windows.Forms; namespace WinSound { public partial class Form1 : Form { private TextBox
textBox1; private Button button1; public Form1() //constructor { InitializeComponent(); }
Visual C# Consolidado
376
Compilando o cdigo
2.
3.
4.
HOW TO: Use ponteiros para copiar uma matriz de bytes (guia de programao C#)
O exemplo a seguir utiliza ponteiros para copiar bytes de uma matriz para outro usando ponteiros.
Este exemplo usa a No seguro palavra-chave, que permite ponteiros a ser usado no mtodo
Copy. A Fixo instruo usada para declarar ponteiros para as matrizes origem e destino. Isso
Pinos o local da origem e destino matriz na memria para que eles no sero movidos por coleta
de lixo. Esses blocos de memria ser unpinneds quando conclui o fixed Bloco. Porque a funo
Copiar neste exemplo usa a unsafe palavra-chave, ele deve ser compilado com /unsafe Opo
de compilador.
Exemplo
C#
// compile with: /unsafe
Visual C# Consolidado
377
C#
class TestCopy { // The unsafe keyword allows pointers to be used within the following method: static unsafe
void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count) { if (src == null || srcIndex < 0 || dst ==
null || dstIndex < 0 || count < 0) { throw new System.ArgumentException(); } int srcLen = src.Length; int
dstLen = dst.Length; if (srcLen - srcIndex < count || dstLen - dstIndex < count) { throw new
System.ArgumentException(); } // The following fixed statement pins the location of the src and dst objects
// in memory so that they will not be moved by garbage collection. fixed (byte* pSrc = src, pDst = dst) { byte*
ps = pSrc; byte* pd = pDst; // Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
for (int i = 0 ; i < count / 4 ; i++) { *((int*)pd) = *((int*)ps); pd += 4; ps += 4; } // Complete the copy by
moving any bytes that weren't moved in blocks of 4: for (int i = 0; i < count % 4 ; i++) { *pd = *ps; pd++;
ps++; } } } static void Main() { byte[] a = new byte[100]; byte[] b = new byte[100]; for (int i = 0; i < 100; ++i)
{ a[i] = (byte)i; } Copy(a, 0, b, 0, 100); System.Console.WriteLine("The first 10 elements are:"); for (int i = 0;
i < 10; ++i) { System.Console.Write(b[i] + " "); } System.Console.WriteLine("\n"); } }
Sada
The first 10 elements are: 0 1 2 3 4 5 6 7 8 9
Visual C# Consolidado
378
A Worker classe contm um mtodo adicional que usado para indicar aos DoWork que ela deve
retornar. Esse mtodo for chamado RequestStop, e tem a seguinte aparncia:
C#
public void RequestStop() { _shouldStop = true; }
O RequestStop mtodo simplesmente atribui o _shouldStop membro dados para true. Porque esse
membro de dados fica marcado como o DoWork mtodo, isso tem o efeito de causar DoWork para
retornar, INDIRETO assim encerrando o segmento de trabalho. No entanto, importante observar
que DoWork e RequestStop ser executado por diferentes segmentos. DoWork executado pelo
segmento de trabalho, e RequestStop executado pelo segmento primrio, para o _shouldStop
membro dos dados declarado volatile, como isso:
C#
private volatile bool _shouldStop;
Palavra-chave volatile alerta o compilador vrios segmentos acessar o _shouldStop membro dos
dados, e portanto ele no deve fazer suposies de otimizao sobre o estado deste membro.
Para obter mais informaes, consulte voltil (referncia C#).
O uso volatile com o _shouldStop Membro de dados permite que ns para com segurana acessar
este membro de vrios segmentos sem o uso de segmento formal tcnicas de sincronizao, mas
apenas porque _shouldStop . um bool Isso significa que operaes somente nico e atmicas
so necessrias para modificar _shouldStop. Se, contudo, esse membro de dados eram uma
classe, estrutura, ou matriz, acessando-de vrios segmentos, provavelmente resultam em
corrupo de dados intermitentes. Considere um segmento que altera os valores em uma matriz.
Windows regularmente interrompe segmentos para permitir que outros segmentos para executar,
Visual C# Consolidado
379
para este segmento pode ser interrompido aps atribuir alguns elementos da matriz, mas antes de
atribuir outros. Isso significa a matriz agora tem um estado que o programador nunca pretendido,
e outro segmento ler essa matriz pode falhar como resultado.
Antes de realmente criar o segmento de trabalho, a Main funo cria uma instncia de Thread um
Worker objeto e. O objeto do segmento est configurado para usar o Worker.DoWork mtodo como
uma entrada ponto, passando uma referncia a esse mtodo para o Thread Construtor, como
este:
C#
Worker workerObject = new Worker(); Thread workerThread = new Thread(workerObject.DoWork);
Nesse ponto, embora o objeto do segmento de trabalho existir e estiver configurada, o segmento
de trabalho real foi ainda criado. Isso no acontecer at Main Chamadas o Start mtodo:
C#
workerThread.Start();
Em seguida, o segmento primrio interrompido brevemente com uma chamada para Sleep. Isso
insures funo do segmento DoWork de trabalho que ser executado o loop dentro o DoWork
Mtodo de iteraes de alguns antes a Main funo executa os comandos mais:
C#
Thread.Sleep(1);
Aps o milissegundo 1 expirar, Main sinais para o objeto do segmento de trabalho que ele deve
terminar usando o Worker.RequestStop mtodo apresentado anteriormente:
C#
workerObject.RequestStop();
Tambm possvel para finalizar um segmento de outro segmento com uma chamada para Abort,
mas isso fora termina o segmento afetado sem preocupao para se ele concluiu a tarefa e
oferece nenhum Oportunidade para a limpeza de recursos. A tcnica mostrada nesse exemplo
prefervel.
Finalmente, a Main funo chama o Join mtodo para o objeto do segmento de trabalho. Este
mtodo faz o segmento atual para bloquear, ou espera, at que o segmento que representa o
objeto termina. Portanto, Join no retornar at o operador segmento retorna, assim encerrando
prprio:
C#
Visual C# Consolidado
380
workerThread.Join();
Neste ponto apenas o segmento primrio executando Main existe. Ele exibe uma mensagem final,
e depois retorna, encerrando o segmento primrio, bem.
O exemplo completo aparece abaixo.
Exemplo
C#
using System; using System.Threading; public class Worker { // This method will be called when the thread
is started. public void DoWork() { while (!_shouldStop) { Console.WriteLine("worker thread: working..."); }
Console.WriteLine("worker thread: terminating gracefully."); } public void RequestStop() { _shouldStop =
true; } // Volatile is used as hint to the compiler that this data // member will be accessed by multiple
threads. private volatile bool _shouldStop; } public class WorkerThreadExample { static void Main() { //
Create the thread object. This does not start the thread. Worker workerObject = new Worker(); Thread
workerThread = new Thread(workerObject.DoWork); // Start the worker thread. workerThread.Start();
Console.WriteLine("main thread: Starting worker thread..."); // Loop until worker thread activates. while
(!workerThread.IsAlive); // Put the main thread to sleep for 1 millisecond to // allow the worker thread to do
some work: Thread.Sleep(1); // Request that the worker thread stop itself: workerObject.RequestStop(); //
Use the Join method to block the current thread // until the object's thread terminates. workerThread.Join();
Console.WriteLine("main thread: Worker thread has terminated."); } }
Sada de exemplo
main thread: starting worker thread... worker thread: working... worker thread: working... worker thread:
working... worker thread: working... worker thread: working... worker thread: working... worker thread:
working... worker thread: working... worker thread: working... worker thread: working... worker thread:
working... worker thread: terminating gracefully... main thread: worker thread has terminated
Visual C# Consolidado
381
A AutoResetEvent classe usada para o novo item " " evento porque voc deseja esse evento
para redefinir automaticamente cada vez o responde do segmento do consumidor para este
evento. Como alternativa, a ManualResetEvent classe usada para o evento " Sair " porque
voc deseja vrios segmentos a responder quando esse evento sinalizado. O evento se voc
usou AutoResetEvent Em vez disso, seria reverter para um estado no-signaled depois apenas
um segmento respondeu ao evento. O outro segmento no pode responder, e, nesse caso,
falhar encerrar.
A SyncEvents classe cria os dois eventos e armazena-los de duas formas diferentes e
ManualResetEvent,.: como EventWaitHandle, que a classe base para ambos AutoResetEvent
e em uma matriz com base em WaitHandle Como voc ver na discusso do segmento do
consumidor, essa matriz necessrio para que o segmento do consumidor pode responder a
qualquer evento.
Os segmentos consumidor e o Producer so representados pelas classes chamados Consumer e
Producer, ambos os quais definir um mtodo chamado ThreadRun. Esses mtodos so usados
como os pontos de entrada para a segmentos de trabalho que cria o Main mtodo.
O ThreadRun mtodo definido pela classe Producer tem a seguinte aparncia:
C#
// Producer.ThreadRun public void ThreadRun() { int count = 0; Random r = new Random(); while
(!_syncEvents.ExitThreadEvent.WaitOne(0, false)) { lock (((ICollection)_queue).SyncRoot) { while
(_queue.Count < 20) { _queue.Enqueue(r.Next(0,100)); _syncEvents.NewItemEvent.Set(); count++; } } }
Console.WriteLine("Producer thread: produced {0} items", count); }
Esse mtodo entrar em loop at o evento " Sair segmento " torna-se sinalizado. O estado deste
evento testado com o WaitOne mtodo, usando a ExitThreadEvent propriedade definida pela
classe SyncEvents. Nesse caso o estado do evento verificado sem bloquear o segmento atual
porque o primeiro argumento usado com WaitOne zero, indicando que o mtodo deve retornar
imediatamente. Se WaitOne retorna true, e o evento em questo atualmente sinalizado. Se o
ThreadRun mtodo retorna, ento, que tem o efeito de encerrando o segmento de trabalho
executando esse mtodo.
At que o evento " Sair segmento " indicado, o Producer.ThreadStart mtodo tenta manter itens
20 na fila. Um item simplesmente um inteiro entre 0 e 100. A coleo deve estar bloqueada
antes de adicionar novos itens para impedir que o consumidor e segmentos primrio acessem a
coleo simultaneamente. Isso feito com a lock palavra-chave. O argumento passado para lock
o SyncRoot campo exposto por meio da interface ICollection. Este campo fornecido
especificamente para sincronizam acesso do segmento. Exclusivo acesso para a coleo
concedido para as instrues contidas no bloco de cdigo seguinte lock. Para cada novo item que
adiciona o Producer para a fila, uma chamada evento feito para o Set mtodo no novo item " ".
Isso informa o segmento do consumidor a surgir de seu estado suspenso para processar o novo
item.
Visual C# Consolidado
382
O Consumer objeto tambm define um mtodo chamado ThreadRun. Como o Producer na verso
do ThreadRun, esse mtodo executado por um segmento de trabalho criado pelo mtodo Main.
No entanto, a verso do ThreadStart consumidor deve responder a dois eventos. O
Consumer.ThreadRun mtodo tem a seguinte aparncia:
C#
// Consumer.ThreadRun public void ThreadRun() { int count = 0; while
(WaitHandle.WaitAny(_syncEvents.EventArray) != 1) { lock (((ICollection)_queue).SyncRoot) { int item =
_queue.Dequeue(); } count++; } Console.WriteLine("Consumer Thread: consumed {0} items", count); }
Esse mtodo usa WaitAny para bloquear o segmento do consumidor at qualquer uma das alas
de espera na matriz fornecido ficar sinalizada. Nesse caso, h duas alas em matriz, um para
encerrando a segmentos de trabalho, e um para indicar que um novo item foi adicionado
coleo. Retorna WaitAny o ndice do evento que se tornou sinalizado. O novo item " " evento o
primeiro na matriz, para um ndice de zero indica um novo item. Nesse caso verificar um ndice de
1, que indica o evento " Sair segmento ", e isso usado para determinar se esse mtodo continua
a consumir itens. Se evento foi sinalizado, obter acesso exclusivo para a coleo com lock e
consumir o novo item. o novo item " " Porque este exemplo produz e consome milhares de itens,
voc no exibir cada item consumida. Em vez disso use Main para periodicamente exibir o
contedo da fila, conforme ir ser demonstrado.
O Main mtodo comea com a criao a fila cujo contedo ser produzido e consumidos e uma
instncia do SyncEvents, que voc pesquisado no anteriormente:
C#
Queue<int> queue = new Queue<int>(); SyncEvents syncEvents = new SyncEvents();
Do Producer em seguida, Main configura e Consumer objetos para uso com segmentos de trabalho.
Essa etapa no no, entretanto, criar ou iniciar a segmentos de trabalho real:
C#
Producer producer = new Producer(queue, syncEvents); Consumer consumer = new Consumer(queue,
syncEvents); Thread producerThread = new Thread(producer.ThreadRun); Thread consumerThread = new
Thread(consumer.ThreadRun);
Observe que a fila e o objeto de evento de sincronizao so passados para dois e Producer
segmentos como argumentos de construtor. o Consumer Isso fornece os dois objetos com os
recursos compartilhados necessrios para executar suas tarefas respectivas. Dois objetos novos
Thread depois so criados, usando o ThreadRun mtodo para cada objeto como um argumento.
Cada segmento de trabalho, quando iniciado, utilizar esse argumento como o ponto de entrada
para o segmento.
Em seguida Main inicia a segmentos dois trabalho com uma chamada para o Start mtodo, como
este:
C#
producerThread.Start(); consumerThread.Start();
Nesse ponto, os dois segmentos de trabalho novo so criados e Iniciar Execuo assncrona,
independente do segmento primrio que est em execuo o Main mtodo. Na verdade, a
prxima coisa Main no suspender o segmento principal com uma chamada para o Sleep
mtodo. O mtodo suspende o segmento atualmente em execuo para um determinado nmero
Visual C# Consolidado
383
de milissegundos. Depois que esse intervalo expirar, Main reativado, em que ponto ele exibe o
contedo da fila. Repete Main esta para quatro iteraes, como este:
C#
for (int i=0; i<4; i++) { Thread.Sleep(2500); ShowQueueContents(queue); }
Finalmente, Main sinaliza a segmentos de trabalho para encerrar, chamar o Set mtodo do evento
" do segmento de sada ", e chama o Join mtodo em cada segmento de trabalho para bloquear o
segmento primrio at que cada segmento do operador responder ao evento e termina.
No um exemplo final da sincronizao do segmento: o ShowQueueContents mtodo. Esse
mtodo, como os segmentos consumidor e o Producer, usa lock para obter acesso exclusivo para
a fila. Nesse caso, entretanto, acesso exclusivo particularmente importante, porque
ShowQueueContents. enumera em toda a coleo Enumerando sobre uma coleo uma operao
que est especialmente propensa a corrupo de dados por operaes assncronas porque ela
envolve atravessando o contedo de toda a coleo. O ShowQueueContents mtodo tem a seguinte
aparncia:
C#
syncEvents.ExitThreadEvent.Set(); producerThread.Join(); consumerThread.Join();
Finalmente, observe que ShowQueueContents, porque ela chamada por Main, executado pelo
segmento primrio. Isso significa que esse mtodo, quando ele obtm acesso exclusivo fila item,
na verdade est bloqueando os dois segmentos Producer e pelo consumidor de acessar a fila.
Bloqueia ShowQueueContents a fila e enumera o contedo:
C#
private static void ShowQueueContents(Queue<int> q) { lock (((ICollection)q).SyncRoot) { foreach (int item
in q) { Console.Write("{0} ", item); } } Console.WriteLine(); }
Visual C# Consolidado
384
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
Visual C# Consolidado
385
construo. Cada objeto sinaliza o objeto de evento fornecido quando seu clculo estiver
concludo, que permite o segmento primrio para execuo de bloco com WaitAll at que todos os
objetos dez Fibonacci ter calculado um resultado. O Main mtodo exibir cada Fibonacci resultado.
Exemplo
C#
using System; using System.Threading; public class Fibonacci { public Fibonacci(int n, ManualResetEvent
doneEvent) { _n = n; _doneEvent = doneEvent; } // Wrapper method for use with thread pool. public void
ThreadPoolCallback(Object threadContext) { int threadIndex = (int)threadContext;
Console.WriteLine("thread {0} started...", threadIndex); _fibOfN = Calculate(_n);
Console.WriteLine("thread {0} result calculated...", threadIndex); _doneEvent.Set(); } // Recursive method
that calculates the Nth Fibonacci number. public int Calculate(int n) { if (n <= 1) { return n; } return
Calculate(n - 1) + Calculate(n - 2); } public int N { get { return _n; } } private int _n; public int FibOfN { get {
return _fibOfN; } } private int _fibOfN; private ManualResetEvent _doneEvent; } public class
ThreadPoolExample { static void Main() { const int FibonacciCalculations = 10; // One event is used for each
Fibonacci object ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations]; Random r = new Random(); // Configure and
launch threads using ThreadPool: Console.WriteLine("launching {0} tasks...", FibonacciCalculations); for
(int i = 0; i < FibonacciCalculations; i++) { doneEvents[i] = new ManualResetEvent(false); Fibonacci f = new
Fibonacci(r.Next(20,40), doneEvents[i]); fibArray[i] = f;
ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i); } // Wait for all threads in pool to calculation...
WaitHandle.WaitAll(doneEvents); Console.WriteLine("All calculations are complete."); // Display the
results... for (int i= 0; i<FibonacciCalculations; i++) { Fibonacci f = fibArray[i];
Console.WriteLine("Fibonacci({0}) = {1}", f.N, f.FibOfN); } } }
Sada de exemplo
launching 10 tasks... result calculated... result calculated... result calculated... result calculated... result
calculated... result calculated... result calculated... result calculated... result calculated... result calculated...
all calculations complete Fibonacci(22) = 17711 Fibonacci(25) = 75025 Fibonacci(32) = 2178309
Fibonacci(36) = 14930352 Fibonacci(32) = 2178309 Fibonacci(26) = 121393 Fibonacci(35) = 9227465
Fibonacci(23) = 28657 Fibonacci(39) = 63245986 Fibonacci(22) = 17711
Visual C# Consolidado
386
C#
class TestRegularExpressions { static void Main() { string[] sentences = { "cow over the moon", "Betsy the
Cow", "cowering in the corner", "no match here" }; string sPattern = "cow"; foreach (string s in sentences) {
System.Console.Write("{0,24}", s); if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern,
System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { System.Console.WriteLine(" (match for '{0}'
found)", sPattern); } else { System.Console.WriteLine(); } } } }
Sada
cow over the moon (match for 'cow' found) Betsy the Cow (match for 'cow' found) cowering in the corner
(match for 'cow' found) no match here
O cdigo a seguir um aplicativo de console que usa expresses regulares para validar o formato
da cada seqncia em uma matriz. A validao requer que cada seqncia assumem a forma de
um nmero de telefone no qual trs grupos de dgitos so separados por hfen, os primeiros dois
grupos conter trs dgitos, e o terceiro grupo contm quatro dgitos. Isso feito com a expresso
^\\d{3}-\\d{3}-\\d{4}$ regular. Para obter mais informaes, consulte Elementos de idioma de
expresses regulares.
C#
class TestRegularExpressionValidation { static void Main() { string[] numbers = { "123-456-7890", "444234-22450", "690-203-6578", "146-893-232", "146-839-2322", "4007-295-1111", "407-295-1111", "407-25555", }; 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
Visual C# Consolidado
387
O cdigo a seguir usa o mtodo acrscimo da classe StringBuilder Para ingressar em trs
seqncias sem o efeito do + operador Chaining.
C#
class StringBuilderTest { static void Main() { string two = "two"; System.Text.StringBuilder sb = new
System.Text.StringBuilder(); sb.Append("one "); sb.Append(two); sb.Append(" three");
System.Console.WriteLine(sb.ToString()); string str = sb.ToString(); System.Console.WriteLine(str); } }
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 '
Sada
Original text: 'one two three:four,five six seven' 7 words in text: one two three four five six seven
COMO: Criar uma unio C/C++ usando atributos (Guia de programao C#)
Visual C# Consolidado
388
Usando atributos Voc pode personalizar como estruturas so dispostas na memria. Por
exemplo, voc pode criar o que conhecido como uma unio em C/C usando e FieldOffset
Atributos. o StructLayout(LayoutKind.Explicit)
Exemplo
Nesse segmento de cdigo, todos os campos de TestUnion incio no mesmo local na memria.
C#
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)] struct TestUnion {
[System.Runtime.InteropServices.FieldOffset(0)] public int i;
[System.Runtime.InteropServices.FieldOffset(0)] public double d;
[System.Runtime.InteropServices.FieldOffset(0)] public char c;
[System.Runtime.InteropServices.FieldOffset(0)] public byte b; }
A seguir outro exemplo onde incio campos em diferente explicitamente configurar locais.
C#
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)] struct TestExplicit {
[System.Runtime.InteropServices.FieldOffset(0)] public long lg;
[System.Runtime.InteropServices.FieldOffset(0)] public int i1;
[System.Runtime.InteropServices.FieldOffset(4)] public int i2;
[System.Runtime.InteropServices.FieldOffset(8)] public double d;
[System.Runtime.InteropServices.FieldOffset(12)] public char c;
[System.Runtime.InteropServices.FieldOffset(14)] public byte b; }
Os dois int campos, i1 e i2, compartilhar os mesmos locais como lg de memria. Esse tipo de
controle sobre layout struct til quando usando invocao de plataforma.
COMO: Criar e usar DLLs em C# (Guia de programao C#)
Uma biblioteca de vnculo dinmica (DLL) est vinculada ao seu programa em tempo de
execuo. Para demonstrar Criando e usando uma DLL, considere o seguinte cenrio:
Add.cs o arquivo de origem que contm o mtodo Add(long i, long j). Ela retorna a soma de
seus parmetros. A classe AddClass que contm o mtodo Add um membro do espao para
nome UtilityMethods.
Mult.cs o cdigo fonte que contm o mtodo Multiply(long x, long y). Ele retorna o produto
de seus parmetros. A classe MultiplyClass que contm o mtodo Multiply tambm um
membro do espao para nome UtilityMethods.
TestCode.cs o arquivo que contm o Main mtodo. Ele usa os mtodos no arquivo DLL para
Visual C# Consolidado
389
C#
// File: Mult.cs namespace UtilityMethods { public class MultiplyClass { public static long Multiply(long x,
long y) { return (x * y); } } }
C#
// File: TestCode.cs using UtilityMethods; class TestCode { static void Main(string[] args) {
System.Console.WriteLine("Calling methods from MathLibrary.DLL:"); if (args.Length != 2) {
System.Console.WriteLine("Usage: TestCode <num1> <num2>"); return; } long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]); long sum = AddClass.Add(num1, num2); long product =
MultiplyClass.Multiply(num1, num2); System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
System.Console.WriteLine("{0} * {1} = {2}", num1, num2, product); } }
Este arquivo contm o algoritmo que usa os mtodos DLL, Add e Multiply. Comear com analisar
os argumentos inseridos da linha de comando, num1 e num2. Ele calcula a soma, usando o Add
mtodo na classe AddClass, e o produto usando o Multiply mtodo na classe MultiplyClass.
Observe que a using diretiva no incio do arquivo permite-lhe usar a classe no qualificado nomes
para consultar os mtodos DLL ao tempo de compilao, da seguinte maneira:
C#
MultiplyClass.Multiply(num1, num2);
Caso contrrio, voc ter para usar os nomes totalmente qualificados, da seguinte maneira:
C#
UtilityMethods.MultiplyClass.Multiply(num1, num2);
Execuo
Para executar o programa, digite o nome do arquivo exe, seguido por dois nmeros, da seguinte
maneira:
TestCode 1234 5678
Sada
Calling methods from MathLibrary.DLL: 1234 + 5678 = 6912 1234 * 5678 = 7006652
Compilando o cdigo
Para criar o arquivo MathLibrary.DLL, compilar os dois arquivos Add.cs e Mult.cs Usando a linha de
comando a seguir:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs
A /Target:Library opo de compilador informa o compilador para dar sada uma DLL em vez de
um arquivo EXE. A / Fora opo de compilador seguida por um nome de arquivo utilizada para
especificar o nome do arquivo DLL Caso contrrio, o compilador usa o primeiro arquivo (Add.cs.)
como o nome da DLL
Para criar o arquivo executvel, TestCode.exe, use a seguinte linha de comando:
csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs
Visual C# Consolidado
390
A /out opo de compilador informa o compilador para produzir sada de um arquivo EXE e
especifica o nome do arquivo de sada). (TestCode.exe Esta opo de compilador opcional. A
/Reference opo de compilador Especifica o arquivo DLL ou arquivos que usa este programa.
COMO: Determinar se um arquivo um mdulo (assembly) (Guia de programao C#)
Um arquivo um conjunto se e somente se ele gerenciada, e contm uma entrada do conjunto
nos seus metadados. Para obter mais informaes sobre conjuntos e metadados, consulte o
tpico Manifesto do Assembly.
Como determinar se um arquivo um conjunto manualmente
1.
2.
3.
2.
Exemplo
Este exemplo testa uma DLL para verificar se ele um conjunto.
C#
class TestAssembly { static void Main() { try { System.Reflection.AssemblyName testAssembly =
System.Reflection.AssemblyName.GetAssemblyName(@"C:\WINDOWS\system\avicap.dll");
System.Console.WriteLine("Yes, the file is an Assembly."); } catch (System.IO.FileNotFoundException e) {
System.Console.WriteLine("The file cannot be found."); } catch (System.BadImageFormatException e) {
System.Console.WriteLine("The file is not an Assembly."); } catch (System.IO.FileLoadException e) {
System.Console.WriteLine("The Assembly has already been loaded."); } } }
O GetAssemblyName mtodo carrega o arquivo de teste, e depois libera ele depois que as
informaes leitura.
Sada
The file is not an Assembly.
Visual C# Consolidado
391
Se voc desejar descarregar alguns conjuntos mas no outros, considere criar um novo domnio
do aplicativo executar o cdigo dentro desse domnio, e ento descarregar desse domnio do
aplicativo. Para obter mais informaes, consulte Como executar cdigo em outro domnio de
aplicativo:.
Para carregar um conjunto em um domnio de aplicativo
Use uma das vrias a carregar mtodos contidos nas classes AppDomain e
System.Reflection. Para obter mais informaes, consulte Carregar conjuntos em um domnio
de aplicativo.
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.
Visual C# Consolidado
392
Considere arquivo a seguir, que cria um conjunto que consiste em um espao para nome nico e
duas classes. Suponha que este conjunto de mdulos (assembly) tenha sido criado, e
armazenada no disco C com o nome HelloWorldRemote.exe.
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"); }
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(); }
Visual C# Consolidado
393
1.
2.
Configure o domnio de aplicativo. Para obter mais informaes, consulte Como Configurar
um Domnio de Aplicativo.
3.
4.
Acessar o Contedo do outro conjunto. Para obter mais informaes, consulte Executar
cdigo em outro domnio de aplicao (Guia de programao C#).
5.
Exemplos do Visual C#
Voc pode acessar cdigo de exemplo, procurando resumos de exemplo nesta seo. Cada
abstrato contm um link para abrir ou copiar o exemplo na arquivos. Alm disso, o SDK do .NET
Framework inclui tecnologia e aplicativo Exemplos e tutoriais QuickStart que demonstram recursos
.NET Framework e cdigo Visual C#.
Os tutoriais QuickStart so a maneira mais rpida para entender o que a tecnologia .NET
Framework oferece desenvolvedores lder-borda. Os QuickStarts so uma srie de exemplos e
suporte documentao projetadas para rapidamente acquaint voc com a sintaxe, arquitetura, e
poder do Visual Studio e o .NET Framework. Do ASP.NET Os tutoriais QuickStart inclui exemplos
na e aplicativos Windows Forms, alm de muitos aplicativos instruo que abrangem os recursos
da tecnologia .NET Framework mais atraentes.
Para acessar o QuickStarts, clique em Start, aponte para Programs, aponte para Microsoft .NET
Framework SDK v2.0, e clique em QuickStart Tutorials. Uma pgina da Web do aplicativo "
tutoriais QuickStart SDK Microsoft .NET Framework " exibida. Para executar o QuickStarts, siga
as instrues na pgina, que configura o banco de dados amostras e conclui a instalao. Para
obter mais informaes, consulte Amostras e QuickStarts.
Nesta seo
Exemplos de introduo
Annimo exemplo
representantes
Exemplo matrizes
Coleo exemplo
classes
Mostra como fazer classes coleo Generic no-que podem ser usados
com a foreach instruo.
Mostra como fazer classes a coleo genrica que podem ser usados
com a foreach instruo.
Visual C# Consolidado
394
Exemplo de
implementao de
interface explcita
Exemplo World de
saudao
Exemplo indexadores
Indexado exemplo
propriedades
Exemplo propriedades
Exemplo Structs
Exemplo Overloading
do operador
Exemplo Conversions
definidas pelo usurio
Exemplo de verso
Produzir exemplo
Exemplo parte 1
Interop COM
Exemplo parte 2
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
Exemplo BD OLE
Exemplo tipos parcial Demonstra como classes e estruturas podem ser definidas em vrios
arquivos cdigo fonte-C#.
Plataforma Invoke
exemplo
Exemplo de
segurana
Visual C# Consolidado
395
Segmentao de
exemplo
Exemplo de cdigo
no seguros
Exemplo de
documentao XML
Visual C# Consolidado
396
Visual C# Consolidado
397
Visual C# Consolidado
398
Visual C# Consolidado
399
Contm exemplos que mostram como adicionar um mtodo que manipula um evento a um
evento.
Como Gerar e Consumir Eventos
Contm um exemplo que usa conceitos descritos em detalhes em Eventos e Delegates e
Gerando um Evento.
Como Manipular Vrios Eventos Usando Propriedades de Evento
Contm um exemplo que mostrar como manipular vrios eventos usando propriedades de
evento.
Como Implementar Eventos em sua Classe
Contm procedimentos que descrevem como implementar um evento em uma classe.
Depurao
Consulte Depurao (Como Fazer em C#).
Implantao
Consulte Segurana (Como Fazer em C#).
Serviced Components
Como Criar um Gerenciador de Recursos de Compensao (CRM)
Inclui exemplos de cdigo para mostrar como criar um Gerenciador de Recursos de
Compensao
Como Criar um Serviced Component
Contm um procedimento que descreve como criar um novo serviced component.
Como Aplicar o Atributo Description a um Assembly
Mostra como aplicar o atributo DescriptionAttribute para definir a descrio de um
assembly.
Como Usar os Mtodos SetAbort e SetComplete
Mostra como usar os mtodos estticos SetComplete e SetAbort da classe ContextUtil.
Como Aplicar o Atributo ApplicationID a um Assembly
Mostra como aplicar o atributo ApplicationID a um assembly.
Como Criar um Objeto de Pool e Definir seus Limites de Tamanho e de Tempo
Mostra como criar um objeto de pool e definir seus limites de tamanho e de tempo.
Como criar um Mtodo de Web Service que Usa Transaes Automticas
Visual C# Consolidado
400
Descreve como criar um mtodo de Web Service que usa transaes automticas.
Como Definir a Propriedade SoapRoot Property para um Aplicativo
Mostra como definir a propriedade SoapVRoot como "MyVRoot".
Como Definir o Tempo Limite da Transao
Mostra como configurar o tempo limite da transao para 10 segundos.
Como Definir o Nome do Aplicativo Usando o Atributo ApplicationName
Mostra como fornecer o nome do aplicativo usando o atributo ApplicationName a nvel de
assembly.
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Contm procedimentos que mostram como uma classe derivada da classe
ServicedComponent pode usar o recurso BYOT do COM+ para acessar um coordenador
de transaes distribudas (DTC).
Como Criar um Componente Privado
Mostra como usar o atributo PrivateComponentAttribute em uma classe.
Como Definir o Tipo de Ativao de um Aplicativo
Mostra como definir o tipo de ativao para "server".
Como Habilitar Sincronizao em Instncias de uma Classe
Mostra como para habilitar sincronizao em instncias da classe TestSync.
Como Usar Transaes Automticas em uma Classe do .NET Framework
Descreve como preparar uma classe para participar de uma transao automtica.
Como Habilitar Ativao JIT
Mostra como habilitar ativao e desativao JIT dentro e fora de uma classe.
Como Definir o Atributo AutoComplete em uma Classe Transaction-Aware
Mostra o posicionamento do atributo AutoComplete em uma classe transaction-aware.
Como Implementar um Componente Enfileirado que Exibe uma Mensagem de Forma Assncrona
Demonstra como implementar um componente enfileirado que exibe uma mensagem de
forma assncrona.
Como Implementar Eventos Fracamente Acoplados
Visual C# Consolidado
401
Visual C# Consolidado
402
Visual C# Consolidado
403
Visual C# Consolidado
404
Visual C# Consolidado
405
Visual C# Consolidado
406
Visual C# Consolidado
407
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".
Visual C# Consolidado
408
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.
Estes so recursos adicionais do C#:
Para obter informaes detalhadas sobre aspectos especficos da linguagem C#, consulte
a Referncia C#.
Visual C# Consolidado
409
Visual C# Consolidado
410
Para criar todas as comunicaes nas indstrias padro, para garantir que cdigos
baseados no .NET Framework possam se integrar a qualquer outro cdigo.
O .NET Framework tem dois componentes principais: o Common Language Runtime e a biblioteca
de classes do .NET Framework. O Common Language Runtime a fundao do .NET
Framework. Voc pode pensar no Runtime como um agente que dirige o cdigo no tempo de
execuo, fornecendo servios principais como gerenciamento de memria, gerenciamento de
segmento e arquitetura de comunicao remota, enquanto foram, tambm, a segurana de tipos
estritos e outras formas de preciso de cdigo que promovem segurana e robustez. Na verdade,
o conceito de gerenciamento de cdigo um princpio fundamental do Runtime. O cdigo que visa
o Runtime conhecido como cdigo gerenciado, enquanto o cdigo que no visa o Runtime
conhecido como cdigo no gerenciado. A biblioteca de classes, outro componente principal do
.NET Framework, uma coleo de objetos orientados de tipos reutilizveis, que voc pode usar
para desenvolver aplicativos, variando de linhas de comando tradicionais ou aplicativos grficos
de interfaces de usurios (GUI), para aplicativos com base nas inovaes mais recentes
fornecidas pelo ASP.NET, como Web Forms e Servios XML da Web.
O .NET Framework pode ser hospedado por componentes no gerenciados que carregam o
Common Language Runtime em seus processos, e inicializam a execuo de cdigo gerenciado.
Assim, criam um ambiente de software que pode explorar os recursos gerenciados e no
gerenciados. O .NET Framework no apenas fornece vrios Runtime Hosts, como tambm
suporta o desenvolvimento de Runtime Hosts de terceiros.
Por exemplo, o ASP.NET hospeda o Runtime para fornecer um ambiente escalonvel, do lado do
servidor, para cdigo gerenciado. ASP.NET trabalha diretamente com o tempo de execuo para
ativar os aplicativos ASP.NET e Servios XML da Web, ambos sero discutidos posteriormente
neste tpico.
Internet Explorer um exemplo de um aplicativo no gerenciado que hospeda o Runtime (na
forma de uma extenso tipo MIME). Usar o Internet Explorer para hospedar o Runtime, permite
que voc incorpore componentes gerenciados ou controles Windows Forms em documentos
HTML. Hospedar o Runtime dessa maneira, torna possvel o gerenciamento do cdigo mvel
(semelhante a controles Microsoft ActiveX), mas com melhorias significativas que somente o
cdigo gerenciado pode oferecer, como execuo semi-confivel e armazenamento de arquivos
isolados.
A ilustrao a seguir mostra o relacionamento do Common Language Runtime e da biblioteca de
classes para seus aplicativos e para o sistema geral. A ilustrao tambm mostra como o cdigo
gerenciado opera dentro uma arquitetura maior.
NET Framework em contexto
Visual C# Consolidado
411
Visual C# Consolidado
412
enquanto aproveita o desempenho superior dos melhores servidores de empresa que suportam
runtime hosting.
Biblioteca de Classes do .NET Framework
A Biblioteca de classes do .NET Framework uma coleo de tipos reutilizveis que se integram
rigidamente com o Common Language Runtime. A biblioteca de classes orientada a objetos,
fornecendo tipos que seu prprio cdigo gerenciado pode derivar. Isso no s torna os tipos do
.NET Framework fceis de usar, como tambm reduz o tempo associado ao aprendizado de
novos recursos do .NET Framework. Alm disso, componentes de terceiros podem se integrar
totalmente com classes do .NET Framework.
Por exemplo, as classes da coleo .NET Framework implementam um conjunto de interfaces que
voc pode usar para desenvolver suas prprias colees de classes. Sua coleo de classes ser
perfeitamente combinada com as classes do .NET Framework.
Como voc espera de uma biblioteca de classe orientada a objetos, os tipos do .NET Framework
permitem que voc realize uma gama de tarefas comuns de programao, incluindo tarefas como
gerenciamento de seqncia de caracteres, coleta de dados, conectividade do banco de dados e
acesso a arquivos. Alm dessas tarefas comuns, a biblioteca de classes inclui tipos que oferecem
suporte a uma variedade de cenrios especializados de desenvolvimento. Por exemplo, voc
pode usar o .NET Framework para desenvolver os seguintes tipos de aplicativos e servios:
Aplicativos de console.
Aplicativos ASP.NET.
Servios do Windows.
Por exemplo, as classes Windows Forms so um conjunto abrangente de tipos reutilizveis que
simplificam vastamente o desenvolvimento do Windows GUI. Se voc criar um aplicativo de Web
Form ASP.NET, voc pode usar as classes Web Forms.
Desenvolvimento de Aplicativos Cliente
Aplicativos cliente so os mais prximos de um estilo tradicional de um aplicativo baseado em
programao Windows. Esses so os tipos de aplicativos que exibem janelas ou formulrios na
rea de trabalho, permitindo a um usurio executar uma tarefa. Aplicativos cliente incluem
aplicativos como processadores de texto e planilhas, bem como aplicativos de negcios
personalizados, como ferramentas de entrada de dados, ferramentas de relatrios e assim por
diante. Aplicativos cliente geralmente empregam janelas, menus, botes e outros elementos GUI.
Eles acessam, provavelmente, recursos locais como o sistema de arquivos e perifricos, como
impressoras.
Outro tipo de aplicativo cliente o tradicional controle ActiveX (agora, substitudo pelo o controle
gerenciado do Windows Forms) implantado atravs da Internet como pgina da Web. Este
aplicativo se parece muito com outros aplicativos clientes: ele executado de forma nativa, tem
acesso a recursos locais e inclui elementos grficos.
No passado, os desenvolvedores criavam esses aplicativos utilizando C/C++ em conjunto com o
Microsoft Foundation Classes (MFC) ou com um ambiente de desenvolvimento de aplicativos
rpidos (RAD) como o Microsoft Visual Basic . O .NET Framework incorpora aspectos desses
produtos existentes em um ambiente de desenvolvimento simples e consistente, que
drasticamente simplifica o desenvolvimento de aplicativos cliente.
Visual C# Consolidado
413
As classes do Windows Forms contidas no .NET Framework so projetadas para serem usadas
para o desenvolvimento do GUI. Facilmente, voc pode criar janelas de comando, botes, menus,
barras de ferramentas e outros elementos de tela, com a flexibilidade necessria para acomodar
mudanas de necessidades comerciais
Por exemplo, o .NET Framework fornece propriedades simples para ajustar atributos visuais
associados a formulrios. Em alguns casos o sistema operacional base no d suporte para
alterao direta desses atributos, e nesse caso o .NET Framework automaticamente recria os
formulrios. Essa uma das vrias maneiras na qual o .NET Framework integra a interface do
desenvolvedor, tornando a codificao simples e mais consistente.
Diferentemente de controle ActiveX, controles Windows Forms tm acesso semi-confivel ao
computador do usurio. Isso significa que execuo binria ou nativa de cdigo pode acessar
alguns dos recursos do sistema do usurio (como elementos GUI e acesso limitado ao arquivo)
sem poder acessar ou comprometer outros recursos. Devido segurana de acesso ao cdigo,
muitos aplicativos que antes necessitavam ser instalados no sistema de um usurio, agora podem
ser implantados atravs da Web. Seus aplicativos podem implementar os recursos de um
aplicativo local, enquanto so implantadas como uma pgina da Web.
Desenvolvimento de aplicativos servidores
Aplicativos do servidor no mundo gerenciado so implementados atravs de Runtime Hosts.
Aplicativos no gerenciados hospedam o Common Language Runtime, que permite que seu
cdigo gerenciado personalizado controle o comportamento do servidor. Esse modelo fornece a
voc todos os recursos do Common Language Runtime e biblioteca de classes, enquanto ganha o
desempenho e escalabilidade do servidor host.
A ilustrao a seguir mostra um esquema de rede bsica com cdigo gerenciado em execuo,
em ambientes de servidores diferentes. Servidores como o IIS e SQL Server podem executar
operaes padro, enquanto a lgica do seu aplicativo executa atravs do cdigo gerenciado.
Cdigo gerenciado do lado do servidor
ASP.NET o ambiente de hospedagem que permite aos desenvolvedores usar o.NET Framework
para direcionar aplicativos baseados na Web. Entretanto, o ASP.NET mais do que apenas um
Runtime Host; ele uma arquitetura completa para desenvolver sites e objetos InternetDistributed, usando cdigo gerenciado. Web Forms e servios XML da Web usam IIS e ASP.NET
como mecanismos de publicao de aplicativos, e ambos tm uma coleo de classes que so
suportadas pelo .NET Framework.
Servios XML da Web, uma evoluo importante na tecnologia baseada na Web, so
componentes de aplicativos distribudos, do lado do servidor, semelhante a sites comuns da Web.
Entretanto, diferentemente dos aplicativos baseados na Web, componentes de servios XML da
Web no tm interface de usurio, e no so direcionados para navegadores como o Internet
Explorer e Netscape Navigator. Em vez disso, servios XML da Web consistem em componentes
de software reutilizveis, projetados para serem consumidos por outros aplicativos, como
aplicativos cliente tradicionais, aplicativos baseados na Web ou mesmo outros servios XML da
Web. Como resultado, a tecnologia dos servios XML da Web est movendo, rapidamente, o
desenvolvimento e implantao de aplicativos para o ambiente altamente distribudo da Internet.
Se voc utilizou verses anteriores da tecnologia ASP, voc imediatamente notar os
aperfeioamentos que ASP.NET e Web Forms oferecem. Por exemplo, voc pode desenvolver
pginas Web Forms em qualquer linguagem que suporte o .NET Framework. Alm disso, seu
cdigo no precisa mais compartilhar o mesmo arquivo com o texto HTTP (embora ele possa
Visual C# Consolidado
414
continuar fazendo isso, se voc preferir). Pginas Web Forms executam na linguagem de mquina
nativa porque, como qualquer outro aplicativo gerenciado, elas aproveitam completamente o
Runtime. Por outro lado, pginas ASP no gerenciadas so sempre colocadas em script e
interpretadas. Pginas ASP.NET so mais rpidas, mais funcionais e mais fceis para
desenvolver do que as pginas ASP no gerenciadas, porque elas interagem com o Runtime
como qualquer aplicativo gerenciado.
O .NET Framework tambm fornece um conjunto de classes e ferramentas para ajudar no
desenvolvimento e consumo de aplicativos de servios XML da Web. Servios XML da Web so
criados em padres como SOAP (um protocolo remoto de chamada de procedimento), XML (um
formato de dados extensvel) e WSDL (Web Services Description Language). O .NET Framework
foi construdo sobre esses padres para promover a interoperabilidade com solues noMicrosoft.
Por exemplo, a ferramenta WSDL, includa com o SDK do .NET Framework, pode consultar um
servio XML da Web publicado na Web, analisar sua descrio WSDL e produzir cdigo fonte C#
ou Visual Basic, que o aplicativo pode usar para se tornar um cliente do servio XML da Web. O
cdigo fonte pode criar classes derivadas de classes, na biblioteca de classes que trata toda a
comunicao base, usando anlise SOAP e XML. Embora voc possa usar a biblioteca de classes
para consumir diretamente servios XML da Web, a ferramenta WSDL e as outras ferramentas
contidas no SDK facilitam os esforos de desenvolvimento com o .NET Framework.
Se voc desenvolver e publicar seus prprios servios XML da Web, o .NET Framework fornecer
um conjunto de classes compatveis com todos os padres de comunicao como SOAP, WSDL,
e XML. Usar as classes permite que voc enfoque na lgica do seu servio, sem se preocupar
com com a infra-estrutura de comunicao exigida pelo desenvolvimento de software distribudos.
Finalmente, como pginas Web Forms no ambiente gerenciado, seu servio XML da Web ser
executado com a velocidade de linguagem de mquina nativa, usando a comunicao
escalonvel do IIS.
Visual C# Consolidado
415
Visual C# Consolidado
416
linguagem Visual Basic tem mais recursos orientados a objetos do que antes. A seguir esto
alguns benefcios do runtime:
Melhorias de desempenho.
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:
Coleta de lixo que gerencia o tempo de vida de objeto sendo a contagem de referncia
desnecessria.
Voc tambm pode escrever cdigo gerenciado usando a linguagem C#, que fornece os
seguintes benefcios:
Coleta de lixo.
Visual C# Consolidado
417
Quando voc inicializa um novo processo, o tempo de execuo reserva uma regio contgua de
espao de endereo para o processo. Este espao de endereo reservado chamado de heap
gerenciada. A heap gerenciada mantm um ponteiro para o endereo onde o prximo objeto da
heap ser alocado. Inicialmente, esse ponteiro definido como Endereo bsico da heap
gerenciada. Todos os tipos de referncia so alocados na heap gerenciada. Quando um aplicativo
cria o primeiro tipo de referncia, alocada memria para o tipo no Endereo bsico da heap
gerenciada. Quando o aplicativo cria o prximo objeto, o coletor de lixo aloca memria para ele no
espao de endereo imediatamente aps o primeiro objeto. Desde que exista espao de endereo
disponvel, o coletor de lixo continua a alocar espao para novos objetos dessa maneira.
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.
Visual C# Consolidado
418
O coletor de lixo do Runtime armazena novos objetos na gerao 0. Objetos criados com
antecedncia no tempo de vida do aplicativo que sobrevivem a coletas so promovidos e
armazenados em geraes 1 e 2. O processo de promoo do objeto descrito posteriormente
neste tpico. Porque mais rpido compactar uma parte da heap gerenciada que a heap inteira,
este esquema permite que o coletor de lixo libere a memria em uma gerao especfica em vez
liberar a memria para toda a memria gerenciada a cada vez que ele executa uma coleta.
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.
Liberando Memria para Recursos no Gerenciados
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.
Visual C# Consolidado
419
Estabelece uma estrutura que ajuda a habilitar integrao entre linguagens, segurana de
tipos, e execuo de cdigo de alto desempenho.
Define regras que as linguagens devem seguir, que ajudam a assegurar que objetos
escritos em linguagens diferentes podem interagir entre si.
Tipos de valor
Tipos de valor contm diretamente seus dados. Instncias de tipos de valor ou so alocadas na
pilha ou so alocadas internamente em uma estrutura. Tipos de valor podem ser internos
(implementados pelo ambiente de execuo), definidos pelo usurio ou enumeraes. Para
obter uma lista dos tipos valor internos, consulte a Biblioteca de Classes do .NET Framework.
Tipos de referncia
Tipos de referncia armazenam uma referncia para o endereo de memria do valor e so
alocados no heap. Tipos referncia podem ser tipos autodescritivos, tipos ponteiro ou tipos de
interface. O tipo de um tipo de referncia pode ser determinado a partir dos valores de tipos
autodescritivos. Tipos autodescritivos so posteriormente divididos em matrizes e tipos de
classe. Os tipos de classe so classes definidas pelo usurio, tipos de valor convertidos e
delegates.
Variveis que so tipos de valor possuem sua prpria cpia dos dados e, portanto, operaes em
uma varivel no afetam outras variveis. Variveis que so tipos de referncia podem referenciar
o mesmo objeto e, portanto, operaes em uma varivel podem afetar o mesmo objeto
referenciado por outra varivel.
Todos os tipos derivam do tipo base System.Object.
O exemplo a seguir mostra a diferena entre tipos de referncia e tipos de valor.
C#
using System; class Class1 { public int Value = 0; } class Test { static void Main() { int val1 = 0; int val2 = val1;
val2 = 123; Class1 ref1 = new Class1(); Class1 ref2 = ref1; ref2.Value = 123; Console.WriteLine("Values: {0},
{1}", val1, val2); Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value); } }
Visual C# Consolidado
420
O diagrama a seguir ilustra como esses tipos esto relacionados. Observe que instncias de tipos
podem ser simplesmente tipos de valor ou tipos autodescritivos, mesmo que haja subcategorias
desses tipos.
Classificao de tipos
Valores e objetos
Valores so representaes binrias de dados. Os tipos fornecem uma maneira de interpretar
esses dados. Um tipo de valor armazenado como uma representao binria dos dados do tipo.
O valor de um tipo de referncia a localidade da seqncia de bits que representam os dados do
tipo.
Cada valor possui um tipo exato que define por completo a representao do valor e as operaes
que so definidas no valor. Valores de tipos autodescritivos so chamados objetos. Enquanto
sempre possvel determinar o tipo exato de um objeto examinando seu valor, no possvel fazer
o mesmo com o um tipo de valor ou tipo ponteiro. Um valor pode ter mais de um tipo. Um valor
cujo tipo implementa uma interface tambm um valor do tipo da interface. Da mesma forma, um
valor cujo tipo deriva de um tipo base tambm um valor desse tipo base.
Tipos e Assemblys
O ambiente de execuo usa assemblys para localizar e carregar tipos. O manifesto do assembly
contm as informaes que o ambiente de execuo usa para resolver todas as referncias de
tipo feitas dentro do escopo do assembly.
Um nome de tipo no ambiente de execuo possui duas partes lgicas: o nome do assembly e o
nome do tipo dentro do assembly. Dois tipos com o mesmo nome, mas em assemblys diferentes,
so definidos como dois tipos distintos.
Visual C# Consolidado
421
Assemblys fornecem consistncia entre o escopo de nomes vistos pelo desenvolvedor e o escopo
de nomes vistos pelo sistema em tempo de execuo. Os desenvolvedores criam tipos no
contexto de um assembly. O contedo do assembly que est sendo criando por um desenvolvedor
estabelece o escopo de nomes que estar disponvel em tempo de execuo.
Tipos e Namespaces
No ponto de vista do ambiente de execuo, um namespace apenas um conjunto de nomes de
tipo. Determinadas linguagens podem ter construes que ajudam os desenvolvedores a formar
grupos lgicos de tipos, mas essas construes no so usadas pelo ambiente de execuo ao
vincular tipos. Assim, ambas as classes Object e String so parte do namespace System, mas o
ambiente de execuo reconhece apenas os nomes completos de cada tipo que so
System.Object e System.String, respectivamente
Voc pode criar um nico assembly que expe tipos que parecem ter vindo de dois namespaces
hierrquicos diferentes, como System.Collections e System.Windows.Forms. Voc tambm pode
criar dois assemblys que exportam tipos cujos nomes contenham MyDll.MyClass.
Se voc criar uma ferramenta para representar tipos em um assembly como pertencentes a um
namespace hierrquico, a ferramenta deve enumerar os tipos em um assembly, ou em um grupo
de assemblys, e analisar os nomes dos tipos a fim de derivar um relacionamento hierrquico.
Definies de Tipo
Voc define novos tipos a partir de tipos existentes. Tipos de valor interno, ponteiros, matrizes e
delegados so definidos quando eles so usados e so referidos como tipos implcitos. Tipos
podem ser aninhados; ou seja, um tipo pode ser um membro de outro tipo.
Uma definio de tipo inclui:
A visibilidade do tipo.
O nome do tipo.
Atributos
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
Pblico
Visual C# Consolidado
422
Assembly
Nomes de Tipos
O CTS impe apenas duas restries de nomes:
1.
2.
Visual C# Consolidado
423
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
Campo
Descreve e contm parte do estado do tipo. Campos podem ser de qualquer tipo
suportado pelo ambiente de execuo.
Tipo
aninhado
Mtodo
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.
Caracterstica
Pode ser
aplicada a
Descrio
abstract
Mtodos,
propriedades e
eventos
private, family,
assembly, family e
assembly, family ou
assembly, ou public
Todos
Visual C# Consolidado
424
Mtodos,
propriedades e
eventos
initialize-only
Campos
instance
Campos,
mtodos,
propriedades e
eventos
literal
Campos
newslot ou override
Todos
static
Campos,
mtodos,
propriedades e
eventos
virtual
Mtodos,
propriedades e
eventos
Sobrecarga
Visual C# Consolidado
425
Cada membro de tipo tem uma assinatura nica. A assinatura de um mtodo consistem do nome
do mtodo e da lista de parmetros (a ordem e tipos dos argumentos do mtodo). Mais de um
mtodo com o mesmo nome pode ser definido em um tipo desde que as assinaturas sejam
diferentes. Quando dois ou mais mtodos com o mesmo nome so definidos, diz-se que o mtodo
est sobrecarregado. Listas de parmetros podem ser qualificadas por restries varargs,
indicando que o mtodo suporta uma lista de argumentos varivel. Por exemplo, em
System.Char, o mtodo IsDigit est sobrecarregado. Um mtodo recebe um Char e retorna um
Boolean, outro mtodo recebe um Int32 e uma String e retorna um Boolean
Herana, Substituio e Membros Ocultos
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.
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.
Visual C# Consolidado
426
Para cada tipo de valor, o tempo de execuo fornece um tipo convertido (boxed) correspondente,
que uma classe que tem o mesmo estado e comportamento que o tipo de valor. Algumas
linguagens exigem que voc utilize sintaxe especial quando o tipo convertido (boxed)
necessrio; outras usam automaticamente o tipo convertido (boxed) quando for necessrio.
Quando voc define um tipo de valor, voc est definindo o tipo convertido (boxed) e o tipo noconvertido (unboxed).
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 noconvertida (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); } }
Visual C# Consolidado
427
definio quanto a implementao, ela pode ter um ou mais membros que no possuem
implementao.
Uma instncia de uma classe um objeto. Voc acessa as funcionalidades de um objeto
chamando seus mtodos e acessando suas propriedades, eventos, e campos.
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
implementa
Abstrata
Especifica que voc no pode criar uma instncia da classe. Para us-la, voc
deve derivar outra classe a partir dela.
Herda
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.
Visual C# Consolidado
428
Visual C# Consolidado
429
Observao
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
Regras relaxadas para vinculao de delegados
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.
Um parmetro de um delegado compatvel com o parmetro correspondente de um mtodo se o
tipo do parmetro do delegado for mais restritivo do que o tipo de parmetro do mtodo, porque
isso garante que um argumento passado para o delegado possa ser passado com segurana para
o mtodo.
Da mesma forma, o tipo de retorno de um delegado compatvel com o tipo de retorno de um
mtodo se o tipo de retorno do mtodo for mais restritivo do que o tipo de retorno do delegado,
porque isso garante que o valor de retorno do mtodo possa ser difundido com segurana para o
tipo retorno do delegado.
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.
Para obter mais informaes e cdigos de exemplo, consulte
System.Delegate.CreateDelegate(System.Type,System.Object,System.Reflection.MethodInfo).
Representantes e chamadas assncrona a mtodo
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.
Visual C# Consolidado
430
tipo matriz necessria. Matrizes de um determinado tipo s podem ter elementos desse tipo.
Para obter mais informaes sobre o tipo de um valor, consulte Valores e Objetos.
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.
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.
Visual C# Consolidado
431
Observao
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();.
Um ponteiro no gerenciado o tradicional ponteiro C++ para um bloco de memria no
gerenciado do heap C++ padro. Como ponteiros no gerenciados no fazem parte do CLS
(Common Language Specification), sua linguagem pode no fornecer sintaxe para definir ou
acessar estes tipos. Consulte a documentao da sua linguagem para informaes sobre suporte
a ponteiros no gerenciados.
Um ponteiro de funo no gerenciado tambm um ponteiro C++ tradicional referente ao
endereo de uma funo. O CLS fornece os delegados como uma alternativa gerenciada para
ponteiros de funes no gerenciados.
Uma definio explcita de um tipo ponteiro no necessria. Todas as informaes necessrias
para determinar o tipo de um ponteiro esto presentes quando o ponteiro declarado.
Enquanto tipos ponteiro so tipos de referncia, o valor de um tipo ponteiro no um objeto e
voc no pode determinar o tipo exato de tal valor.
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.
Visual C# Consolidado
432
Descrio do Assembly.
Atributos.
Elementos descritivos adicionais que modificam tipos e membros.
Benefcios de Metadados
Os metadados so a chave para um modelo de programao simples, eliminando a necessidade
de arquivos de Interface Definition Language (IDL), arquivos de cabealho ou qualquer mtodo
externo de referncia a componente. Os metadados permitem que linguagens .NET se descrevam
automaticamente de uma maneira neutra com relao a linguagem, sem que o desenvolvedor e o
usurio vejam. Alm disso, metadados so extensveis pelo uso de atributos. Os metadados
oferecem os seguintes benefcios principais:
Arquivos autodescritivos.
Mdulos Common Language Runtime e assemblies so autodescritivos. Os metadados de um
mdulo contm tudo o que ele precisa para interagir com outro mdulo. Os metadados
fornecem automaticamente a funcionalidade de IDL no COM, permitindo que voc use um
arquivo para definio e implementao. Mdulos Runtime e assemblies no exigem registro
com o sistema operacional. Como resultado, as descries usadas pelo Runtime sempre
refletem o cdigo real no arquivo compilado, o que aumenta a confiabilidade do aplicativo.
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.
Visual C# Consolidado
434
O byte superior (0x06) indica que esse um token MethodDef. Os trs bytes inferiores (000004)
informam ao Common Language Runtime para procurar na quarta linha da tabela MethodDef
pelas informaes que descrevem essa definio de mtodo.
Metadados em um arquivo PE
Quando um programa compilado para o Common Language Runtime, ele convertido em um
arquivo PE que consiste de trs partes. A tabela a seguir descreve o contedo de cada parte.
Seo do
arquivo PE
Contedo da seo
Cabealho
Instrues da
MSIL
Metadados
Visual C# Consolidado
435
.entrypoint .maxstack 3 .locals ([0] int32 ValueOne, [1] int32 ValueTwo, [2] int32 V_2, [3] int32 V_3)
IL_0000: ldc.i4.s 10 IL_0002: stloc.0 IL_0003: ldc.i4.s 20 IL_0005: stloc.1 IL_0006: ldstr "The Value is:
{0}" IL_000b: ldloc.0 IL_000c: ldloc.1 IL_000d: call int32 ConsoleApplication.MyApp::Add(int32,int32) /*
06000003 */
O compilador JIT l o MSIL para o mtodo inteiro, analisa-o completamente, e gera instrues
nativas eficientes para o mtodo. Em IL_000d, um token de metadados para o mtodo Add
(/* 06000003 */) encontrado e o ambiente de tempo de execuo usa o token para consultar a
terceira linha da tabela MethodDef.
A tabela a seguir mostra parte da tabela MethodDef referenciada pelo token de metadados que
descreve o mtodo Add. Enquanto outras tabelas de metadados existirem neste assembly e
tiverem seus prprios valores exclusivos, somente esta tabela examinada.
Endereo
virtual relativo
Linha (RVA)
ImplFlags Sinalizadores
0x00002050
IL
Managed
Public
.ctor (construtor)
ReuseSlot
SpecialName
RTSpecialName
.ctor
0x00002058
IL
Managed
Public
Static
ReuseSlot
Main
String
0x0000208c
IL
Managed
Public
Static
ReuseSlot
Add
Cada coluna da tabela contm informaes importantes sobre seu cdigo. A coluna RVA permite
que o ambiente de tempo de execuo calcule o endereo de memria inicial do MSIL que define
este mtodo. As colunas ImplFlags e Sinalizadores contm mscaras de bits que descrevem o
mtodo (por exemplo, se o mtodo pblico ou privado). A coluna Nome indexa o nome do
mtodo a partir do heap de seqncia de caracteres. A coluna Assinatura indexa a definio da
assinatura do mtodo no heap de blob.
O ambiente de tempo de execuo calcula o endereo de deslocamento desejado a partir da
coluna RVA na terceira linha e retorna este endereo para o compilador JIT, que depois passa
para o novo endereo. O compilador JIT continua a processar o MSIL no novo endereo at
encontrar outro token de metadados, e o processo repetido.
Usando metadados, o ambiente de tempo de execuo tem acesso a todas as informaes
necessrias para carregar seu cdigo e process-lo em instrues de mquina nativas. Desta
maneira, os metadados permitem arquivos autodescritivos e, juntamente com o CTS, herana
entre linguagens.
Visual C# Consolidado
436
Language Runtime com as informaes necessrias para estar ciente das implementaes de
tipo. Para o Runtime, um tipo no existe fora o contexto de um assembly.
Ele contm cdigo que o Common Language Runtime executa. O cdigo Microsoft
Intermediate Language (MSIL), em um arquivo executvel portvel (PE), no ser executado
se ele no possuir um manifesto do assembly associado. Observe que cada assembly pode ter
somente um ponto de entrada (isto , DllMain, WinMain ou Main).
Ele forma um limite de tipo. A identidade de cada tipo inclui o nome do assembly no qual
ele reside. Um tipo chamado MyType, carregado no escopo de um assembly, no o mesmo
que um tipo chamado MyType, carregado no escopo de outro assembly.
Ele forma um limite de verso. O assembly a menor unidade com controle de verso no
Common Language Runtime; todos os tipos e recursos no mesmo assembly esto versionados
como uma unidade. O manifesto do assembly descreve as dependncias de verso que voc
especifica para qualquer assembly dependente. Para obter mais informaes sobre o controle
de verso, consulte Controle de Verso do Assembly.
Essa a unidade na qual a execuo lado a lado suportada. Para obter mais
informaes sobre como executar vrias verses de um assembly, consulte Assemblies e
Execuo Lado a Lado.
Assemblies podem ser estticos ou dinmicos. Assemblies estticos podem incluir tipos .NET
Framework (interfaces e classes), bem como recursos para o assembly (bitmaps, arquivos JPEG,
arquivos de recursos, e assim por diante). Assemblies estticos so armazenados em disco em
arquivos PE. Voc tambm pode usar o .NET Framework para criar assemblies dinmicos, que
so executados diretamente da memria e no so salvos em disco antes da execuo. Voc
pode salvar assemblies dinmicos no disco aps sua execuo.
H vrias maneiras de criar assemblies. Voc pode usar ferramentas de desenvolvimento, como
Visual Studio 2005, que voc usou anteriormente para criar arquivos .dll ou .exe. Voc pode usar
ferramentas fornecidas pelo SDK do .NET Framework para criar assemblies, com mdulos criados
em outros ambientes de desenvolvimento. Voc tambm pode usar APIs do Common Language
Runtime, como Reflection.Emit, para criar assemblies dinmicos.
Visual C# Consolidado
437
Benefcios do Assembly
Assemblys so projetados para simplificar a implantao de aplicativos e para solucionar
problemas de versionamento que podem ocorrer em aplicativos baseados em componentes.
Usurios finais e desenvolvedores esto familiarizados com problemas de versionamento e
implantao. Problemas esses que surgem nos atuais sistemas baseados em componentes.
Alguns usurios finais tm sofrido a frustrao de instalar um novo aplicativo em seus
computadores apenas para descobrir que outro aplicativo existente simplesmente parou de
funcionar. Muitos desenvolvedores j gastaram inmeras horas tentando manter consistentes
todas as entradas do registro necessrias para ativar uma classe COM.
Muitos problemas de implantao tm sido resolvidos atravs uso de assemblys no .NET
Framework. Por eles seres componentes autodescritivos e por no dependerem de entradas do
registro, assemblys permitem que a instalao de aplicativos no tenha impacto algum. Eles
tambm simplificam a desinstalao e duplicao de aplicativos.
Problemas de Versionamento
Atualmente, dois problemas de versionamento ocorrem em aplicativos Win32:
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.
Acabando com os conflitos de DLL
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 Common Language Runtime usa assemblys para continuar essa evoluo em direo de uma
soluo completa para conflitos de DLL.
A Soluo do Assembly
Visual C# Consolidado
438
Para resolver problemas de versionamento, assim como problemas restantes que levam a
conflitos de DLL, o ambiente de execuo usa assemblys a fim de:
Consulte tambm
Sumrio de assembly
Em geral, um assembly esttico pode consistir de quatro elementos:
Metadados de tipo.
Um conjunto de recursos.
Como alternativa, os elementos de um assembly podem estar contidos em vrios arquivos. Esses
arquivos podem ser mdulos de cdigo compilado (.netmodule), recursos (como arquivos .bmp ou
.jpg), ou outros arquivos necessrios para o aplicativo. Crie um assembly multi-arquivos quando
desejar combinar mdulos escritos em diferentes linguagens e otimizar o download de um
aplicativo colocando tipos raramente usados em um mdulo que baixado apenas quando
necessrio.
Na ilustrao a seguir, o desenvolvedor de um aplicativo hipottico escolheu separar alguns
cdigos utilitrios em um mdulo diferente e manter um arquivo grande de recurso (neste caso
uma imagem .bmp) em seu arquivo original. O .NET Framework baixa um arquivo somente
quando ele referenciado; manter cdigos raramente referenciados em um arquivo separado do
aplicativo otimiza o download de cdigo.
Assembly multi-arquivos
Visual C# Consolidado
439
Observao
Os arquivos que compem um assembly multi-arquivos no so fisicamente vinculados pelo
sistema de arquivos. Em vez disso, eles so vinculados atravs do manifesto do assembly e o
Common Language Runtime gerencia-os como uma unidade.
Nesta ilustrao, todos os trs arquivos pertencem a um assembly, conforme descrito no
manifesto do assembly contido em MyAssembly.dll. Para o sistema de arquivos, eles so trs
arquivos separados. Observe que o arquivo Util.netmodule foi compilado como um mdulo porque
ele no contm nenhuma informao de assembly. Quando o assembly foi criado, o manifesto do
assembly foi adicionado ao MyAssembly.dll, indicando seu relacionamento com Util.netmodule e
Graphic.bmp.
Assim como voc cria hoje seu cdigo-fonte, voc toma decises sobre como particionar a
funcionalidade do seu aplicativo em um ou mais arquivos. Ao criar cdigo do .NET Framework,
voc tomar decises semelhantes sobre como particionar a funcionalidade em um ou mais
assemblies.
Manifesto do Assembly
Cada assembly, seja esttico ou dinmico, contm uma coleo de dados que descrevem como
os elementos do assembly se relacionam entre si. O manifesto do assembly contm esses
metadados do assembly. O manifesto de um assembly contm todos os metadados necessrios
para especificar os requisitos de verso e o identificador de segurana, assim como todos os
metadados necessrios para definir o escopo do assembly e analisar referncias a recursos e
classes. O manifesto do assembly pode ser armazenado em um arquivo PE (.exe ou .dll) com
cdigo da Microsoft Intermediate Language (MSIL) ou em um arquivo PE autnomo que contm
somente informaes do manifesto do assembly.
A ilustrao a seguir mostra as diferentes maneiras nas quais o manifesto pode se armazenado.
Tipos de assemblys
Visual C# Consolidado
440
Descrio
Cultura
Informaes de
nomes fortes
Lista de todos os
arquivos no
assembly
Informaes de
Visual C# Consolidado
441
referncia de tipo
Informaes sobre
assemblys
referenciados
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.
Visual C# Consolidado
442
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.
Quando voc cria um assembly, voc pode especificar um conjunto de permisses que o
assembly requer para executar. Se determinadas permisses so concedidas ou no a um
assembly isso baseado nas evidncias.
Visual C# Consolidado
443
A evidncia de entrada ser mesclada com a evidncia coletada pelo carregador para criar
um conjunto final de evidncias usadas para resoluo de poltica. Os mtodos que usam essa
semntica incluem Assembly.Load, Assembly.LoadFrom e Activator.CreateInstance.
A evidncia de entrada usada inalterada como o conjunto final de evidncias usado para
resoluo de poltica. Os mtodos que usam essa semntica incluem
AppDomain.DefineDynamicAssembly() e Assembly.Load(byte[]).
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.
Visual C# Consolidado
444
Versionamento de Assembly
Todos os versionamentos de assemblys que usam o Common Language Runtime so feitos no
nvel do assembly. A verso de um assembly e as verses de assemblys dependentes so
registradas no manifesto do assembly. O poltica de verses padro do ambiente de execuo diz
que aplicativos devem executar somente com as verses com que foram criados e testados, a
menos que essa poltica de verses seja anulada por uma outra poltica explcitada nos arquivos
de configurao (o arquivo de configurao do aplicativo, o arquivo de poltica de editor e o
arquivo de configurao do administrador do computador).
Observao
Versionamento feito somente em assemblys com nomes fortes.
O ambiente de execuo executa as seguintes etapas para resolver uma solicitao de ligao de
assembly:
1.
2.
Verificar a referncia do assembly original para determinar qual verso do assembly deve
ser ligada.
Verificar os arquivos de configurao apropriados para aplicar um poltica de verses.
Visual C# Consolidado
445
3.
4.
Para obter mais informaes sobre como configurar aplicativos, consulte Arquivos de
Configurao. Para obter mais informaes sobre polticas de ligao, consulte Como o Ambiente
de Execuco Localiza Assemblys.
Informaes de Verso
Cada assembly possui duas maneiras diferentes de expressar informaes de verso:
Atravs de uma verso informativa, uma seqncia que representa informaes de verso
adicionais includa apenas para fins informativos.
Visual C# Consolidado
446
Posicionamento do Assembly
Para a maioria dos aplicativos .NET Framework, voc localiza assemblies que compem um
aplicativo no diretrio do aplicativo, em uma subpasta da pasta do aplicativo ou no cache global
de assemblies (se o assembly for compartilhado). Voc pode substituir onde o Common Language
Runtime procura por um assembly, usando o elemento <CODEBASE> em um arquivo de
configurao. Se o assembly no tiver um nome forte, a localidade especificada usando o
elemento <CODEBASE> restrita para o diretrio do aplicativo ou para a subpasta. Se o
assembly tiver um nome forte, o elemento <CODEBASE> pode especificar qualquer localidade no
computador ou em uma rede.
Visual C# Consolidado
447
Executar E/S.
Fornecer acesso a dados, uma GUI detalhada do lado do cliente e uma GUI do lado do
cliente controlada pelo servidor.
O .NET Framework fornece um rico conjunto de interfaces, bem como classes abstratas e
concretas. Voc pode usar diretamente as classes concretas ou pode derivar suas prprias
classes a partir delas. Para usar a funcionalidade de uma interface, voc pode criar uma classe
que implementa a interface ou derivar uma classe de uma das classes do .NET Framework que
implementa a interface.
Convenes de Nomenclatura
Visual C# Consolidado
448
Tipo de Tipo de
dado em dado em
C#
C++
Tipo de
dado em
JScript
Categoria
Nome
da
classe
Inteiro
Byte
Byte
Byte
char
Byte
SByte
SByte
sbyte
signed
char
SByte
Int16
Short
short
short
short
Descrio
Visual C# Consolidado
449
Int32
Integer
int
int
-oulong
int
Int64
Long
long
__int64
long
UInt16
UShort
ushort
unsigned
short
UInt16
UInt32
UInteger
uint
unsigned
int
-ouunsigned
long
UInt32
UInt64
ULong
ulong
unsigned
__int64
UInt64
Single
float
float
float
Double
double
double
double
Lgico
Boolean
Boolean
bool
bool
bool
Outros
Char
Char
char
wchar_t
char
Decimal
Decimal
decimal
Decimal
Decimal
IntPtr
IntPtr
Nenhum
tipo
interno.
IntPtr
Nenhum
tipo
interno.
IntPtr
Nenhum
tipo
interno.
IntPtr
UIntPtr
UIntPtr
Nenhum
tipo
interno.
UIntPtr
Nenhum
tipo
interno.
UIntPtr
Nenhum
tipo
interno.
UIntPtr
A raiz da hierarquia de
objeto.
Object
object
Object*
Object
Uma seqncia de
String
caracteres Unicode
imutvel e de comprimento
fixo.
string
String*
String
Ponto
flutuante
Objetos de Object
Classe
String
Visual C# Consolidado
450
Alm dos tipos de dados base, o namespace System contm mais de 100 classes, variando de
classes que tratam excees a classes que lidam com os principais conceitos do ambiente de
execuo, como domnios de aplicativo e coleta de lixo. O namespace System tambm contm
vrios namespaces de segundo nvel.
Para obter mais informaes sobre namespaces, consulte a Referncia do .NET Framework. Essa
documentao fornece uma viso geral sobre cada namespace, assim como uma descrio
formal de cada tipo e de seus membros.
Consultar...
ADO.NET
ADO.NET
Domnios de aplicativos
ASP.NET
Assemblies
Programao assncrona
CodeDom
Configurao
Configurando aplicativos
Configurando aplicativos ASP.NET
Acesso a dados
Acesso a dados
Depurao
Implantao
Visual C# Consolidado
451
Eventos
Excees
Coleta de lixo
Coleta de lixo
GDI +
Tipos genricos
E/S
Interoperabilidade
Interoperabilidade
Desenvolvimento mvel
Redes
Programao de redes
Reflexo
Reflexo
Componentes atendidos
Serializao
Serializao
Threads
Threads gerenciadas
Formulrios do Windows
Visual C# Consolidado
452
Controles de formulrios do
Windows
XML
Programao robusta
Neste exemplo, (.. ",) e o cdigo relaciona todos os arquivos na pasta atual ter uma extenso.exe,
junto com seus tamanho do arquivo, hora de criao, e nome. " a pasta atual, indicada pelo
DirectoryInfo Supondo que havia arquivos.exe na subpasta \Bin da C:\MyDir, a sada desse cdigo
pode parecer isso:
953 7/20/2000 10:42 AM C:\MyDir\Bin\paramatt.exe 664 7/27/2000 3:11 PM C:\MyDir\Bin\tst.exe 403
8/8/2000 10:25 AM C:\MyDir\Bin\dirlist.exe
Se voc desejar uma lista de arquivos em outro diretrio, como o diretrio de raiz C:\, passar o
argumento " C:\ " para o executvel gerado por compilao esse cdigo, por exemplo: "
testApplication.EXE C:\ ".
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Como: Ler e gravar em um arquivo de dados recm criado
O BinaryWriter e BinaryReader classes so usados para gravar e ler dados, em vez de caracteres
seqncias. O exemplo de cdigo a seguir demonstra gravar dados e Ler dados de um fluxo de
arquivo novo e vazio (Test.data). Aps criar os dados arquivos na pasta atual, a associada
BinaryWriter e BinaryReader so criados, usado para gravar os inteiros 0 a 10 para Test.data,
que deixa o ponteiro de arquivo no final do arquivo. e BinaryWriter Aps definir o ponteiro de
arquivo volta para a origem, as BinaryReader leituras sem o contedo especificado.
Visual C# Consolidado
453
Exemplo
C#
using System; using System.IO; class MyStream { private const string FILE_NAME = "Test.data"; public
static void Main(String[] args) { // Create the new, empty data file. if (File.Exists(FILE_NAME)) {
Console.WriteLine("{0} already exists!", FILE_NAME); return; } FileStream fs = new
FileStream(FILE_NAME, FileMode.CreateNew); // Create the writer for data. BinaryWriter w = new
BinaryWriter(fs); // Write data to Test.data. for (int i = 0; i < 11; i++) { w.Write( (int) i); } w.Close();
fs.Close(); // Create the reader for data. fs = new FileStream(FILE_NAME, FileMode.Open,
FileAccess.Read); BinaryReader r = new BinaryReader(fs); // Read data from Test.data. for (int i = 0; i < 11;
i++) { Console.WriteLine(r.ReadInt32()); } r.Close(); fs.Close(); } }
Programao robusta
Se Test.data acionada. j existe no diretrio atual, um IOException Usar FileMode.Create para
criar um novo arquivo sem organizando sempre um IOException.
Como: Abrir e anexar aum arquivo de log
e StreamWriterStreamReader caracteres para gravar e ler caracteres fluxos. O exemplo de cdigo
a seguir abre o log.txt arquivo para entrada, ou cria o arquivo se ele ainda no existir, e acrescenta
informaes ao final do arquivo. O contedo do arquivo so gravados na sada padro para
exibio. Como uma alternativa para este exemplo, as informaes pode ser armazenadas como
uma nica seqncia ou matriz de seqncia, e a WriteAllText. ou WriteAllLines mtodo pode ser
usado para obter a mesma funcionalidade
Observao
Do My.Application.Log Usurios Visual Basic podem optar por usar os mtodos e propriedades
fornecidas pelo ou My.Computer.FileSystem objetos para criar ou gravar em arquivos de log.
Para obter mais informaes, consulte Objeto My.Application.Log e Objeto
My.Computer.FileSystem.
Exemplo
C#
using System; using System.IO; class DirAppend { public static void Main(String[] args) { using
(StreamWriter w = File.AppendText("log.txt")) { Log ("Test1", w); Log ("Test2", w); // Close the writer and
underlying file. w.Close(); } // Open and read the file. using (StreamReader r = File.OpenText("log.txt")) {
DumpLog (r); } } public static void Log (String logMessage, TextWriter w) { w.Write("\r\nLog Entry : ");
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
w.WriteLine(" :"); w.WriteLine(" :{0}", logMessage); w.WriteLine ("-------------------------------"); // Update
the underlying file. w.Flush(); } public static void DumpLog (StreamReader r) { // While not at the end of the
file, read and write lines. String line; while ((line=r.ReadLine())!=null) { Console.WriteLine(line); } r.Close();
}}
Visual C# Consolidado
454
O primeiro exemplo mostra como adicionar texto a um arquivo existente. O segundo exemplo
mostra como criar um novo arquivo de texto e gravar uma seqncia a ele. Funcionalidade
semelhante pode ser fornecida pelos mtodos WriteAllText.
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Exemplo
C#
using System; using System.IO; class Test { public static void Main() { // Create an instance of StreamWriter
to write text to a file. // The using statement also closes the StreamWriter. using (StreamWriter sw = new
StreamWriter("TestFile.txt")) { // Add some text to the file. sw.Write("This is the "); sw.WriteLine("header
for the file."); sw.WriteLine("-------------------"); // Arbitrary objects can also be written to the file.
sw.Write("The date is: "); sw.WriteLine(DateTime.Now); } } }
C#
using System; using System.IO; public class TextToFile { private const string FILE_NAME = "MyFile.txt";
public static void Main(String[] args) { if (File.Exists(FILE_NAME)) { Console.WriteLine("{0} already
exists.", FILE_NAME); return; } using (StreamWriter sw = File.CreateText(FILE_NAME)) { sw.WriteLine
("This is my file."); sw.WriteLine ("I can write ints {0} or floats {1}, and so on.", 1, 4.2); sw.Close(); } } }
C#
using System; using System.IO; public class TextFromFile { private const string FILE_NAME = "MyFile.txt";
public static void Main(String[] args) { if (!File.Exists(FILE_NAME)) { Console.WriteLine("{0} does not
exist.", FILE_NAME); return; } using (StreamReader sr = File.OpenText(FILE_NAME)) { String input; while
((input=sr.ReadLine())!=null) { Console.WriteLine(input); } Console.WriteLine ("The end of the stream has
been reached."); sr.Close(); } }
Programao robusta
Visual C# Consolidado
455
Este cdigo cria um StreamReader que aponta para MyFile.txt por meio de uma chamada para
File.OpenText. Retorna StreamReader.ReadLine cada linha como uma seqncia. Quando no
houver nenhum mais caracteres para ler, uma mensagem exibida com essa informao, e o
fluxo est fechado.
Observao
Usurios Visual Basic podem optar por usar os mtodos e propriedades fornecidas pelo objeto
My.Computer.FileSystem para a E/s de arquivos. Para obter mais informaes, consulte Objeto
My.Computer.FileSystem.
Como Ler Caracteres de uma Seqncia de Caracteres
O exemplo de cdigo a seguir permite que voc a ler um determinado nmero de caracteres uma
seqncia existente, comeando no local especificado na seqncia. Use StringReader para fazer
isso, conforme demonstrado abaixo.
Este cdigo define uma seqncia e converte-para uma matriz de caracteres, que ento pode ser
lido pelo utilizando o mtodo apropriado StringReader.Read.
Este exemplo l apenas o nmero especificado de caracteres da seqncia, da seguinte maneira.
Some number o
Exemplo
C#
using System; using System.IO; public class CharsFromStr { public static void Main(String[] args) { // Create
a string to read characters from. String str = "Some number of characters"; // Size the array to hold all the
characters of the string // so that they are all accessible. char[] b = new char[24]; // Create an instance of
StringReader and attach it to the string. StringReader sr = new StringReader(str); // Read 13 characters from
the array that holds the string, starting // from the first array member. sr.Read(b, 0, 13); // Display the
output. Console.WriteLine(b); // Close the StringReader. sr.Close(); } }
Visual C# Consolidado
456
Programao robusta
Este exemplo ilustra o uso do para modificar uma seqncia existente. um StringBuilder Observe
que isso requer uma declarao adicional using, como a StringBuilder classe um membro do
espao para nome System.Text. Alm disso, em vez de definir uma seqncia e convert-la em
uma matriz de caracteres, este um exemplo de criar uma matriz de caractere diretamente e
inicializando ele.
Esse cdigo produz o seguinte resultado.
Some number of characters to
2.
3.
2.
3.
Exemplo
C#
using System; using System.IO; using System.Security.AccessControl; namespace FileSystemExample { class
FileExample { public static void Main() { try { string fileName = "test.xml"; Console.WriteLine("Adding
access control entry for " + fileName); // Add the access control entry to the file. AddFileSecurity(fileName,
@"DomainName\AccountName", FileSystemRights.ReadData, AccessControlType.Allow);
Console.WriteLine("Removing access control entry from " + fileName); // Remove the access control entry
from the file. RemoveFileSecurity(fileName, @"DomainName\AccountName", FileSystemRights.ReadData,
AccessControlType.Allow); Console.WriteLine("Done."); } catch (Exception e) { Console.WriteLine(e); } } //
Adds an ACL entry on the specified file for the specified account. public static void AddFileSecurity(string
fileName, string account, FileSystemRights rights, AccessControlType controlType) { // Get a FileSecurity
object that represents the // current security settings. FileSecurity fSecurity =
File.GetAccessControl(fileName); // Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType)); // Set the new access
settings. File.SetAccessControl(fileName, fSecurity); } // Removes an ACL entry on the specified file for the
specified account. public static void RemoveFileSecurity(string fileName, string account, FileSystemRights
rights, AccessControlType controlType) { // Get a FileSecurity object that represents the // current security
settings. FileSecurity fSecurity = File.GetAccessControl(fileName); // Add the FileSystemAccessRule to the
Visual C# Consolidado
457
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
Uso
String.Format
String.Concat
String.JOIN
String.Insert
String.CopyTo
Formato
Voc pode usar o String.Format mtodo para criar seqncias formatadas e concatenar
seqncias que representam vrios objetos Qualquer objeto passado esse mtodo converte
automaticamente em uma seqncia. Por exemplo, se seu aplicativo deve exibir um Int32 valor e
um DateTime valor para o usurio, voc pode construir uma seqncia para representar esses
valores usando o Format mtodo facilmente. Para obter informaes sobre como formatar
convenes usadas com esse mtodo, consulte a seo sobre composio formatao.
O exemplo a seguir usa o Format mtodo para criar uma seqncia que usa uma varivel Inteiro.
C#
int MyInt = 12; string MyString = String.Format("Your dog has {0} fleas. It is time to get a flea collar. The
current universal date is: {1:u}." , MyInt, DateTime.Now); Console.WriteLine(MyString);
O exemplo anterior exibe o texto ' Your dog has 12 fleas. It is time to get a flea collar. The current
universal date is: 2001-04-10 15:51:24Z.. ' para o console Exibe DateTime.Now a data atual e tempo
de uma maneira especificada pela cultura associada a segmento atual.
Concat
O String.Concat mtodo pode ser usado para facilmente criar um novo objeto seqncia de
caracteres de dois ou mais objetos existentes. Ele fornece uma forma independente de linguagem
para concatenar seqncias. Esse mtodo aceita qualquer classe que deriva de System.Object.
O exemplo a seguir cria uma seqncia de dois objetos de seqncia e um caractere separating.
Visual C# Consolidado
458
C#
string MyString = "Hello"; string YourString = "World!"; Console.WriteLine(String.Concat(MyString, ' ',
YourString));
Visual C# Consolidado
459
Uso
String.Trim
String.TrimEnd
String.TrimStart
String.Remove
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 String.TrimEnd mtodo Remove caracteres a partir do final de uma seqncia, criando um
novo objeto de seqncia. Uma matriz de caracteres passado para este mtodo para especificar
os caracteres a ser removido. A ordem dos elementos na matriz de caracteres no afeta a
operao aparo. O Trim pra quando for encontrado um caractere no especificado na matriz.
O exemplo a seguir remove as letras de uma seqncia usando o TrimEnd mtodo ltima. Neste
exemplo, a posio do caractere 'r' e o 'W' caractere esto invertidos para ilustrar que a ordem dos
caracteres na matriz no importa. Observe que este cdigo remove a palavra ltima de MyString
mais a primeira parte.
C#
string MyString = "Hello World!"; char[] MyChar = {'r','o','W','l','d','!',' '}; string NewString =
MyString.TrimEnd(MyChar); Console.WriteLine(NewString);
Visual C# Consolidado
460
O exemplo a seguir remove a ltima palavra de uma seqncia usando o TrimEnd mtodo. Nesse
cdigo, uma vrgula segue a palavra Hello e, porque a vrgula no est especificada na matriz de
caracteres para cortar, o Trim termina na vrgula.
C#
string MyString = "Hello, World!"; char[] MyChar = {'r','o','W','l','d','!',' '}; string NewString =
MyString.TrimEnd(MyChar); Console.WriteLine(NewString);
Uso
Visual C# Consolidado
461
String.PadLeft
Alinha direita e PADS uma seqncia para que seja uma distncia
especificada a partir do incio da seqncia seu caractere mais direita.
String.PadRight
Alinha esquerda e PADS uma seqncia para que seja uma distncia
especificada a partir do final de seqncia seu caractere mais direita.
PadLeft
O String.PadLeft mtodo cria uma nova seqncia que alinhado direita para que o ltimo
caractere seja um nmero de espaos do primeiro ndice da seqncia especificado. Espaos em
branco so inseridos se voc no usar uma substituio que permite que voc se especificar seu
prprio caractere de preenchimento personalizada.
O exemplo a seguir usa o PadLeft mtodo para criar uma nova seqncia que tenha um
comprimento total de vinte espaos.
C#
string MyString = "Hello World!"; Console.WriteLine(MyString.PadLeft(20, '-'));
Uso
String.Compare
String.StartsWith
String.EndsWith
Visual C# Consolidado
462
um valor booleano.
String.Equals
String.IndexOf
String.LastIndexOf
Compare
O String.Compare mtodo fornece uma maneira completa de comparar o objeto de seqncia
atual para outro objeto ou seqncia. Esse mtodo culturally ciente. Voc pode usar esta funo
para comparar dois seqncias ou substrings de duas seqncias. Alm disso, overloads so
fornecidos que considerar ou Ignorar maisculas e culturais varincia. A tabela a seguir mostra
valores inteiros trs que podem ser retornados por esse mtodo.
Tipo de valor
Condio
Um inteiro negativo
igual a strAstrB.
Um inteiro positivo
Ou1
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?"));
Visual C# Consolidado
463
Visual C# Consolidado
464
se no estiver. O exemplo a seguir usa esse mtodo para determinar se um objeto de seqncia
comea com " Hello ".
C#
string MyString = "Hello World"; Console.WriteLine(MyString.StartsWith("Hello"));
Visual C# Consolidado
465
Alterando a Caixa
Se voc escrever um aplicativo que aceita entrada de um usurio, nunca pode certificar-que caso
ele ou ela usar para inserir os dados. Como os mtodos que comparam seqncias e caracteres
diferenciam maisculas de minsculas, voc deve converter caso de seqncias de caracteres
inseridos pelos usurios antes comparando-os em valores constantes. Voc pode alterar
facilmente caso de uma seqncia. A tabela a seguir descreve dois mtodos alterao caso. Cada
mtodo fornece uma substituio que aceita uma cultura.
Nome do mtodo
Uso
String.ToUpper
String.ToLower
ToUpper
O String.ToUpper mtodo altera todos os caracteres em uma seqncia em maisculas. O
exemplo seguinte converte a seqncia " World hello! de " Misto caso em maisculo.
C#
String MyString = "Hello World!"; Console.WriteLine(MyString.ToUpper());
Visual C# Consolidado
466
Alm disso, voc pode usar a leitura / gravar Capacidade propriedade para definir o tamanho
mximo do objeto. O exemplo a seguir usa a Capacity propriedade para definir o comprimento
mximo de objeto.
C#
MyStringBuilder.Capacity = 25;
O EnsureCapacity mtodo pode ser usado para verificar a capacidade do atual StringBuilder. Se
a capacidade for maior que o valor passado, nenhuma alterao feita; no entanto, se a
capacidade for menor que o valor passado, a capacidade atual alterada para corresponder o
valor passado.
A Comprimento propriedade pode tambm ser exibido ou definido. Se voc definir a Length
propriedade para um valor que maior que a Capacity propriedade, a Capacity propriedade
automaticamente alterada para o mesmo valor que a Length propriedade. A configurao da
Length propriedade para um valor que menor que o comprimento da seqncia de caracteres
dentro da atual StringBuilder diminui a seqncia.
Modificar a seqncia de caracteres StringBuilder
Visual C# Consolidado
467
A tabela a seguir lista os mtodos que podem ser usados para modificar o contedo de um
StringBuilder.
Nome do mtodo
Uso
StringBuilder.Append
StringBuilder.Remove
StringBuilder.Replace
Acrescentar
O Append mtodo pode ser usado para adicionar texto ou uma representao seqncia de um
objeto ao final de uma seqncia representada por atual StringBuilder. O exemplo a seguir
inicializa e ento acrescenta algum texto para o final do objeto. Para " Hello World " um
StringBuilder Espao em alocado automaticamente conforme necessrio.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a
beautiful day."); Console.WriteLine(MyStringBuilder);
Este exemplo exibe Hello World! What a beautiful day. para o console.
AppendFormat
Do Formatao seo o AppendFormat mtodo adiciona texto ao final do StringBuilder, mas
tambm implementa a IFormattable interface e portanto aceita as seqncias Formato padro
descritas em. Voc pode usar esse mtodo para personalizar o formato de variveis e acrescentar
esses valores para um StringBuilder. O exemplo a seguir utiliza o AppendFormat mtodo para
colocar um valor inteiro formatado como um valor de moeda no final de um StringBuilder.
C#
int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);
Inserir
O Insert mtodo adiciona uma seqncia ou objeto para uma posio especificada na atual
StringBuilder. O exemplo a seguir utiliza esse mtodo para inserir uma palavra na sexta posio
de um StringBuilder.
Visual C# Consolidado
468
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
Remover
Use o Remove mtodo para remover um nmero especificado de caracteres da atual
StringBuilder, comeando em um ndice com base zero especificado. O exemplo a seguir utiliza
o Remove mtodo para diminuir um StringBuilder.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
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 substituilos com o caractere ponto de interrogao (?).
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
Visual C# Consolidado
469
Quando o cdigo anterior executado, o usurio solicitado a digitar sua prpria nome e
endereo. O aplicativo coloca as informaes nas propriedades adequadas e exibe as
informaes novamente para o usurio, criar uma nica seqncia que exibe a cidade, estado e
CEP informaes.
Como Converter Tipos de Dados Usando System.Convert
A System.Convert classe fornece um conjunto completo de mtodos para converses com
suporte. Ele fornece uma maneira idioma neutro para realizar converses e est disponvel para
todos os idiomas que direcionar o Common Language Runtime. Enquanto idiomas diferentes
podem ter tcnicas diferentes para converter tipos de dados, a Convert classe assegura que
todas as converses comuns sero disponveis em um formato genrico. Esta classe executa
converses restrio, bem como converses para tipos de dados no relacionadas. Por exemplo,
converses de String tipos para tipos numricos, DateTime Tipos a String tipos, e String Tipos
para Boolean tipos tm suporte. Do lista de mtodos para obter uma lista de converses
disponveis, consulte na classe Convert. A Convert classe executa converses verificados e
sempre gera uma exceo se no houver suporte para a converso. A exceo geralmente um
OverflowException. Para obter uma lista de converses com suporte, consulte o Digite tabelas de
converso.
Visual C# Consolidado
470
Voc pode passar o valor que voc deseja para converter em um dos mtodos apropriados na
classe Convert e inicializar o valor retornado para uma nova varivel. Por exemplo, o cdigo a
seguir usa a Convert classe para transformar um String valor em um Boolean valor.
Exemplo
C#
string MyString = "true"; bool MyBool = Convert.ToBoolean(MyString); // MyBool has the value of True.
A Convert classe tambm til se voc tiver uma seqncia que voc deseja converter em um
valor numrico. O exemplo de cdigo a seguir converte uma seqncia de caracteres que contm
caracteres numricos em um Int32 valor.
C#
string newString = "123456789"; int MyInt = Convert.ToInt32(newString); // MyInt has the value of
123456789.
A Convert classe tambm pode ser usada para uma converso restrio que no pode ser
executada implicitamente em voc estiver usando o idioma especfico. O exemplo de cdigo a
seguir mostra uma converso de restrio em uma menor Int32 utilizando o Convert.ToInt32
Mtodo. um Int64
C#
Int64 MyInt64 = 123456789; int MyInt = Convert.ToInt32(MyInt64); // MyInt has the value of 123456789.
s vezes, executar uma converso restrio com as Convert alteraes de classe o valor do item
est sendo convertido. O seguinte cdigo exemplo converte em um Int32 valor. um Double Nesse
caso, o valor arredondado de 42.72 para 43 para concluir a converso.
C#
Double MyDouble = 42.72; int MyInt = Convert.ToInt32(MyDouble); // MyInt has the value of 43.
Visual C# Consolidado
471
Definir colees
Uma coleo um conjunto de objetos que so agrupados da mesma forma digitados.
Objetos de qualquer tipo podem ser agrupados em uma nica coleo do tipo Object para tirar
proveito dos construes que so inerentes no mesmo idioma. Por exemplo, a instruo C#
foreach (for each. no Visual Basic) espera todos os objetos na coleo para ser de um nico tipo
No entanto, em uma coleo de tipo Object, processamento adicional feito nos elementos
individualmente, como boxing e unboxing ou converses, que afetam o desempenho da coleo.
Boxing e unboxing geralmente ocorrem se armazenar ou recuperar um tipo de valor em uma
coleo de tipo Object.
Genricas colees, como List, e altamente digitadas colees nongeneric, como StringCollection,
evitar esses acertos de desempenho se o tipo de elemento o tipo que a coleo destinada a
(por exemplo, armazenar ou recuperar seqncias de.) um StringCollection Alm disso,
conjuntos de tipo forte executar automaticamente validao Tipo de cada elemento adicionado
coleo.
Todas as colees que direta ou indiretamente implementam a ICollection interface ou a
ICollection interface genrico compartilhar vrios recursos, alm de mtodos que adicionar,
remover, ou procurar elementos:
Visual C# Consolidado
472
Um enumerador.
Um enumerador um objeto que itera atravs de sua coleo associada. Ele pode ser
considerado de um ponteiro mvel para qualquer elemento na coleo. Um enumerador pode
ser associado a uma coleo, mas um conjunto pode ter vrios enumeradores. A instruo C#
foreach (for each. no Visual Basic) usa o enumerador e oculta a complexidade da
manipulao o enumerador
Membros de sincronizao.
Sincronizao fornece segurana do segmento ao acessar elementos da coleo. As colees
so no segmento seguro por padro. Apenas classes de alguns em espaos para nome
System.Collections fornecem um Synchronize mtodo que cria um wrapper isenta de
segmentos atravs da coleo. No entanto, todas as classes em todos os System.Collections
espaos fornecem uma SyncRoot propriedade que pode ser usada para criar seus prprios
wrapper isenta de segmentos por classes derivadas. Uma IsSynchronized propriedade
tambm fornecida para determinar se a coleo segmento seguro. Sincronizao no est
disponvel na interface ICollection genrico.
Observe que a ICollection interface genrica tem membros adicionais que no inclui a interface
nongeneric.
Os seguintes recursos so implementados em algumas classes em espaos para nome
System.Collections:
Capacidade e Contagem.
A capacidade de uma coleo o nmero de elementos ele pode conter. A contagem de uma
coleo o nmero de elementos ele realmente contm. A BitArray um caso especial; sua
capacidade o mesmo que seu comprimento, que o mesmo que a contagem. Algumas
colees ocultar a capacidade, a contagem ou ambos.
Automaticamente todas as colees na System.Collections espaos expanda na capacidade
quando a capacidade atual alcanada. A memria realocada, e os elementos so copiados
da coleo antiga para a nova OU. Isso reduz o cdigo necessrio para usar a coleo;
entretanto, o desempenho da coleo pode ainda ser afetado negativamente. A melhor
maneira de evitar desempenho deficiente causado por vrios realocaes para definir a
capacidade inicial a ser o tamanho estimado da coleo.
Bound LOWER.
O limite inferior de uma coleo o ndice de seu primeiro elemento. Todas as colees
indexadas na System.Collections espaos tm um limite inferior de zero. tem Array um limite
inferior de zero por padro, mas um limite inferior diferente pode ser definido ao criar uma
instncia da Array classe usando CreateInstance.
Bit colees.
Visual C# Consolidado
473
Especializado colees.
Esses so colees com finalidades, geralmente para lidar com um tipo especfico de
elemento, como StringDictionary altamente especficas.
Certifique-se de escolher uma classe coleo cuidadosamente. Como cada coleo tem seu
prprio funcionalidade, cada tambm possui seu prprio limitaes. O mais especializada uma
coleo , quanto mais limitado ele . Para obter dicas sobre como escolher uma coleo,
consulte Selecionar uma Classe de coleo.
Colees de bits
Colees bits so colees cujos elementos so sinalizadores de bit. Ter porque cada elemento
um pouco em vez de um objeto, essas colees comportamento um pouco diferente das outras
colees.
A BitArray classe uma classe coleo na qual a capacidade sempre o mesmo que a
contagem. Elementos so adicionados ao aumentando a Length propriedade; elementos so
excludos diminuindo a Length propriedade. um BitArray A BitArray classe oferece mtodos que
no so encontrados em outras colees, incluindo aqueles que permitem vrios elementos a ser
modificado usando um filtro, como And, Or uma vez, Xor., Not e SetAll
Visual C# Consolidado
474
A BitVector32 classe uma estrutura que oferece a mesma funcionalidade como BitArray, mas
com desempenho mais rpido. BitVector32 mais rpido porque um tipo de valor e portanto
alocados na pilha, enquanto BitArray um tipo de referncia e, portanto, alocado na pilha.
Pode BitVector32 Armazenar exatamente 32 bits, enquanto BitArray pode armazenar um
nmero de bits varivel. Armazena BitVector32 os sinalizadores de bit e pequenos nmeros
inteiros, tornando assim ideal para dados que no seja expostos para o usurio. No entanto, se o
nmero de sinalizadores de bit necessrio desconhecido, varivel, ou maior que 32, use
BitArray.
BitArray no espao para nome System.Collections; BitVector32 no espao para nome
System.Collections.Specialized.
Colees especializados
Colees especializadas so colees com finalidades altamente especficas.
NameValueCollection baseado no NameObjectCollectionBase; No entanto,
NameValueCollection aceita vrios valores por chave, enquanto NameObjectCollectionBase
aceita apenas um valor por chave.
Algumas colees altamente digitadas no espao para nome System.Collections.Specialized so
StringCollection e StringDictionary, ambos os quais contm valores que so seqncias
exclusivamente.
A CollectionsUtil classe cria instncias de colees no diferencia maisculas de minsculas.
Algumas colees transformar. Por exemplo, a HybridDictionary classe inicia como se tornar
grande. e se torna um Hashtable quando um ListDictionary O KeyedCollection uma lista mas ela
tambm cria um dicionrio de pesquisa quando o nmero de elementos atinge um limite
especificado.
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.
Visual C# Consolidado
475
Voc precisa uma lista seqencial onde o elemento normalmente ser descartado aps
seu valor recuperado?
o
o
Cada elemento ir conter um valor, uma combinao de uma chave e um valor, ou uma
combinao de uma chave e vrios valores?
Um valor: usar qualquer um das colees com base na IList interface ou a IList
interface genrica.
Uma chave e um valor: usar qualquer um das colees com base na IDictionary
interface ou a IDictionary interface genrica.
Voc precisa classificar os elementos de forma diferente de como eles foram inseridos?
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.
Visual C# Consolidado
476
ListDictionary mais rpido do que Hashtable para colees pequenos (10 itens
ou menos). A SortedDictionary classe genrico oferece pesquisa mais rpida que a
Dictionary classe genrica.
Voc precisa colees que aceitam somente seqncias?
Alm disso, voc pode usar qualquer uma das classes a coleo genrica no
espao para nome System.Collections.Generic como colees de seqncia de tipo forte,
especificando a String classe para seus argumentos tipo genrico.
Comportamento de um enumerador
Inicialmente, o Enumerador est posicionado antes do primeiro elemento na coleo. Tambm
Reset traz o enumerador para essa posio. Nesta posio, Current indefinido. Portanto, voc
deve chamar MoveNext para avanar o enumerador para o primeiro elemento da coleo antes
de ler o valor da Current.
Retorna Current o mesmo objeto at MoveNext ou Reset chamado. Define MoveNextCurrent
Como o elemento seguinte.
Se MoveNext passagens final da coleo, o Enumerador est posicionado aps o ltimo
elemento na coleo e MoveNext retorna false. Quando o enumerador est nesta posio, para
MoveNext tambm retornar false chamadas subseqentes. Se a ltima chamada para MoveNext
retornado false, Current indefinido.
Em colees Generic no-, voc pode chamar Reset seguido por MoveNext para mover o
enumerador volta para o incio da coleo.
Visual C# Consolidado
477
Em genricas colees, voc no pode definir Current para o primeiro elemento da coleo
novamente; voc deve criar uma nova instncia de enumerador em vez disso.
Um enumerador permanece vlida, desde que a coleo permanece inalterada. Se as alteraes
forem feitas para a coleo,, como adicionar, modificar ou excluir elementos, o enumerador
irrecoverably invalidated e seu comportamento indefinido.
O enumerador no no ter acesso exclusivo coleo; portanto, enumerando atravs de um
conjunto um procedimento seguro do segmento intrinsically no. Para garantir segurana do
segmento durante enumerao, voc pode bloquear a coleo durante toda a enumerao. Para
permitir que a coleo para ser acessado por vrios segmentos para leitura e gravao, voc
dever implementar sua prprias sincronizao.
Visual C# Consolidado
478
Tipos adicionais
Existem vrios tipos a coleo genrica que no tm contrapartes nongeneric:
Visual C# Consolidado
479
LinkedList uma lista vinculada de propsito geral que fornece operaes de insero e
remoo O(1).
KeyedCollection um hbrido entre uma lista e um dicionrio, que fornece uma maneira
para armazenar objetos que contm suas prprias chaves.
Funcionalidade adicional
Alguns dos tipos genricos tm funcionalidade no encontrada na coleo nongeneric os tipos.
Por exemplo, a List classe, que corresponde da classe nongeneric ArrayList, tem um nmero de
mtodos que aceitam representantes genricas, como o Predicate representante que permite que
voc se especificar mtodos de pesquisa a lista, o Action representante que representa mtodos
que atuam sobre cada elemento da lista, e o Converter representante que permite que voc definir
converses entre tipos.
A List classe permite-lhe especificar suas prprias IComparer implementaes interface genrica
para classificao e pesquisa a lista. O SortedDictionary e SortedList classes tambm possui
esse recurso, e em disso permitem os comparers deve ser especificado quando a coleo
criada. Do Dictionary de maneira semelhante, e KeyedCollection classes permitem que voc
para especificar suas prprias comparers de igualdade.
Parmetros de tipo
T
O tipo de elementos em Da lista.
Comentrios
A List classe o equivalente da classe ArrayList genrico. Ele implementa a IList interface
genrica usando uma matriz cujo tamanho aumentado dinamicamente conforme necessrio.
A List classe usa uma comparer de igualdade e um comparer pedido.
Visual C# Consolidado
480
Mtodos, como BinarySearch e Sort use um comparer pedido para os elementos lista. O
comparer padro para tipo T determinada da seguinte maneira. Se tipo T implementa a
IComparable interface genrica, ento o comparer padro o CompareTo mtodo de interface;
caso contrrio, se tipo T implementa a interface nongeneric IComparable, ento o comparer
padro o CompareTo mtodo de interface. Se tipo T implementa nenhuma interface, ento
no h nenhum comparer padro, e um representante comparer ou comparao deve ser
fornecido explicitamente.
O List no garantida a serem classificados. Voc deve classificar a serem classificados. antes
de executar operaes (como BinarySearch) que exigem o List o List
Elementos nessa coleo podem ser acessados usando um ndice inteiro. ndices nessa coleo
so baseada em zero.
Aceita Lista null reference (Nothing in Visual Basic) como um valor vlido para tipos de referncia
e permite elementos duplicados.
Consideraes sobre desempenho
A decidir se deseja usar ou ArrayList Classe, ambos os quais tm semelhante funcionalidade,
lembrar que a List classe efetua melhor na maioria dos casos e tipo seguro.. o List Se um tipo
de referncia for usado para tipo T de classe List, o comportamento das duas classes idntico.
No entanto, se um tipo de valor for usado para tipo T, voc precisar considerar implementao e
questes boxing.
Se um tipo de valor for utilizado para tipo T, o compilador gera uma implementao da classe List
especificamente para esse tipo de valor. Isso significa um elemento um lista de um List objeto no
tenha que ser Boxed antes do elemento pode ser usado, e Aps cerca de 500 elementos de lista
so criados a memria economizada elementos lista boxing no maior que a memria usada
para gerar a implementao de classe.
Certifique-se o tipo de valor usado para tipo T implementa a IEquatable interface genrico. Caso
contrrio, mtodos, como Contains deve chamar o Object.Equals(Object) mtodo, que caixas o
elemento lista afetado. Do BinarySearch se o tipo de valor implementa a IComparable interface e
voc possuir o cdigo de fonte tambm implementam a IComparable interface genrica para
evitar e Sort mtodos de boxing elementos de lista. Se voc no possui cdigo-fonte, passar um
IComparer objeto para o BinarySearch e Sort mtodos
Ele para sua vantagem em usar a implementao especficos do tipo de classe List em vez de
atravs da ArrayList classe ou escrever um conjunto wrapper altamente digitado mesmo. A razo
sua implementao deve fazer que o .NET Framework faz por voc j, e o Common Language
Runtime pode compartilhar cdigo linguagem intermediria Microsoft e metadados, que no pode
sua implementao.
Exemplo
O exemplo de cdigo a seguir demonstra vrias propriedades e mtodos da classe List genrico.
O construtor padro usado para criar uma lista de seqncias com uma capacidade de 0. A
Capacity propriedade exibida e depois o Add mtodo usado para adicionar vrios itens. Os
itens so listados, e a Capacity propriedade ser exibida novamente, juntamente com a Count
propriedade, para mostrar que a capacidade foi aumentou conforme necessrio.
O Contains mtodo usado para testar a presena de um item na lista, o Insert mtodo usado
para inserir um novo item no meio da lista, e o contedo da lista so exibidos novamente.
Visual C# Consolidado
481
A propriedade padro Item (o indexador em C#) usada para recuperar um item, o Remove
mtodo usado para remover a primeira instncia de adicionada anteriormente, o item duplicado
e o contedo ser exibido novamente. O Remove mtodo Sempre remove a primeira instncia
encontrar.
O TrimExcess mtodo usado para reduzir a capacidade para corresponder a contagem, e
Capacity. e Count propriedades so exibidas Se a capacidade no utilizada tinha sido menos de
10 % da capacidade total, a lista no seria foram redimensionada.
Finalmente, o Clear mtodo usado para remover todos os itens da lista, e Capacity. e Count
propriedades so exibidas
C#
using System; using System.Collections.Generic; public class Example { public static void Main() {
List<string> dinosaurs = new List<string>(); Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
dinosaurs.Add("Tyrannosaurus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus"); dinosaurs.Add("Compsognathus"); Console.WriteLine(); foreach(string
dinosaur in dinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine("\nCapacity: {0}",
dinosaurs.Capacity); Console.WriteLine("Count: {0}", dinosaurs.Count);
Console.WriteLine("\nContains(\"Deinonychus\"): {0}", dinosaurs.Contains("Deinonychus"));
Console.WriteLine("\nInsert(2, \"Compsognathus\")"); dinosaurs.Insert(2, "Compsognathus");
Console.WriteLine(); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); }
Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);
Console.WriteLine("\nRemove(\"Compsognathus\")"); dinosaurs.Remove("Compsognathus");
Console.WriteLine(); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); }
dinosaurs.TrimExcess(); Console.WriteLine("\nTrimExcess()"); Console.WriteLine("Capacity: {0}",
dinosaurs.Capacity); Console.WriteLine("Count: {0}", dinosaurs.Count); dinosaurs.Clear();
Console.WriteLine("\nClear()"); Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count); } } /* This code example produces the following output:
Capacity: 0 Tyrannosaurus Amargasaurus Mamenchisaurus Deinonychus Compsognathus Capacity: 8
Count: 5 Contains("Deinonychus"): True Insert(2, "Compsognathus") Tyrannosaurus Amargasaurus
Compsognathus Mamenchisaurus Deinonychus Compsognathus dinosaurs[3]: Mamenchisaurus
Remove("Compsognathus") Tyrannosaurus Amargasaurus Mamenchisaurus Deinonychus Compsognathus
TrimExcess() Capacity: 5 Count: 5 Clear() Capacity: 5 Count: 0 */
Hierarquia de herana
System.Object
System.Collections.Generic.List
Segurana de segmentos
Esttico pblico (Shared. no Visual Basic) os membros do tipo so segmento seguro Os membros
da instncia no so garantidos para ser segmento seguro.
Suporte vrios leitores simultaneamente,, desde que a coleo no modificada A List.
Enumerando atravs de um conjunto intrinsically no um procedimento isenta de segmentos. No
caso raro onde uma enumerao contends com um ou mais acessos de gravao, a nica
maneira para garantir segurana do segmento para bloquear a coleo durante toda a
enumerao. Para permitir que a coleo para ser acessado por vrios segmentos para leitura e
gravao, voc dever implementar sua prprias sincronizao.
Visual C# Consolidado
482
Plataformas
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for
Pocket PC, Windows Mobile for Smartphone, Windows Server 2003,
Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2,
Windows XP Starter Edition
O .NET Framework no d suporte a todas as verses de cada plataforma. Para obter uma lista
das verses com suporte, consulte Requisitos do sistema.
Informaes de verso
.NET Framework
Compatvel com: 2.0
.NET Compact Framework
Compatvel com: 2.0
Parmetros de tipo
TKey
O tipo das teclas no dicionrio.
TValue
O tipo dos valores no dicionrio.
Comentrios
A SortedDictionary classe genrico uma rvore da pesquisa binrio com recuperao O (log
n), onde n o nmero de elementos no dicionrio. Neste aspecto, ele semelhante para a
SortedList classe genrico. As duas classes tm modelos de objeto semelhantes, e ambas tm O
(log n) recuperao. Onde as duas classes diferem est em uso de memria e velocidade de
insero e remoo:
Visual C# Consolidado
483
Se a lista estiver preenchida todos de uma vez dos dados SortedList classificados mais
rpida que SortedDictionary.
Cada par chave / valor pode ser recuperado como uma KeyValuePair estrutura, ou atravs da
interface nongeneric IDictionary. um DictionaryEntry
As chaves devem ser imutveis, desde que eles so usados como chaves no SortedDictionary..
o SortedDictionary Cada chave em um SortedDictionary deve ser exclusivo. Uma chave no
pode ser a null reference (Nothing in Visual Basic), mas um valor pode ser, se o tipo TValue de
valor um tipo de referncia.
Requer SortedDictionary uma implementao comparer para realizar comparaes de chave.
Voc pode especificar uma implementao da interface IComparer genrica, utilizando um
construtor que aceita um comparer parmetro; se voc no especificar uma implementao, o
comparer Comparer.Default genrico padro usada. Se tipo TKey implementa a
System.IComparable interface genrico, o comparer padro usa essa implementao.
A foreach instruo da linguagem C# (for each. em C++, For Each no Visual Basic) requer o tipo
de cada elemento na coleo Desde cada elemento do tipo elemento no o tipo da chave ou o
tipo do valor. um par chave / valor, o SortedDictionary Em vez disso, o tipo de elemento
KeyValuePair. O cdigo a seguir mostra sintaxe C#, C++ e Visual Basic.
C#
foreach (KeyValuePair<int, string> kvp in myDictionary) {...}
A foreach instruo um invlucro em torno o enumerador, que permite somente leitura a partir
da coleo, no gravar para ele.
Exemplo
O exemplo de cdigo a seguir cria um vazio SortedDictionary de seqncias com chaves de
seqncia e usa o Add mtodo para adicionar alguns elementos. O exemplo demonstra que o
Add mtodo gera um ArgumentException quando tentativa de adicionar uma chave duplicada.
O exemplo usa a Item propriedade (o indexador em C#) para recuperar valores, demonstrando
que acionada quando uma chave solicitado no existir, e mostra que o valor associado a uma
chave pode ser substituda. um KeyNotFoundException
O exemplo mostra como usar o TryGetValue mtodo como uma forma mais eficiente para
recuperar valores se um programa com freqncia deve tentar valores chave que no esto no
dicionrio, e ele mostra como usar o ContainsKey mtodo para testar se uma chave existe antes
de chamar o Add mtodo.
O exemplo mostra como para enumerar as chaves e valores em um dicionrio e como enumerar
as chaves e valores sozinho usando a Keys propriedade e a Values propriedade.
Finalmente, o exemplo demonstra o Remove mtodo.
C#
using System; using System.Collections.Generic; public class Example { public static void Main() { // Create
a new dictionary of strings, with string keys. // Dictionary<string, string> openWith = new
Dictionary<string, string>(); // Add some elements to the dictionary. There are no // duplicate keys, but
some of the values are duplicates. openWith.Add("txt", "notepad.exe"); openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe"); openWith.Add("rtf", "wordpad.exe"); // The Add method throws an
Visual C# Consolidado
484
exception if the new key is // already in the dictionary. try { openWith.Add("txt", "winword.exe"); } catch
(ArgumentException) { Console.WriteLine("An element with Key = \"txt\" already exists."); } // The Item
property is another name for the indexer, so you // can omit its name when accessing elements.
Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]); // The indexer can be used to change
the value associated // with a key. openWith["rtf"] = "winword.exe"; Console.WriteLine("For key = \"rtf\",
value = {0}.", openWith["rtf"]); // If a key does not exist, setting the indexer for that key // adds a new
key/value pair. openWith["doc"] = "winword.exe"; // The indexer throws an exception if the requested key is
// not in the dictionary. try { Console.WriteLine("For key = \"tif\", value = {0}.", openWith["tif"]); } catch
(KeyNotFoundException) { Console.WriteLine("Key = \"tif\" is not found."); } // When a program often has
to try keys that turn out not to // be in the dictionary, TryGetValue can be a more efficient // way to retrieve
values. string value = ""; if (openWith.TryGetValue("tif", out value)) { Console.WriteLine("For key = \"tif\",
value = {0}.", value); } else { Console.WriteLine("Key = \"tif\" is not found."); } // ContainsKey can be used
to test keys before inserting // them. if (!openWith.ContainsKey("ht")) { openWith.Add("ht",
"hypertrm.exe"); Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]); } // When you use
foreach to enumerate dictionary elements, // the elements are retrieved as KeyValuePair objects.
Console.WriteLine(); foreach( KeyValuePair<string, string> kvp in openWith ) { Console.WriteLine("Key =
{0}, Value = {1}", kvp.Key, kvp.Value); } // To get the values alone, use the Values property.
Dictionary<string, string>.ValueCollection valueColl = openWith.Values; // The elements of the
ValueCollection are strongly typed // with the type that was specified for dictionary values.
Console.WriteLine(); foreach( string s in valueColl ) { Console.WriteLine("Value = {0}", s); } // To get the
keys alone, use the Keys property. Dictionary<string, string>.KeyCollection keyColl = openWith.Keys; // The
elements of the KeyCollection are strongly typed // with the type that was specified for dictionary keys.
Console.WriteLine(); foreach( string s in keyColl ) { Console.WriteLine("Key = {0}", s); } // Use the Remove
method to remove a key/value pair. Console.WriteLine("\nRemove(\"doc\")"); openWith.Remove("doc"); if
(!openWith.ContainsKey("doc")) { Console.WriteLine("Key \"doc\" is not found."); } } } /* This code example
produces the following output: An element with Key = "txt" already exists. For key = "rtf", value =
wordpad.exe. For key = "rtf", value = winword.exe. Key = "tif" is not found. Key = "tif" is not found. Value
added for key = "ht": hypertrm.exe Key = txt, Value = notepad.exe Key = bmp, Value = paint.exe Key = dib,
Value = paint.exe Key = rtf, Value = winword.exe Key = doc, Value = winword.exe Key = ht, Value =
hypertrm.exe Value = notepad.exe Value = paint.exe Value = paint.exe Value = winword.exe Value =
winword.exe Value = hypertrm.exe Key = txt Key = bmp Key = dib Key = rtf Key = doc Key = ht
Remove("doc") Key "doc" is not found. */
Hierarquia de herana
System.Object
System.Collections.Generic.SortedDictionary
Segurana de segmentos
Esttico pblico (Shared. no Visual Basic) os membros do tipo so segmento seguro Os membros
da instncia no so garantidos para ser segmento seguro.
Suporte vrios leitores simultaneamente,, desde que a coleo no modificada A
SortedDictionary. Mesmo assim, enumerando atravs de um conjunto intrinsically no um
procedimento isenta de segmentos. Para garantir segurana do segmento durante enumerao,
voc pode bloquear a coleo durante toda a enumerao. Para permitir que a coleo para ser
acessado por vrios segmentos para leitura e gravao, voc dever implementar sua prprias
sincronizao.
Visual C# Consolidado
485
Plataformas
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003,
Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2,
Windows XP Starter Edition
O .NET Framework no d suporte a todas as verses de cada plataforma. Para obter uma lista
das verses com suporte, consulte Requisitos do sistema.
Informaes de verso
.NET Framework
Compatvel com: 2.0
O Common Language Runtime captura excees que no so detectadas por um bloco catch.
Dependendo de como o Runtime configurado, ser exibida uma caixa de dilogo de depurao
ou executar o programa pra e uma caixa de dilogo com informaes de exceo exibida. Para
obter informaes sobre depurao, consulte Depurao e perfil Applications.
Como: Usar o bloco Try/Catch para capturar excees
Coloque as sees de cdigo que podem descartar excees em um bloco try e colocar cdigo
que manipula excees em um bloco catch. O bloco catch uma srie de instrues comeando
com a palavra-chave catch, seguida por um tipo de exceo e uma ao a ser executada.
Visual C# Consolidado
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.
Como Criar Excees Definida pelo Usurio
Se voc quiser que os usurios para poder se programaticamente distinguir entre algumas
condies de erro, voc pode criar seus prprios excees definida pelo usurio. O.NET
Framework fornece uma hierarquia de classes de exceo basicamente derivadas de uma classe
Exceo base. Cada um dessas classes define uma exceo especfica, para que em muitos
casos voc s precise capturar a exceo. Voc tambm pode criar suas prprias classes de
exceo por derivar da classe Exception.
Ao criar seu prprio excees, recomendvel codificao prtica para finalizar o nome de classe
de exceo definida pelo usurio com a palavra " exceo ". Tambm boa prtica para
implementar as trs recomendada construtores comuns, como mostrado no exemplo o seguir.
Observao
No situaes onde voc estiver usando o Remoting,, voc precisa garantir que os metadados para
qualquer exceo definida pelo usurio est disponvel no servidor (chamado) e para o cliente (o
objeto proxy ou chamador). Por exemplo, Cdigo chamar um mtodo em um domnio de
aplicativos separados deve ser capaz para localizar o conjunto que contm uma Exceo
acionada por uma chamada remota. Para obter mais informaes, consulte Prticas
recomendadas para tratamento de excees.
Visual C# Consolidado
487
Visual C# Consolidado
488
2.
3.
Observao
Um Designer (tais como Visual Studio 2005) ser fazer esta Cabeamento de evento para voc,
gerando cdigo que semelhante ao cdigo, neste exemplo.
Exemplo
O exemplo de cdigo a seguir manipula o Click evento de para alterar a cor de TextBox Plano de
Fundo. um Button Mostrar os elementos em negrito o manipulador de eventos e como ele
cabeado para o Click evento do Button.
O cdigo, neste exemplo foi escrito sem usar um criador visual (tais como Visual Studio 2005) e
contm somente essenciais elementos de programao. Se voc usar um designer, ele ir gerar
cdigo adicional.
C#
using System; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; public
class MyForm : Form { private TextBox box; private Button button; public MyForm() : base() { box = new
TextBox(); box.BackColor = System.Drawing.Color.Cyan; box.Size = new Size(100,100); box.Location = new
Point(50,50); box.Text = "Hello"; button = new Button(); button.Location = new Point(50,100); button.Text
= "Click Me"; // To wire the event, create // a delegate instance and add it to the Click event. button.Click +=
new EventHandler(this.Button_Clicked); Controls.Add(box); Controls.Add(button); } // The event handler.
private void Button_Clicked(object sender, EventArgs e) { box.BackColor = System.Drawing.Color.Green; }
Visual C# Consolidado
489
// The STAThreadAttribute indicates that Windows Forms uses the // single-threaded apartment model.
[STAThreadAttribute] public static void Main(string[] args) { Application.Run(new MyForm()); } } Option
Explicit Option Strict Imports System Imports System.ComponentModel Imports System.Windows.Forms
Imports System.Drawing Public Class MyForm Inherits Form Private box As TextBox Private WithEvents
myButton As Button Public Sub New() box = New TextBox() box.BackColor = System.Drawing.Color.Cyan
box.Size = New Size(100, 100) box.Location = New Point(50, 50) box.Text = "Hello" myButton = New
Button() myButton.Location = New Point(50, 100) myButton.Text = "Click Me"
AddHandler myButton.Click, AddressOf Me.Button_Clicked
Controls.Add(box) Controls.Add(myButton) End Sub ' The event handler. Private Sub
Button_Clicked(sender As Object, e As EventArgs) box.BackColor = System.Drawing.Color.Green End Sub '
The STAThreadAttribute indicates that Windows Forms uses the ' single-threaded apartment model.
<STAThreadAttribute()> _ Public Shared Sub Main(args() As String) Application.Run(New MyForm()) End
Sub End Class
Compilando o cdigo
Salvar o cdigo anterior em um arquivo com (uma extenso. cs) para um arquivo C# e.vb para
Visual Basic 2005, compilar, e executar. Por exemplo, se o arquivo de origem for denominado
WinEvents.cs (ou WinEvents.vb), execute o seguinte comando:
C#
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs vbc
/r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
2.
Visual C# Consolidado
490
3.
O seguinte programa exemplo demonstra elevar um evento em uma classe e manipular o evento
no outra classe. A AlarmClock classe define o evento Alarm pblico, e fornece mtodos para
aumentar o evento. A AlarmEventArgs classe derivada da EventArgs e define os dados
especficos a um Alarm evento. A WakeMeUp classe define o mtodo AlarmRang, que trata um
Alarm evento. A AlarmDriver classe usa as classes juntos, como o AlarmRang Mtodo de
WakeMeUp manipular o Alarm evento do AlarmClock.
Este programa exemplo usa conceitos descritos com detalhes no Eventos e representantes e
Elevar um evento.
Exemplo
C#
// EventSample.cs. // namespace EventSample { using System; using System.ComponentModel; // Class
that contains the data for // the alarm event. Derives from System.EventArgs. // public class
AlarmEventArgs : EventArgs { private readonly bool snoozePressed ; private readonly int nrings;
//Constructor. // public AlarmEventArgs(bool snoozePressed, int nrings) { this.snoozePressed =
snoozePressed; this.nrings = nrings; } // The NumRings property returns the number of rings // that the
alarm clock has sounded when the alarm event // is generated. // public int NumRings { get { return nrings;}
} // The SnoozePressed property indicates whether the snooze // button is pressed on the alarm when the
alarm event is generated. // public bool SnoozePressed { get {return snoozePressed;} } // The AlarmText
property that contains the wake-up message. // public string AlarmText { get { if (snoozePressed) { return
("Wake Up!!! Snooze time is over."); } else { return ("Wake Up!"); } } } } // Delegate declaration. // public
delegate void AlarmEventHandler(object sender, AlarmEventArgs e); // The Alarm class that raises the
alarm event. // public class AlarmClock { private bool snoozePressed = false; private int nrings = 0; private
bool stop = false; // The Stop property indicates whether the // alarm should be turned off. // public bool
Stop { get {return stop;} set {stop = value;} } // The SnoozePressed property indicates whether the snooze //
button is pressed on the alarm when the alarm event is generated. // public bool SnoozePressed { get {return
snoozePressed;} set {snoozePressed = value;} } // The event member that is of type AlarmEventHandler. //
public event AlarmEventHandler Alarm; // The protected OnAlarm method raises the event by invoking //
the delegates. The sender is always this, the current instance // of the class. // protected virtual void
OnAlarm(AlarmEventArgs e) { AlarmEventHandler handler = Alarm; if (handler != null) { // Invokes the
delegates. handler(this, e); } } // This alarm clock does not have // a user interface. // To simulate the alarm
mechanism it has a loop // that raises the alarm event at every iteration // with a time delay of 300
milliseconds, // if snooze is not pressed. If snooze is pressed, // the time delay is 1000 milliseconds. // public
void Start() { for (;;) { nrings++; if (stop) { break; } else if (snoozePressed) {
System.Threading.Thread.Sleep(1000); { AlarmEventArgs e = new AlarmEventArgs(snoozePressed, nrings);
OnAlarm(e); } } else { System.Threading.Thread.Sleep(300); AlarmEventArgs e = new
AlarmEventArgs(snoozePressed, nrings); OnAlarm(e); } } } } // The WakeMeUp class has a method
AlarmRang that handles the // alarm event. // public class WakeMeUp { public void AlarmRang(object
Visual C# Consolidado
491
2.
3.
4.
5.
Exemplo
O exemplo C# implementa as propriedades MouseDown de evento e MouseUp, Usando. para
armazenar representante cada do evento um EventHandlerList As palavras-chave das
construes Propriedade das evento so em negrito.
Visual C# Consolidado
492
Observao
No h suporte para propriedades de evento no Visual Basic 2005.
C#
// The class SampleControl defines two event properties, MouseUp and MouseDown. class SampleControl:
Component { // : // Define other control methods and properties. // : // Define the delegate collection.
protected EventHandlerList listEventDelegates = new EventHandlerList(); // Define a unique key for each
event. static readonly object mouseDownEventKey = new object(); static readonly object mouseUpEventKey
= new object(); // Define the MouseDown event property. public event MouseEventHandler MouseDown { //
Add the input delegate to the collection. add { listEventDelegates.AddHandler(mouseDownEventKey, value);
} // Remove the input delegate from the collection. remove {
listEventDelegates.RemoveHandler(mouseDownEventKey, value); } } // Define the MouseUp event
property. public event MouseEventHandler MouseUp { // Add the input delegate to the collection. add {
listEventDelegates.AddHandler(mouseUpEventKey, value); } // Remove the input delegate from the
collection. remove { listEventDelegates.RemoveHandler(mouseUpEventKey, value); } } }
Definir um membro de evento pblica na sua classe. Definir o tipo do membro de evento
para um System.EventHandler representante.
C#
public class Countdown { ... public event EventHandler CountdownCompleted; }
2.
Fornece um mtodo protegido na sua classe que gera o evento. Nome do mtodo
OnEventName. Aumentar o evento dentro do mtodo.
C#
public class Countdown { ... public event EventHandler CountdownCompleted; protected virtual void
OnCountdownCompleted(EventArgs e) { if (CountdownCompleted != null)
CountdownCompleted(this, e); } }
3.
Determinar quando para elevar o evento na sua classe. Chamar OnEventName para
elevar o evento.
C#
public class Countdown { ... public void Decrement { internalCounter = internalCounter - 1; if
(internalCounter == 0) OnCountdownCompleted(new EventArgs()); } }
Visual C# Consolidado
493
1.
Definir uma classe que fornece dados para o evento. Nome da classe EventNameArgs,
derivar a classe de System.EventArgs, e adicionar os membros especficos eventos-.
C#
public class AlarmEventArgs : EventArgs { private readonly int nrings = 0; private readonly bool
snoozePressed = false; //Properties. public string AlarmText { ... } public int NumRings { ... } public
bool SnoozePressed{ ... } }
2.
3.
Definir um membro de evento pblica denominado EventName na sua classe. Definir o tipo
do membro de evento para o tipo delegate de evento.
C#
public class AlarmClock { ... public event AlarmEventHandler Alarm; }
4.
Definir um mtodo protegido na sua classe que gera o evento. Nome do mtodo
OnEventName. Aumentar o evento dentro do mtodo.
C#
public class AlarmClock { ... public event AlarmHandler Alarm; protected virtual void
OnAlarm(AlarmEventArgs e) { if (Alarm != null) Alarm(this, e); } }
5.
Determinar quando para elevar o evento na sua classe. Chamar OnEventName para gerar
o evento e passar dados especficos eventos-usando EventNameEventArgs o.
C#
Public Class AlarmClock { ... public void Start() { ... System.Threading.Thread.Sleep(300);
AlarmEventArgs e = new AlarmEventArgs(false, 0); OnAlarm(e); } }
Visual C# Consolidado
494
Visual C# Consolidado
495
Configuraes de Compilao
Configuraes de compilao fornecem uma maneira de armazenar vrias verses de soluo e
propriedades do projeto. A configurao ativa pode ser rapidamente acessada e alterada,
permitindo que voc facilmente crie vrias configuraes do mesmo projeto.
Por padro, e projetos criados com Visual Studio incluiem configuraes Debug e Release.
Configuraes Debug so automaticamente configuradas para depurar um aplicativo, e
configuraes Release so configuradas para a verso final do aplicativo. Para mais informaes,
consulte COMO: defina configuraes Debug e Verso. Voc tambm pode criar e editar suas
prprias configuraes personalizadas de soluo e projeto para atender s necessidades do seu
aplicativo. Para mais informaes, consulte Como criar e editar configuraes:.
Dois nveis de configuraes de compilao podem ser definidos no Visual Studio: configuraes
de soluo e configuraes do projeto.
Configuraes de Soluo
Um Configurao de soluo especifica como os projetos em uma soluo sero compilados e (se
ativado) implantado. Para definir uma nova configurao de soluo, abra a Caixa de Dilogo
Configuration Manager . e selecione New da lista Active solution configuration
Cada entrada em uma configurao de soluo inclui um nome de projeto, uma configurao, uma
configurao de plataforma, uma configurao de compilao, e (se ativado) uma configurao
Deploy. A combinao da configurao de soluo e da configurao de plataforma escolhidas
determina a configurao do projeto que ser usada. Para obter mais informaes sobre soluo
de plataformas, consulte Criar plataformas.
Voc pode criar quaisquer nmeros de configuraes de soluo, cada um com um nome
exclusivo. O Ambiente integrado de desenvolvimento do Visual Studio (IDE) automaticamente
atribui configuraes de soluo sempre que voc:
Adicionar uma plataforma de projeto com Create new solution platforms selecionada.
Adicionar um novo projeto que ir ser implantado em vrias plataformas, um dos quais
novo.
Visual C# Consolidado
496
quais itens de projeto sero includos em uma compilao particular, quais arquivos de sada
sero criados, onde os arquivos de sada sero colocados, e como eles sero otimizados.
Configuraes de projeto podem diferir bastante. Por exemplo, as propriedades de configurao
de um projeto podem especificar que seu arquivo de sada seja otimizado para que o binrio
resultante ocupe o espao mnimo, enquanto outro projeto pode ser otimizado de forma que o seu
executvel execute com a velocidade mxima.
Configuraes do projeto no so armazenadas pelo usurio, mas pela soluo, para que elas
possam ser compartilhadas por uma equipe. Embora as dependncias de projeto so
independentes da configurao, somente os projetos especificados na configurao de soluo
ativa sero compilados.
Alterar Configuraes de Solution
Quando voc cria uma soluo, o Visual Studio usa a configurao de soluo ativa, que
especifica as configuraes do projeto para usar para cada projeto a ser compilado. Voc pode
alterar a configurao ativa diretamente na lista suspensaSolution Configurations na barra de
ferramentas padro, ou a partir da caixa de dilogo Configuration Manager .
Observao
Se voc no puder encontrar as configuraes de soluo na barra de ferramentas padro ou no
puder acessar o Configuration Manager, voc pode ter as configuraes de desenvolvedor do
Visual Basic aplicadas. Para mais informaes, consulte COMO: Gerenciar configuraes de
compilao desenvolvedor de configuraes aplicado.
Como o IDE atribui configuraes do projeto para serem compiladas
Quando voc cria uma nova soluo de configurao (ao invs de copiar a que j exista), o IDE
determina as configuraes padro do projeto para os projetos que ele ir compilar usando os
seguintes critrios de seleo para cada projeto (avaliados nesta ordem):
1.
2.
3.
Visual C# Consolidado
497
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.
COMO: configurar projetos para plataformas de destino
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.
Selecionando plataformas com o Gerenciador de configuraes
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.
2.
3.
4.
Visual C# Consolidado
498
O Project Designer tambm fornece uma maneira de direcionar para diferentes plataformas em
seu projeto. Se selecionar uma das plataformas includas na lista da caixa de dilogo New
Solution Platform no funcionar para sua soluo, voc pode criar um nome de configurao
personalizado e modificar as configuraes no 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 C# Consolidado
499
2.
3.
Em a Active solution platform box, selecione <Edit>. A Edit Solution Platforms Caixa
de dilogo aberta.
Clique na plataforma voc deseja remover, e clique em Remove.
Use o Configuration Manager para adicionar pelo menos duas plataformas destino para a
soluo.
2.
Selecione a plataforma que voc deseja direcionar a partir da lista Active solution
platform.
3.
Use o Configuration Manager para adicionar pelo menos duas plataformas destino para a
soluo.
2.
Use a janela Batch Build para criar vrias configuraes de soluo de uma vez. Para
mais informaes, consulte a caixa de dilogo compilao em lotes.
possvel ter uma plataforma no nvel de soluo como, por exemplo, x64, e no ter projetos
nesta soluo direcionando para a mesma plataforma. Tambm possvel ter vrios projetos na
sua soluo, cada um direcionado para diferentes plataformas. recomendvel que se voc tiver
uma dessas situaes, voc crie uma nova configurao com um nome descritivo para evitar
confuso.
COMO: Preparar e gerenciar Compilaes
Visual Studio 2005 oferece uma variedade de formas para ajud-lo a organizar quais arquivos
esto includos em uma compilao de uma soluo ou projeto, qual conjunto de propriedades do
projeto est em vigor enquanto compila, e em que ordem os projetos sero compilados. Esta
seo contm tpicos que explicam vrios procedimentos para preparar e gerenciar compilaes.
A seguir esto os procedimentos comuns do Visual Studio para preparar e gerenciar compilaes.
Observao
As opes disponveis nas caixas de dilogo, e os nomes e locais do menu de comandos que
voc v, podem diferir do que descrito na Ajuda dependendo das configuraes ou edio
ativas. Esta pgina Ajuda foi escrita com base no General Development settings. Para exibir ou
alterar as configuraes, escolha Import and Export Settings no menu Tools. Para mais
informaes, consulte Configuraes do Visual Studio.
Para compilar, recompilar, ou limpar uma soluo inteira
1.
2.
Visual C# Consolidado
500
Observao
O comando Build passa a ser Build Solution quando uma soluo inclui mais de um projeto.
o
Escolha Rebuild Solution para " Limpar " a primeira soluo, e ento compilar
todos os arquivos e componentes de projeto .
2.
Escolha Build [Project Name] para criar somente esses componentes de projeto
que foram alterados desde a ltima compilao.
Escolha Rebuild [Project Name] para " Limpar " o projeto primeiro, e ento
compilar os arquivos de projeto e todos os seus componentes.
3.
Ouo
Somente para projetos em Visual C++, um submenu Project Only do menu Build exibe
trs comandos especficos do projeto:
2.
3.
Visual C# Consolidado
501
1.
2.
3.
3.
4.
Se voc desejar para ver todos os erros de uma compilao na lista a tarefas quando a
compilao terminado, selecione Always show Error List if build finishes with errors.
2.
Clique na guiaBuild.
3.
Clique no boto Browse ao lado da caixa Output e selecione uma nova pasta de sada de
compilao.
2.
3.
Visual C# Consolidado
502
2.
3.
4.
Visual C# Consolidado
503
dependncia de projeto do projeto que consome o cdigo. Essas relaes de dependncia podem
ser definidas na Caixa de Dilogo Project Dependencies.
Para atribuir dependncias a projetos
1.
2.
3.
4.
2.
3.
4.
Visual C# Consolidado
504
Exibe nomes de projetos na soluo atual. Podem aparecer vrias entradas para o mesmo
projeto, uma para cada configurao de projeto. Todas as entradas de todos os projetos
so listados numa nica lista simples.
Configurao
Exibe o tipo de compilao do projeto especificado pela configurao de soluo
selecionado (Solution Config).
Plataforma
Exibe o nome da plataforma na qual o projeto ser executado
Soluo Config
Exibe a configurao de compilao da soluo que ir fornecer o contexto como este tipo
de configurao do projeto compilado para a plataforma especificada. Por exemplo,
suponha que projeto P1 dependa de recursos de outro projeto, P2. A configurao da
soluo especificar que a configurao de projeto de P1 para esta plataforma seja
compilada, e que a configurao de projeto de P2 que fornecer os recursos dos quais P1
precisa tambm seja compilada.
Para alterar uma configurao de soluo, use a Caixa de Dilogo Configuration Manager
para editar a configurao da soluo ou criar uma nova configurao. Aps alterar uma
configurao de soluo, clique em Rebuild nesta caixa de dilogo para a compilao em
lotes de todas as configuraes do projeto.
Criar
Especifica se a configurao de projeto especificada deve ser includa na compilao em
lotes.
Botes
Criar
Compila apenas os itens de projeto para as combinaes selecionadas de configurao do
projeto e plataforma que foram alterados desde a ltima compilao.
Recriar
Faz uma compilao completa a partir do zero de todos os itens para os itens de projeto
selecionado para as combinaes selecionado de configurao do projeto e plataforma.
Limpar
Exclui todos os arquivos intermedirios e pastas de sada para as combinaes
selecionadas de configurao do projeto e plataforma.
Selecione Tudo
Marca cada configurao de projeto a ser includa na compilao em lotes.
Desmarcar tudo
Remove cada configurao de projeto da compilao em lotes.
Visual C# Consolidado
505
Fechar
Fecha a caixa de dilogo Batch Build.
Janela de sada
Esta janela pode exibir mensagens de status para vrios recursos no ambiente de
desenvolvimento integrados (IDE). Para exibir a janela Output , selecione Output a partir do
menu View. Para fechar a janela Output e voltar o foco para o editor, pressione a tecla Escape
(ESC).
Toolbar
Show output from
Exibe um ou mais painis de sada para serem visualizados. Vrios painis de informaes
podem estar disponveis, dependendo de quais ferramentas do IDE tiverem usado a janela
Output para enviar mensagens para o usurio.
Find Messsage in Code
Move o ponto de insero no Editor de Cdigos para a linha que contm o erro de
compilao selecionado.
Go to Previous Message
Altera o foco na janela Output para o erro de compilao anterior e move o ponto de
insero no Editor de Cdigos para a linha que contm esse erro de compilao.
Go to Next Message
Altera o foco na janela Output para o prximo erro de compilao e move o ponto de
insero no Editor de Cdigos para a linha que contm esse erro de compilao.
Clear all
Limpa todo o texto a partir do Painel Output.
Toggle Word Wrap
Ativa e desativa o recurso quebra automtica de linha no painel Output. Quando a quebra
automtica de linha estiver ativada, a continuao de textos que se estendem alm rea
de visualizao so exibidos na linha seguinte.
Painel Output
O painel Output escolhido na lista Show output from exibe a sada a partir da origem indicada.
Direcionando mensagens para a janela output
Para exibir a janela Output sempre que voc criar um projeto, selecione a opo Show Output
window when build starts na caixa de dialogo General, Projects and Solutions Option. Em
Visual C# Consolidado
506
seguida, com um arquivo de cdigo aberto para edio, clique nos botes Go To Previous
Message e Go to Next Message na barra de ferramentas da janela Output para selecionar as
entradas do painel Output. Na medida em que voc faz isso, o ponto de insero no editor de
cdigo saltar para a linha do cdigo onde o problema selecionado ocorre.
Certos recursos do IDE (Integrated Development Enviroments, ambiente de desenvolvimento
integrado) e comandos chamados na Janela de Comando entregam suas sadas para a janela
Output. Sadas de ferramentas externas como arquivos .bat e .com, normalmente exibidas na
janela do DOS, sero roteadas para um painel Output quando voc seleciona a opo Use
Output Window na caixa de dilogo External Tools. Muitos outros tipos de mensagens tambm
podem ser exibidas nos painis Output. Por exemplo, quando a sintaxe TSQL em um
procedimento armazenado verificada em um banco de dados de destino, os resultados sero
exibidos na janela Output.
Voc tambm pode programar seus prprios aplicativos para escreverem mensagens de
diagnstico em tempo de execuo em um painel Output. Para fazer isso, use membros da
classe Debug ou Trace no espao para nome da System.Diagnostics da .NET Framework Class
Library Reference. Membros de classe Debug exibem a sada quando voc compila as
configuraes de depurao da sua soluo ou projeto; membros da classe Trace exibem a sada
quando voc compila tanto as configuraes de depurao quanto as de criao de verso. Para
mais informaes, consulte Mensagens de diagnstico na janela de sada.
No Visual C++, voc pode criar etapas personalizadas de compilao e criar eventos cujos avisos
e erros so exibidos e contados no painel Output. Pressionando F1 em uma linha de sada ser
exibido um tpico da Ajuda apropriado. Para mais informaes, consulte Formatao da sada de
uma etapa de compilao personalizada ou evento de compilao.
Visual C# Consolidado
507
Visual C# Consolidado
508
funcionalidades existentes. Para obter mais informaes, consulte Editar e continuar (Visual
Basic) e Edio e continuao (Visual C#).
Visualizadores.
Ferramentas eficientes permitem voc exibir dados em um formato natural e intuitivo. Voc
pode iniciar um visualizador em uma janela Watch ou a partir do novo DataTips aprimorado.
Por exemplo, agora voc pode exibir uma seqncia de caracteres como um documento HTML
ou XML. Voc pode usar os visualizadores existentes ou escrever seus prprios. Para obter
mais informaes, consulte Visualizadores.
Visual C# Consolidado
509
o
o
O depurador do Visual Studio .NET 2003 foi aprimorado pela adio dos seguintes recursos:
Depurao remota usando pipes, uma nova alternativa para depurao TCP/IP que ajuda
e proporciona mais segurana. Para obter mais informaes, consulte Depurao Remota
Usando Pipes.
Depurao automtica em servios XML da Web. Para obter mais informaes, consulte
Depurao em Servios XML da Web.
Uma nova pseudovarivel $exception para recuperar informaes sobre excees C#.
Alteraes no Depurador do Visual Studio .NET 2002
O Visual Studio .NET 2002 fornecia um nico depurador integrado para todas as linguagens do
Visual Studio. Uma nova e unificada interface combinou recursos de antigos depuradores do
Visual C++ e Visual Basic, bem como muitos novos recursos. As principais melhorias para
depurao incluem:
Depurao de linguagens cruzadas do Visual Basic . NET, Visual C++ .NET, Visual C# .
NET, Managed Extensions for C++, script, e SQL.
Usar verificao de erros em tempo de execuo no Visual C++ para detectar erros
comuns em tempo de execuo, tais como corrupo do ponteiro da pilha, saturaes de
matrizes locais, corrupo de pilha, dependncias ao inicializar variveis locais, e perda de
dados em uma atribuio a uma varivel mais curta.
Verificar a segurana de buffer dos aplicativos do Visual C++ com a opo /GS. Voc pode
usar esta opo para detectar saturaes de buffer, o que substitui o endereo do remetente
Visual C# Consolidado
510
Definir um ponto de interrupo em uma DLL que ainda no foi carregada. O ponto de
interrupo automaticamente tornar-se-a ativo quando a DLL carregar. Voc no precisar
especificar DLLs que voc deseja depurar em uma caixa de dilogo Additional DLLs, como
voc fez no depurador do Visual C++.
Depurao de clientes de servios XML da Web aos servios XML da Web, com um pilha
de chamadas integrada entre aplicativos cliente e servidor.
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.
Muitos desenvolvedores no entanto, no percebem que a ameaa de segurana tambm pode
fluir na direo oposta. possvel que o cdigo mal-intencionado do processo de depurao
comprometa a segurana do computador de depurao: existe uma gama de vulnerabilidades de
segurana que devem ser protegidas.
Prticas Recomendadas de Segurana
No h um relacionamento de confiana implcito entre o cdigo que voc est depurando, e o
depurador. Se voc estiver disposto a depurar algo, voc tambm deve estar disposto a executlo. A linha inferior que voc deve ser capaz de confiar naquilo que voc est depurando. Se
voc no puder confiar, ento voc no deve depurar, ou voc deve depurar a partir de um
computador que voc possa se responsabilizar a se comprometer, e em um ambiente isolado.
Para reduzir a superfcie do ataque em potencial, a depurao deve ser desativada em
computadores de produo. Pelo mesmo motivo, a depurao nunca deve ser ativada
indefinidamente.
Segurana de Depurao Gerenciada
Aqui esto algumas recomendaes gerais que se aplicam a toda depurao gerenciada.
Visual C# Consolidado
511
Certifique-se de que voc sabe que o servidor Web seguro antes de depur-lo. Se voc
no tiver certeza de que ele seguro, no faa a depurao.
Tome cuidado principalmente se voc estiver depurando um servio da Web que est
exposto na Internet.
Componentes Externos
Esteja ciente dos status de confiana de componentes externos com que o programa interage,
especialmente se voc no tiver escrito o cdigo. Tambm esteja ciente de componentes que o
Visual Studio ou o depurador possa usar.
Smbolos e Cdigo Fonte
Duas ferramentas do Visual Studio que exigem preocupao com a segurana so as seguintes:
Source Saver, que lhe fornece verses de cdigo fonte provenientes de um repositrio de
cdigo fonte. Ele til quando voc no tiver a verso atual do cdigo fonte de um programa.
Para obter mais informaes, consulte Como: Obter cdigo fonte usando Source Server e
Aviso de Segurana: depurador deve executar comando no confiveis.
Symbol Server, que usado para fornecer os smbolos necessrios para depurar uma
falha durante um chamada do sistema. Para obter mais informaes, consulte Como
especificar um caminho smbolo: e Como usar um servidor smbolo:.
Visual C# Consolidado
512
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Padro
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
No
No
Esta seo descreve o software necessrio para depurar o cdigo em um banco de dados do SQL
Server. H requisitos adicionais quando estiver depurando um aplicativo de mltiplas camadas do
SQL Server. Para obter mais informaes, consulte Depurao de aplicao multi-camada de
banco de dados.
Requisitos de Softwares de Camadas de Banco de Dados
A depurao em SQL com o Microsoft Visual Studio 2005 requer o seguinte software no servidor:
O SQL Server 2005 ou o SQL Server 2000 com o Service Pack 3 necessrio.
Todoos os outros requisitos desta pgina aplicam-se CLR do SQL, bem como do TSQL.
Visual C# Consolidado
513
Cliente SQL
Uma tecnologia como ADO ou ADO.NET que foi construda a cima do OLE DB ou do
ODBC.
O adaptador de dados gerenciado para o SQL Server.
Ambiente de Desenvolvimento
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 :
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
Visual C# Consolidado
514
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.
2.
No menu View, clique em Property Pages. Ou voc pode clicar com o boto direito do
mouse no nome do projeto no Solution Explorer, e selecionar Property Pages.
3.
4.
5.
Description
Especifica o depurador a ser executado, com as seguintes opes:
Local Windows Debugger
Remote Windows Debugger
Web Service Debugger
MPI Cluster Debugger
Visual C# Consolidado
515
Command (Local
Windows Debugger)
Remote Command
(Remote Windows
Debugger)
Application Command
(MPI Cluster Debugger)
Connection (Remote
Windows Debugger and
MPI Cluster Debugger)
Visual C# Consolidado
516
remota.
HTTP URL (Web Service Especifica a URL onde o projeto que voc est depurando est
Debugger)
localizado.
Debugger Type
Environment (Local
Windows Debugger)
Merge Environment
(Local Windows
Debugger)
Descrio
Debug Information
Format (/Z7, /Zd, Zi,
/ZI)
Descrio
Generate Program
Visual C# Consolidado
517
Map Exports
(/MAPINFO:EXPORTS)
Debuggable Assembly
(/ASSEMBLYDEBUG)
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro/Team
Sim
Sim
Sim
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
Visual C# Consolidado
518
outro lugar. Por exemplo, para depurar um processo em execuo como um usurio diferente do
que sua conta de logon do Windows, a conta deve ser de um membro do grupo de
administradores do sistema para o computador. Para obter mais informaes, consulte
Permisses de depurao remota.
H duas contas de usurio que voc necessita considerar
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.
Descrio
Configuration
Start Action
Visual C# Consolidado
519
Usar mquina
remota
Depurao de
cdigo no
gerenciado
Depurao do
SQL Server
Descrio
Ativar
otimizaes
Esta opo deve ser desmarcada. Otimizao faz com que o cdigo que
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
informaes de
depurao
Definir constante Definir esse smbolo permite compilao condicional das funes de sada da
classe de depurao. Com esse smbolo definido, mtodos de classe de
DEBUG
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
da classe Rastrear. Com esse smbolo definido, os mtodos de classe de
Trace
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.
Visual C# Consolidado
520
Esse arquivo armazena todas as informaes da depurao para o arquivo .exe. Para
C/C++, ele reside na subpasta \debug.
Sempre que ele cria um arquivo OBJ, o compilador C/C++ mescla informaes da depurao no
VC x 0.PDB. As informaes inseridas incluem informaes de tipo mas no inclui informaes
smbolo, como definies de funo. Ento, mesmo que todos os arquivos de origem incluam
arquivos de cabealho como <windows.h>, os typedefs daqueles cabealhos so armazenados
apenas uma vez, especialmente estando em todo arquivo OBJ.
O vinculador cria project.PDB, que contm informaes da depurao para o arquivo EXE do
projeto. O arquivo do project.PDB contm informaes completas da depurao, incluindo
prottipos de funo, no apenas as informaes encontradas em VC x 0.PDB Os dois arquivos
PDB permitem atualizaes incrementais. O vinculador tambm incorpora o caminho para o
arquivo .pdb no arquivo .exe ou .dll que ele cria.
O depurador Visual Studio usa o caminho para o PDB no arquivo EXE ou DLL para localizar o
arquivo do project.PDB. Se o depurador no pode localizar o arquivo PDB naquele local ou se o
caminho for invlido (por exemplo, se o projeto foi movido para outro computador), o depurador
pesquisa o caminho que contm o EXE, os caminhos smbolo especificados na caixa de dilogo
Options (pasta Debugging, n Symbols). O depurador no carregar um PDB que no coincide
com o binrio que est sendo depurado.
Arquivos DBG
Este tpico se aplica a:
Visual Studio
Visual Basic
C#
C++
J#
Dev Web
Express
No
No
Sim
No
No
Padro
No
No
Sim
No
No
Pro / Team
No
No
Sim
No
No
Visual C# Consolidado
521
Os arquivos DBG so formatos de arquivos executveis portveis (PE) que contm informaes
da depurao no formato Codeview para o depurador no Visual Studio (e possivelmente outros
formatos, dependendo de como o DBG foi criado). Quando voc no tem origem para
determinados cdigos, tais como bibliotecas ou APIs do Windows, os arquivos DBG permitem a
depurao. Os arquivos DBG tambm permitem voc para fazer depurao do OLE RPC.
Arquivos DBG podem ter sido substitudos por arquivos PDB, que agora so mais comumente
usados na depurao.
Voc pode usar o utilitrio REBASE.EXE para tirar informaes da depurao de um executvel
no formato PE e armazen-lo em um arquivo DBG. O campo de caracterstica do arquivo
IMAGE_FILE_DEBUG_STRIPPED no cabealho do arquivo PE informa o depurador que as
informaes do Codeview foram extradas para um arquivo DBG separado.
Voc pode baixar e instalar arquivos DBG que contm smbolos de depurao de chamadas para
as APIs Windows do sistema. Para obter mais informaes, consulte Instalar smbolos de
depurao do sistema.
Quando voc depurar utilizando smbolos de um arquivo DBG, voc deve usar os nomes
totalmente decorados. Por exemplo, para definir um ponto de interrupo em uma chamada para
a funo sndPlaySound do Windows, voc precisar especificar o _sndPlaySoundA@8.
O depurador do Visual Studio no foi criado para depurao no modo protegido do cdigo no
Kernel, mesmo com smbolos DBG.
Para modo de depurao do usurio, o Visual Studio requer os seguintes arquivos:
Para obter mais informaes sobre arquivos DBG, consulte o artigo no KB a seguir:
Voc pode baixar os smbolos mais recentes para sua verso do Windows em
http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx#Windows symbol packages.
Visual C# Consolidado
522
Este tpico contm as sees a seguir, que fornecem consideraes sobre a preparao para
depurar bibliotecas de classes:
Visual C# Consolidado
523
Mixed-Mode Debugging
Ser criado em outro projeto na mesma soluo Visual Studio que contm a biblioteca de
classes.
Ser um aplicativo da Web que contm uma pgina da Web que incorpore a DLL.
Visual C# Consolidado
524
Se voc tiver um projeto para o aplicativo de chamada, voc pode abrir esse projeto e
comear a execuo a partir do menu Debug. Para obter mais informaes, consulte Como
iniciar execuo:.
Voc pode depur-la a partir do projeto de DLL. Para obter mais informaes, consulte
Como depurar do um Project DLL:.
Voc pode depur-la a partir da janela Visual Studio Immediate: neste caso a janela
Immediate atua no papel de aplicativo.
A janela Immediate
Voc pode avaliar funes ou mtodos na DLL sem ter um aplicativo de chamada, fazendo
depurao em tempo de design utilizando a janela Immediate. Para depurar dessa forma, faa o
seguinte enquanto o projeto DLL est aberto:
1.
2.
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)
Visual C# Consolidado
525
4.
Voc pode continuar a depurao de Test colocando um ponto de interrupo dentro dele e
depois avaliando a funo novamente:
?obj.Test(10);
O ponto de interrupo ser atingido e voc poder andar pelo cdigo Test. Depois da
execuo deixar Test, o depurador estar novamente no modo de design.
Aplicativo de console do C#
Aplicativo de console do J#
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#.
Como todas as propriedades do projeto, esses argumentos persistem entre as sesses de
depurao e entre as sesses do Visual Studio. Ento, se o console da aplicao foi debugado
anteriormente, lembre-se que talvez alguns argumentos de sesses anteriores foram adicionados
na caixa de dilogo <Project> Property Pages.
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 estiver depurando um aplicativo de console, convm iniciar o aplicativo do prompt de
comando e no da Visual Studio. Nesse caso, voc pode iniciar o aplicativo do prompt de
comando e conectar o depurador do Visual Studio a ele. Para obter mais informaes, consulte
Anexando a processos em execuo.
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.
Visual C# Consolidado
526
Observe que esses tipos de projeto que criam DLLs como sua sada esto sendo agrupados em
Depurao de projetos DLL devido aos recursos comuns que eles compartilham.
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.
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.
Propriedades de Configurao | Vinculador |N de Depurao
Property Name
Setting
Generate
debugging
information
Voc deve sempre definir esta opo para Yes (/DEBUG) para criar arquivos
necessrios para depurao e smbolos de depurao. Quando o aplicativo
entra em produo, voc pode definir ela como off.
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.
Para configuraes de projeto recomendadas, consulte Preparao da Depurao: Configuraes
de Propriedades Recomendveis.
Para depurar um aplicativo de Windows Forms do Visual C++
1.
2.
3.
2.
3.
2.
3.
4.
5.
Visual C# Consolidado
528
mas lembrar que o cdigo mostrado na janela Disassembly foi gerado de fonte otimizada
que pode no corresponder ao que voc v nas suas janelas de origem. Recursos, tal como
depurao provavelmente mostram pontos de interrupo e ponto de execuo
incorretamente.
6.
Visual C# Consolidado
529
Dois dos tipos de projeto (ATL Server Web Service e ATL Server Projects) so na verdade tipos
Visual C++, mas so includas aqui porque as tcnicas de depurao usadas com eles tm mais
em comum com aplicativos da Web.
2.
3.
Clique em OK.
2.
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.
3.
Defina Start Action como a pgina da Web que primeiro deve ser exibida.
4.
Visual C# Consolidado
530
Tambm necessrio configurar o arquivo web.config para ativar a depurao. Isso pode ser
configurado manualmente ou automaticamente. Para obter mais informaes, consulte Como
ativar depurao para aplicativos ASP.NET:.
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.
Depurao de um XML Web Services de um aplicativo cliente
H dois mtodos para depurar um XML Web Services de um aplicativo cliente.
Para depurar por um aplicativo cliente e servidor Web XML (mtodo 1)
1.
2.
3.
4.
Crie um projeto de aplicativo cliente na mesma soluo que seu projeto de XML Web
Services. Para fazer isso, no menu Debug, clique em Add New Project.
5.
No Solution Explorer, clique com o boto direito do mouse no projeto do cliente e clique
em Properties no menu de atalho.
6.
7.
8.
9.
10. No menu Debug, clique em Start para depurar o aplicativo cliente e o servidor Web XML.
Para depurar passando de um aplicativo cliente para um servidor Web XML
1.
2.
3.
4.
Crie um projeto de aplicativo cliente, na mesma soluo que seu projeto de XML Web
Services ou em uma soluo diferente.
5.
Em seu projeto do cliente, adicione uma referncia da Web e uma chamada sncrona para
o servio da Web.
Visual C# Consolidado
531
6.
7.
No Solution Explorer, clique com o boto direito do mouse no projeto do cliente e clique
em Set As Startup Project no menu de atalho.
No menu Debug, clique em Start para executar o aplicativo cliente.
Quando o aplicativo cliente chama o XML Web Services, o depurador automaticamente
entra e inicia a depurao do XML Web Services.
Visual C# Consolidado
532
2.
3.
Clique em OK.
4.
5.
Visual Basic
C#
C++
J#
Web Dev
Express Edition
No
No
No
No
No
Standard Edition
No
No
No
No
No
Pro/Team Edition
Sim
Sim
Sim
Sim
Sim
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).
Insira seu carto Code Center Premium no leitor SmartCard conectado ao seu
computador.
Insira o Code Center Premium Welcome Kit CD na unidade de CD-ROM.
Visual C# Consolidado
533
3.
4.
Para procurar fonte Code Center Premium, inicie o Internet Explorer e digite:
https://codepremium.msdn.microsoft.com
5.
Especifique um diretrio local para a fonte compartilhada segura Code Center Premium,
conforme descrito abaixo.
2.
3.
4.
5.
6.
Na caixa Cache symbols from symbol servers in this directory, digite um local onde
Code Center Premium pode armazenar smbolos. Por exemplo:
c:\symbols
8.
No Solution Explorer, clique com o boto direito do mouse no nome da soluo e escolha
Properties a partir do menu de atalho.
9.
10. Entre na caixa Directories containing source code, digite o local do cdigo fonte Code
Center Premium. Voc pode localizar a origem por navegao
https://codepremium.msdn.microsoft.com no Internet Explorer, copiando o local de sua barra
de endereos do Internet Explorer.
O local que voc digita deve ser como este:
https://codepremium.msdn.microsoft.com/Source/windows XP/SP1
(Este exemplo para cdigo fonte Windows XP SP1.)
11. Clique em OK.
12. Quando voc comear a depurao fonte Code Center Premium e o depurador inserir o
modo de interrupo, uma caixa de dilogo solicita que voc digite o nmero SmartCard
PIN.
13. Digite o nmero PIN que voc recebeu com o Code Center Premium Welcome Kit.
O depurador baixa a fonte Code Center Premium.
Especificando o Diretrio Local para Code Center Premium Source
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
Visual C# Consolidado
534
1.
2.
3.
4.
5.
Visual Basic
C#
C++
J#
Express
Sim
Sim
No
Sim
Padro
Sim
Sim
No
No
Pro / Team
Sim
Sim
No
Sim
Visual C# Consolidado
535
Observao
Visualizadores do depurador exigem maior privilgios que so permitidos por um aplicativo
parcialmente confivel. Visualizadores no sero carregados quando voc est parado no cdigo
com confiana parcial. Para depurar usando um visualizador, voc deve executar o cdigo com
confiana total.
Para escolher uma zona para seu aplicativo com confiana parcial
1.
2.
3.
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.
6.
Para adicionar uma permisso extra quando uma exceo de segurana ocorre
1.
2.
3.
Yes.
Se voc no desejar reiniciar ainda, clique em No.
2.
3.
4.
Use a barra de rolagem vertical para exibir a grade inteira Permissions required by the
application.
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Visual C# Consolidado
536
Padro
No
No
No
No
No
Pro / Team
No
No
Sim
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).
Pr-requisitos para depurao 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 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.)
3.
4.
5.
6.
Na caixa MPIRun arguments, digite os argumentos que voc deseja passar para MPIRun
ou MPIExec. Por exemplo:
-np 2
7.
Na caixa MPIRun working directory, digite a pasta de trabalho para MPIRun ou MPIExec.
Por exemplo:
c:\temp
8.
Na caixa Application Command, digite o caminho para o aplicativo que o MPI ir executar
em cada mquina cluster (que tambm o aplicativo cujo projeto est aberto no Visual
Studio). O caminho pode ser um compartilhamento ou um caminho local em cada mquina
no cluster. Se ele for um caminho local, o caminho deve ser idntico em cada mquina. Por
exemplo:
$(TargetPath)
Visual C# Consolidado
537
9.
Na caixa Application Arguments, digite quaisquer argumentos que voc deseja passar
para o aplicativo.
10. Na caixa MPIShim location, digite o caminho para o MPIShim.exe. Por exemplo:
c:\windows\system32\mpishim
11. Voc pode deixar a caixa de listagem Debugger Type definida como auto (o padro) e o
depurador ir escolher o tipo de depurador correto para o cdigo que est executando.
Como alternativa, voc pode escolher o tipo correto (native, managed ou mixed code)
para seu aplicativo.
12. Feche a caixa de dilogo Project Properties.
13. A partir do menu Tools, escolha Options.
14. Na caixa de dilogo Options, selecione o n Debugging, categoria General.
15. Localize a caixa de seleo When one process breaks, break all other processes.
Marque ou desmarque a caixa de seleo de acordo com o comportamento desejado
durante a sesso de depurao. (Como essa uma opo de Tools, essa configurao
permanecer em vigor para todos os projetos at voc alter-la.) Para obter mais
informaes, consulte Como interromper a execuo:.
16. Clique OK para fechar a caixa de dilogo Options.
Para depurar o aplicativo paralelo
1.
2.
Visual Basic
C#
C++
J#
Express
Sim
Sim
Sim
No
Standard
Sim
Sim
Sim
No
Pro / Team
Sim
Sim
Sim
No
Voc pode depurar um aplicativo de 64 bits que esteja executando no computador local ou em um
computador remoto com oVisual Studio 2005.
Visual C# Consolidado
538
Se voc estiver depurando localmente, o Visual Studio 2005 executado no WOW64, o emulador
de 32 bits x86 que permite que que aplicativos de 32 bits do Windows sejam executados no
Windows 64-Bits.A depurao local no WOW64 suportada somente no x64 .
Se voc estiver depurando remotamente, o Visual Studio 2005 pode ser executado no WOW64 ou
em uma mquina de 32 bits. Voc pode depurar tanto aplicativos do IA64 e do x64, bem como
aplicativos de 32 bits em execuo no modo WOW do x64 ou em plataformas de 32 bits.
Para depurar um aplicativo de 64 bits que esteja executando em um computador remoto, voc
precisar instalar o depurador remoto de 64 bits no computador remoto. O depurador remoto de
64 bits est disponvel no ltimo disco do seu conjunto instalao do Visual Studio 2005.
Se voc depurar um aplicativo de 64 bits na mquina local, o Visual Studio 2005 usa depurao
remota para realizar a conexo entre o WOW64 e o aplicativo de 64 bits na mesma mquina. Para
obter mais informaes, consulte Depurao na uma plataforma de 64 bits. Os componentes de
depurao remota sero instalados automaticamente quando voc instalar o Visual Studio 2005
no computador.
Em ambos os casos, a instalao da depurao remota em uma mquina de 64 bits instala as
verses de 32 bits e 64 bits do Monitor de Depurao Remota. Para depurar um aplicativo de 64
bits, use a verso correta, que Remote Debugger (x64) no menu Start.
A depurao do cdigo de 64 bits quase idntica a depurao do cdigo de 32-bits. No entanto,
existem duas diferenas:
Editar e Continuar no esto disponveis para a depurao de 64 bits.
Voc no pode depurar no modo misto, realizar chamadas de cdigo nativo para cdigo
gerenciado, ou vice-versa, no cdigo de 64 bits.
Clique em Start, aponte para All Programs, aponte para Microsoft Visual Studio 2005,
aponte para Visual Studio Tools, e clique em Remote Debugger (x64) ou Remote
Debugger (IA64)
OuNo Command Prompt do Windows, execute o comando Install path\Microsoft Visual Studio
8\Common7\IDE\Remote Debugger\x64 ou o comando Install path\Microsoft Visual Studio
8\Common7\IDE\Remote Debugger\ia64.
2.
Visual Basic
Visual C# Consolidado
C#
C++
J#
539
Express
Sim
Sim
Sim
No
Standard
Sim
Sim
Sim
No
Pro/Team
Sim
Sim
Sim
No
O Visual Studio 2005 pode ser executado em uma plataforma de 64 bits x64 no WOW64, que o
emulador de 32 bits x86 que permite que aplicativos do Windows de 32 bits sejam executados no
Windows de 64 bits. O Visual Studio 2005 no d suporte a IA64 WOW. Voc pode depurar um
aplicativo IA64, mas deve faz-lo remotamente. (Consulte Como: Depurar Aplicativos de 64 bits:.)
Quando voc executa o Visual Studio 2005 no modo WOW para depurar um aplicativo de 64 bits
na mesma mquina, o Visual Studio 2005 parece fazer depurao local normal. No entanto, o
Visual Studio 2005 est realmente usando o mecanismo de depurao remota para conectar-se
do WOW para o aplicativo de 64 bits. Portanto, todas as consideraes que se aplicam
depurao remota tambm se aplicam depurao local em uma plataforma de 64 bits. Isso
significa que a janela do console externo no funciona em uma plataforma de 64 bits.
Para obter mais informaes sobre como depurar aplicativos de 64 bits, consulte Como depurar
um despejo de aplicativos de 64 bits:.
Visual C# Consolidado
540
Diferenas no Assembly.GetCallingAssembly().FullName
Assembly.GetCallingAssembly().FullName retorna resultados diferentes, dependendo se o processo
de hospedagem estiver ativado ou no. Se voc chamar Assembly.GetCallingAssembly().FullName
com o processo de hospedagem ativado, ele retorna mscorlib. Se voc chamar
Assembly.GetCallingAssembly().FullName com o processo de hospedagem desativado, ser
3.
4.
Navegue at:
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\AD7Metrics\Engine\{449EC4
CC-30D2-4032-9256-EE18EB41B62B
Se a chave no existir, clique com boto direito mouse
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\AD7Metrics\Engine, e clique
em New Key no menu de atalho. Nomeie a nova chave {449EC4CC-30D2-4032-9256EE18EB41B62B}.
5.
6.
7.
Se a chave no existir, clique com o boto direito do mouse em {449EC4CC-30D24032-9256-EE18EB41B62B}, e clique New String Value no menu de atalho. Ento
clique o boto direito do mouse no novo valor, clique Rename, e digite
CLRVersionForDebugging.
8.
Clique em OK.
9.
Visual C# Consolidado
541
usando uma verso do .NET Framework suportada pelo Visual Studio. O depurador
compatvel com o .NET Framework verso 2.0 e verses anteriores, mas pode no ser
diretamente compatvel com verses futuras.
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:
Visual C# Consolidado
542
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#]
float balance = savingsAccount.Balance; Debug.Assert ( amount <= balance ); savingsAccount.Withdraw (
amount );
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#]
float balance = savingsAccount.Balance; Trace.Assert ( amount <= balance ); savingsAccount.Withdraw (
amount );
Visual C# Consolidado
543
chamada que verifica o saldo desaparece na verso de lanamento. Para solucionar esse
problema, voc deve substituir System.Diagnostics.Debug.Assert(System.Boolean) por
System.Diagnostics.Trace.Assert(System.Boolean), que no desaparece na verso de
lanamento:
Chamadas para System.Diagnostics.Trace.Assert(System.Boolean) Adicionam sobrecarga a
sua verso de lanamento, diferentemente de chamadas para
System.Diagnostics.Debug.Assert(System.Boolean).
Efeitos colaterais de Debug.Assert
Quando voc usar System.Diagnostics.Debug.Assert(System.Boolean), certifique-se de que
qualquer cdigo dentro do Assert no altera os resultados do programa se Assert for removido.
Caso contrrio, voc pode introduzir um erro que aparece somente na verso de lanamento do
seu programa acidentalmente. Tome cuidado principalmente com asseres que contm
chamadas de funo ou procedimento, como o exemplo a seguir:
[C#]
// unsafe code Debug.Assert (meas(i) != 0 );
Visual C# Consolidado
544
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#]
Debug.Assert ( stacksize > 0 ); Trace.Assert ( stacksize > 0 );
Visual C# Consolidado
545
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)
Visual C# Consolidado
546
2.
No painel tipos de projeto, abra o n Visual C#Visual Basic, Visual J# ou Visual C++, em
seguida,
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Visual C# Consolidado
547
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!";
3.
4.
5.
6.
7.
8.
9.
10.
Visual C# Consolidado
548
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.
No projeto criado acima, clique Na margem esquerda para definir mais uma vez um ponto
de interrupo na linha que voc adicionou:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!" // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
2.
3.
No menu Debug, selecione Attach to Process. (Este comando tambm est disponvel a
partir do menuTools.)
A caixa de dilogo Attach to Process ser exibida.
4.
5.
6.
Crie uma simulao do servio (um aplicativo de console, por exemplo) para determinar
onde o problema est.
Por exemplo, suponha que voc tenha um Visual C# Windows Service parecido com este:
public class ManagedWindowsService : System.ServiceProcess.ServiceBase { // // designer and user
generated methods and properties // public static int main(String[] args) { ServiceBase.Run( new
ManagedWindowsService() ); } }
O servio no poder executar nesse modo, mas voc pode depurar o mtodo OnStart e
verificar se ele est se comportando conforme esperado.
Para obter mais informaes, consulte Depurando Aplicativos do Windows Service.
Como: Depurar Aplicativos de Modo Misto
Visual C# Consolidado
549
Um aplicativo de modo misto qualquer aplicativo que combine cdigo nativo (C++) com cdigo
gerenciado (como Visual Basic, Visual C# ou C++ que executado no Common Language
Runtime). Depurao de aplicativos de modo misto amplamente transparente no Visual Studio;
ela no muito diferente da depurao de um aplicativo de modo nico. H algumas
consideraes especiais, entretanto.
Observao
Visual Studio no d suporte de depurao de modo misto no Windows 95, Windows 98 ou
Windows Millennium Edition.
Avaliao da Propriedade em Aplicativos de Modo Misto
Em um aplicativo de modo misto, a avaliao das propriedades pelo depurador uma operao
cara. Como um resultado, operaes de depurao, como uma etapa poder parecer lenta. Para
obter mais informaes, consulte Stepping. Se voc tiver um desempenho ruim em depurao de
modo misto, convm desativar a avaliao da propriedade nas janelas do depurador.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo da sua configurao ativa ou edio. Para alterar as configuraes, escolha Import
and Export Settings no menu Tools. Para obter mais informaes, consulte Configuraes
Visual Studio.
2.
3.
Desmarque a caixa de seleo Enable property evaluation and other implicit function
calls.
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
Visual C# Consolidado
550
Localizar boot.ini na sua unidade do sistema (geralmente C:\). O arquivo boot.ini pode
estar oculto e somente-leitura, portanto voc precisa usar o comando a seguir para v-lo:
dir /ASH
2.
3.
Reinicialize o computador.
4.
2.
Voc pode obter um User break exception(Int 3) Se isso acontecer, digite o seguinte
comando KD para continuar a depurao:
gn
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
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.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Visual C# Consolidado
551
Pro / Team
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.
Quando o compilador otimiza cdigo, ele reposiciona e reorganiza os instrues, resultando em
mais eficiente cdigo compilado. Devido a essa rearrangement, o depurador sempre no pode
identificar o cdigo fonte que corresponde a um conjunto de instrues.
Otimizao pode afetar:
Locais variveis, que podem ser removido pelo otimizador ou movido para o depurador
no compreende locais.
Posies dentro uma funo, que so alteradas quando o otimizador mescla blocos de
cdigo.
Funo nomes de quadros no pilha de chamadas, que podem ser incorreto se o otimizador
mescla duas funes.
Quase sempre os quadros que voc v na pilha de chamadas so direito, no entanto, supondo
que voc tenha smbolos para todos os quadros. Os quadros no pilha de chamadas podero ser
incorreto se voc tiver corrupo de pilha, se voc tiver escrito em linguagem conjunto, funes ou
se no houver quadros sistema operacional sem correspondncia smbolos no pilha de
chamadas.
Variveis globais e esttico sempre so exibidas corretamente. Portanto, layout estrutura. Se
voc tiver um ponteiro para uma estrutura e o valor do ponteiro esteja correto, cada varivel de
membro da estrutura mostrar o valor correto.
Devido a essas limitaes, voc deve fazer a depurao usando uma verso do seu programa
unoptimized se possvel. Por padro, a otimizao desativado na configurao de depurao de
um programa Visual C++ e ativado na configurao Release.
s vezes, entretanto, um erro pode aparecem somente em uma verso de um programa
otimizado. Nesse caso, voc deve depurar o cdigo otimizado.
Para ativar otimizao de um Debug criar configurao
1.
Quando voc cria um novo projeto, selecionar o Win32 Debug destino. Use o Win32
Debug destino at que seu programa estiver totalmente depurado e voc estiver pronto para
criar um Win32 Release destino. O compilador no No otimizar o Win32 Debug destino.
2.
3.
4.
5.
6.
Visual C# Consolidado
552
7.
8.
Se voc escolheu a Custom opo para Optimization, agora voc pode definir opes
para qualquer uma das outras propriedades mostradas na lista Propriedades
Ao depurar o cdigo otimizado, aspecto na Disassembly janela para ver quais instrues
realmente criado e executado. Ao definir pontos de interrupo, voc precisar estar ciente que o
ponto de interrupo poder mover junto com uma instruo. Por exemplo, considere o cdigo a
seguir:
for (x=0; x<10; x++)
Suponha que voc definir um ponto de interrupo nesta linha. Voc pode esperar o ponto de
interrupo para ser atingido 10 vezes, mas se o cdigo otimizado, ponto de interrupo
somente acertado uma vez. Que porque a primeira instruo define o valor da x como 0. O
compilador reconhece que isso s tem que ser feito uma vez e move-fora do loop. Move o ponto
de interrupo a ele.
As instrues que comparar e incrementar x permanecer dentro do loop. Quando voc exibe a
Disassembly janela automaticamente definida como instruo para maior controle, que til
quando depurao atravs de cdigo otimizado. o Unidade etapa
DebugBreak e __debugbreak
Este tpico se aplica a:
Visual Studio Edition
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
Voc pode chamar a DebugBreak funo Win32 ou __debugbreak. intrnsecas em qualquer ponto
no seu cdigo e DebugBreak__debugbreak ter o mesmo efeito que configurar um ponto de
interrupo nesse local.
Porque DebugBreak uma chamada para uma funo do sistema, depurao do sistema
smbolos devem ser instalados para garantir a informao correta pilha de chamadas exibida
aps quebra. Caso contrrio, as informaes exibidas pelo depurador pilha de chamadas podem
estar fora por um quadro. No se voc usar __debugbreak, smbolos so necessrios.
Declaraes
Este tpico se aplica a:
Visual Studio Edition
Visual Basic
Visual C# Consolidado
C#
C++
J#
553
Express Edition
No
No
Nativo
No
Standard Edition
No
No
Nativo
No
No
No
Nativo
No
Uma instruo de declarao Especifica uma condio que voc espera para manter verdadeira
em algum momento especfico em seu programa. Se essa condio no tem verdadeira, a
declarao falhar, execuo de seu programa for interrompida, aparece. e Caixa de dilogo Falha
de declarao
Visual C++ oferece suporte instrues de declarao com base nas seguintes construes:
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.
Visual C# Consolidado
554
Quando voc adicionar declaraes a seu cdigo, certifique-se que as declaraes no tem
efeitos colaterais. Por exemplo, considere a declarao a seguir:
ASSERT(nM++ > 0); // Don't do this!
Porque a ASSERT expresso no avaliada com a verso release do seu programa, nM ter que
valores diferentes nas verses Debug e Release. Em MFC, voc pode usar a VERIFY macro em
vez de ASSERT. Avaliar VERIFY a expresso mas no verifica o resultado na verso Release.
Tenha cuidado usando chamadas de funo em instrues de declarao, especialmente como
avaliar uma funo pode ter efeitos colaterais inesperados.
ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects VERIFY ( myFnctn(0)==1 ) // safe
Chama 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.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
Visual C# Consolidado
555
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
HOW TO: depurar cdigo assembly embutido
Este tpico se aplica a:
Visual Studio Edition
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
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
Para depurar cdigo de montagem embutido
1.
2.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Visual C# Consolidado
556
Padro
No
No
Nativo
No
Pro / Team
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.
HOW TO: Debug chamadas QueryInterface
Mostra a definio voc deve adicionar ao seu cdigo para depurar QueryInterface
chamadas em ATL e os resultados.
Como contagens de referncia faixa:
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.
Macros depurao e relatrio de erros
Lista macros na Biblioteca ATL que fornecem til depurao e recursos de rastreamento.
Depurao de cdigo nativo
Aborda alguns problemas comuns de depurao e tcnicas para aplicativos C e C++.
Segurana do Depurador
Descreve as prticas recomendadas para segurana depurao.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Visual C# Consolidado
557
Pro / Team
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.
Detectar Leaks de memria no MFC
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.
Depurao Visual C++
Aborda alguns problemas comuns de depurao e tcnicas para aplicativos C e C++.
Segurana do Depurador
Fornece recomendaes para depurao mais seguro.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Visual C# Consolidado
558
Padro
No
No
Nativo
No
Pro / Team
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
Descreve o suporte de depurao fornecido pela biblioteca do C Run-Time e fornece
instrues para acessar as ferramentas.
Macros do relatrio
Do _RPTn fornece informaes sobre e _RPTFn macros (definidas em CRTDBG.H), que
substitui o uso de printf instrues para depurao.
Depurar verses de funes de alocao da pilha
Discute as verses Debug especiais de funes de alocao da pilha, incluindo: como a
CRT relaciona chamadas, os benefcios da chamada-las explicitamente,. Como evitar a
converso, controlar os tipos separados de alocaes em blocos do cliente, e os
resultados de no definio _DEBUG
A pilha Debug CRT
Fornece links para gerenciamento de memria e a pilha de depurao, tipos de blocos
sobre a pilha de depurao, usando a pilha de depurao, estado da pilha relatrio
funes, e controlar solicitaes de alocao da pilha.
Depurar escrita da funo gancho
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
Aborda alguns problemas comuns de depurao e tcnicas para aplicativos C e C++.
Segurana do Depurador
Fornece recomendaes para depurao mais seguro.
Visual Basic
Visual C# Consolidado
C#
C++
J#
559
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
Como pode eu Debug Violations Access quando executando meu autnomo do programa?
Como pode usar Windows Debugger durante depurao um programa primeiro plano?
Se Halted na MFC, como posso obter voltar para a funo que chamado MFC?
Visual Basic
C#
C++
J#
Express Edition
No
No
Nativo
No
Standard Edition
No
No
Nativo
No
No
No
Nativo
No
Esta seo fornece dicas sobre depurao aplicativos COM e controles ActiveX.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
Visual C# Consolidado
560
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings (Importar e Exportar Configuraes) no menu Tools
(Ferramentas). Para obter mais informaes, consulte Configuraes do Visual Studio.
Quando voc depurar uma DLL, voc pode iniciar a depurao de:
O projeto usado para criar o executvel que chama a DLL.
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
Para especificar um executvel para a sesso de depurao
1.
2.
3.
4.
5.
Visual Basic
C#
C++
J#
Express
No
No
Nativo
No
Padro
No
No
Nativo
No
Pro / Team
No
No
Nativo
No
Visual C# Consolidado
561
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings (Importar e Exportar Configuraes) no menu Tools
(Ferramentas). Para obter mais informaes, consulte Configuraes do Visual Studio.
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:
Voc pode exibir cdigo injected na janela Disassembly.
Usando /FX, voc pode criar um arquivo de origem mesclado que contm cdigo original e
injected.
Clique com o boto direito do mouse na Disassembly janela, e escolha Show Source
Code No menu de atalho.
Se souber o local de um atributo em uma janela de origem, voc pode usar o menu de atalho
para localizar o cdigo injected na janela Disassembly
2.
3.
2.
Visual C# Consolidado
562
Depurao SQL
Este tpico se aplica a:
Visual Studio Edition
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Visual C# Consolidado
563
Padro
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Com o depurador Visual Studio 2005, voc pode depurar conjuntos de mdulos do commom
language runtime (CLR) gerenciados executando executando dentro do processo SQL Server
2005 em grande parte da mesma maneira que voc tem depurado stored procedures, funes,
disparadores e outros tipos de objetos de banco de dados.
Para obter mais informaes, consulte O que h de novo no depurador Visual Studio 2005.
Nesta seo
Limitaes depurao SQL
Descreve restries e limitaes sobre o uso dos recursos de depurao SQL.
Configurando O SQL Debugging
Lista requisitos de software para depurao SQL, para o servidor e estao de trabalho,
instrues para ativar depurao SQL, instalar, configurar e solucionar problemas de
instalao.
Depurao objetos de banco de dados SQL
Fornece instrues detalhadas e exemplos para cada tipo de objeto de banco de dados
SQL Server que pode ser depurado.
Depurao de aplicao multi-camada de banco de dados
Descreve como depurar aplicativos cujos componentes esto localizados em vrias
mquinas.
Sees relacionadas
Viso geral sobre Ferramentas Visual Database
Descreve e fornece links para tpicos em Microsoft Visual Database Tools e conexes de
banco de dados e referncias.
Criando objetos SQL Server 2005 em Cdigo Gerenciado
Descreve como criar objetos de banco de dados SQL CLR em Visual Studio usando o tipo
do projeto SQL Server.
Visual C# Consolidado
564
Debug Source Files, Common Properties, caixa de dilogo Solution Property Pages
Um retorno de carro acrescentado ao final da mensagem esse mtodo retorna, para que a
mensagem seguinte retornado pela Write, WriteIf, WriteLine, ou WriteLineIf ser iniciada na
linha a seguir:
Visual Basic
Dim errorFlag As Boolean = False Trace.WriteLine("Error in AppendData procedure.")
Trace.WriteLineIf(errorFlag, "Error in AppendData procedure.")
C#
bool errorFlag = false; System.Diagnostics.Trace.WriteLine ("Error in AppendData procedure.");
System.Diagnostics.Trace.WriteLineIf(errorFlag, "Error in AppendData procedure.");
J#
boolean errorFlag = false; System.Diagnostics.Trace.WriteLine("Error in AppendData procedure.");
System.Diagnostics.Trace.WriteLineIf(errorFlag, "Error in AppendData procedure.");
A mensagem seguinte colocar out pela Write, WriteIf, WriteLine,: ou WriteLineIf ser iniciada
na mesma linha que a mensagem colocar Out por ou WriteIf instruo o Write
C#
Visual C# Consolidado
565
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#
int I = 4; System.Diagnostics.Trace.Assert(I == 5, "I is not equal to 5.");
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.
COMO: Criar e inicializar Listeners (escutas) de rastreamento
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.
Para criar e inicializar o ouvinte de rastreamento
1.
2.
o
Visual C# Consolidado
566
System.Diagnostics.Trace.Listeners.Add(myListener);
- ou o
Se voc no desejar a escuta para receber a sada de rastreamento, no adicionelo 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();
A primeira etapa para instrumenting um aplicativo com o rastreamento para criar uma
fonte de rastreamento. Em grandes projetos com vrios componentes, voc pode criar uma
fonte de rastreamento separada para cada componente. A prtica recomendada consiste em
usar o nome do aplicativo para o nome da fonte de rastreamento. Isso facilitar para manter os
rastreamentos diferentes separadas. O cdigo a seguir cria uma nova fonte de rastreamento
(mySource). (Activity1 e chama um mtodo que rastreia eventos) As mensagens de rastreamento
so gravadas pelo ouvinte de rastreamento padro.
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class
Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void
Main(string[] args) { Activity1(); mySource.Close(); return; } static void Activity1() {
mySource.TraceEvent(TraceEventType.Error, 1, "Error message.");
mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } } }
Visual C# Consolidado
567
Para alterar o nvel no qual uma escuta grava uma mensagem de rastreamento
Visual C# Consolidado
568
Defina uma opo como o tipo BooleanSwitch ou tipo TraceSwitch e definir o nome e
descrio da opo.
2.
As pginas de propriedades
A linha de comando
Visual C# Consolidado
569
1.
2.
3.
Na caixa Property Page de dilogo que aparece, clique na Configuration Properties guia
no painel esquerdo e escolha a Build opo.
4.
Significado
vbc
csc
Compilador C#
/r:
/d:
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).
Para executar usando # de compilao condicional CONST ou # definir
Visual C# Consolidado
570
Idioma
Instruo
Resultado
Visual Basic
Ativa o rastreamento
Desativa o rastreamento
Ativa a depurao
Desativa depurao
# Definir Trace
Ativa o rastreamento
# undefine Trace
Desativa o rastreamento
# Defina debug
Ativa a depurao
# undefine Debug
Desativa depurao
C#
2.
Visual C# Consolidado
571
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."); } } }
2.
Visual C# Consolidado
572
listeners for all event types. mySource.Switch.Level = SourceLevels.All; // Change the filter settings for
the console trace listener. mySource.Listeners["console"].Filter = new
EventTypeFilter(SourceLevels.Information); 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."); } } }
Visual C# Consolidado
573
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
Use o DebuggerTypeProxyAttribute atributo quando voc precisa para significativamente e
fundamentalmente altera o modo de exibio de depurao de um tipo, mas no alterar o tipo
prprio. O DebuggerTypeProxyAttribute atributo usado para especificar um proxy de exibio
para um tipo, permitindo que um desenvolvedor para adaptar o modo de exibio para o tipo.
Esse atributo, como o DebuggerDisplayAttribute, pode ser usado no nvel do conjunto, no qual a
Target propriedade caso especifica o tipo para que o proxy ser usado. O uso recomendado que
este atributo especifica um tipo aninhado particular que ocorre dentro do tipo ao qual o atributo
aplicado. Um avaliador expresso que oferece suporte digite visualizadores verifica para este
atributo quando um tipo exibido. Se o atributo for encontrado, o avaliador expresso substituir o
tipo de proxy para o tipo do atributo aplicado a exibio.
Quando a janela varivel depurador exibe somente os membros do tipo proxy pblicos. estiver
presente, o DebuggerTypeProxyAttribute Membros particulares no so exibidos. O
comportamento da janela de dados no alterado por modos de exibio avanada atributo-.
Para evitar criminais de desempenho desnecessrios, atributos do proxy de exibio no sero
processados at que o objeto estiver expandido, atravs o usurio clica em sinal de mais (+) ao
lado do tipo em uma janela de dados, ou atravs do aplicativo do atributo
DebuggerBrowsableAttribute. Portanto, recomendvel que nenhum atributo seja aplicada ao
tipo de exibio. Atributos podem e devem ser aplicadas dentro do corpo do tipo de exibio.
Do DebuggerTypeProxyAttribute o exemplo de cdigo a seguir mostra o uso de para especificar
um tipo a ser usado como um proxy de exibio depurador.
[DebuggerTypeProxy(typeof(HashtableDebugView))] class MyHashtable : Hashtable { private const string
TestString = "This should not appear in the debug window."; internal class HashtableDebugView { private
Hashtable hashtable; public const string TestStringProxy = "This should appear in the debug window."; //
The constructor for the type proxy class must have a // constructor that takes the target type as a parameter.
public HashtableDebugView(Hashtable hashtable) { this.hashtable = hashtable; } } }
Visual C# Consolidado
574
Exemplo
Descrio
O exemplo de cdigo a seguir pode ser exibido em Visual Studio 2005 Para ver os resultados da
aplicao o DebuggerDisplayAttribute, DebuggerBrowsableAttribute., e
DebuggerTypeProxyAttribute atributos
Cdigo
C#
using System; using System.Collections; using System.Diagnostics; using System.Reflection; //[assembly:
DebuggerTypeProxy("MyHashtable.HashtableDebugView",TargetTypeName="MyHashtable")] class
DebugViewTest { // The following constant will appear in the debug window for DebugViewTest. const string
TabString = " "; // The following DebuggerBrowsableAttribute prevents the property following it // from
appearing in the debug window for the class. [DebuggerBrowsable(DebuggerBrowsableState.Never)] public
static string y = "Test String"; static void Main(string[] args) { MyHashtable myHashTable = new
MyHashtable(); myHashTable.Add("one", 1); myHashTable.Add("two", 2);
Console.WriteLine(myHashTable.ToString()); Console.WriteLine("In Main."); } }
[DebuggerDisplay("{value}", Name = "{key}")] internal class KeyValuePairs { private IDictionary dictionary;
private object key; private object value; public KeyValuePairs(IDictionary dictionary, object key, object value)
{ this.value = value; this.key = key; this.dictionary = dictionary; } } [DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(HashtableDebugView))] class MyHashtable : Hashtable { private const string
TestString = "This should not appear in the debug window."; internal class HashtableDebugView { private
Hashtable hashtable; public const string TestString = "This should appear in the debug window."; public
HashtableDebugView(Hashtable hashtable) { this.hashtable = hashtable; }
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public KeyValuePairs[] Keys { get {
KeyValuePairs[] keys = new KeyValuePairs[hashtable.Count]; int i = 0; foreach(object key in hashtable.Keys)
{ keys[i] = new KeyValuePairs(hashtable, key, hashtable[key]); i++; } return keys; } } } }
Considere qual rastreamento sada ser voc deseja que receba onsite aps voc ter
implantou o aplicativo.
2.
3.
4.
5.
6.
Visual C# Consolidado
575
Use o Build menu juntamente com a Debug pgina da caixa Property Pages de
dilogo no Solution Explorer. Use isso quando compilar no Visual Studio.
- ou -
7.
8.
Visual C# Consolidado
576
Criar comutaes no cdigo. Para obter mais informaes, consulte Criando e ao inicializar
opes de rastreamento.
2.
Na Visual C#: caixa Add New Item de dilogo, escolha XML File. Nome este
arquivo app.config. No editor XML, aps a declarao XML, adicionar XML a seguir:
<configuration> </configuration>
Quando seu projeto compilado, o arquivo App.config copiado para a pasta de sada do
projeto e renomeado applicationname. exe.config... exe.config
3.
Caso voc precise ativar como qualquer inteiro diferente de 0. a BooleanSwitch, como
DataMessagesSwitch mostrado no exemplo anterior, alterar o Value
5.
Caso voc precise ativar com a configurao Nvel apropriada (1 a 4). a TraceSwitch,
como TraceLevelSwitch mostrado no exemplo anterior, alterar o Value
6.
Adicionar comentrios ao arquivo.config para que o usurio final tenha uma compreenso
clara de quais valores para alterar para configurar as opes adequadamente.
O exemplo a seguir mostra o cdigo final, inclusive comentrios, a aparncia:
<system.diagnostics> <switches> <!-- This switch controls data messages. In order to receive data
trace messages, change value="0" to value="1" --> <add name="DataMessagesSwitch" value="0" />
<!-- This switch controls general messages. In order to receive general trace messages change the value
to the appropriate level. "1" gives error messages, "2" gives errors and warnings, "3" gives more
detailed error information, and "4" gives verbose trace information --> <add
name="TraceLevelSwitch" value="0" /> </switches> </system.diagnostics>
Visual C# Consolidado
577
2.
No painel Templates, selecione ASP.NET Web Service. Agora voc pode especificar uma
pasta em sua mquina local, ou uma URL para um computador remoto.
3.
Na lista drop-down Location , selecione File System, e na caixa de texto digite o diretrio
em sua mquina local onde o XML Web Service ser localizado, e especifique um nome de
diretrio exclusivo, como Website1. O XML Web service ter o mesmo nome que o diretrio.
Se voc quisesse, voc poderia colocar o diretrio em um servidor remoto, ou explorar
outras opes, clicando no boto Browse.
4.
5.
Clique em OK.
O Visual Studio cria um novo projeto e Exibe cdigo para o Service.cs, um modelo.
6.
8.
9.
A caixa de dilogo Debugging Not Enabled ser exibida. Selecione a opo Add a new
Web.config file with debugging enabled, e clique em OK.
10.
11.
12.
13.
Visual C# Consolidado
578
Isso define um ponto de interrupo. Voc dever ver um ponto vermelho aparecendo na
margem e um realce vermelho na linha de cdigo.
3.
4.
5.
No menu Debug, selecione Attach to Process. Voc tambm pode clicar emAttach to
Process no menu Tools.
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.
6.
7.
8.
No Internet Explorer, clique na linha que diz " Hello World ".
Abre uma nova pgina.
9.
Visual C# Consolidado
579
No painel tipos de projeto, abra o n Visual C#Visual Basic, Visual J# ou Visual C++, em
seguida,
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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!";
3.
Visual C# Consolidado
580
variveis no seu aplicativo e controlar sua execuo. Agora o aplicativo foi interrompido
quando executava, aguardando uma ao de voc.
Observao
Se voc tiver definido a Active Solution Configuration como Release, a execuo no ser
paralisada no ponto de interrupo. Isso simula o comportamento de um programa na verso real.
O crculo que marca o ponto de interrupo ir conter um ponto de interrogao branco. Se
necessrio, use a caixa de dilogo Configuration Manager para alterar essa configurao
novamente para Debug.
4.
5.
6.
7.
8.
9.
10.
No Visual Studio 2005, voc pode anexar o depurador a um processo em execuo. Se voc
estiver usando um Edition Express, no h suporte para este recurso.
Para anexar ao formulrio do Windows para depurao
1.
No projeto criado acima, clique Na margem esquerda para definir mais uma vez um ponto
de interrupo na linha que voc adicionou:
' Visual Basic textBox1.Text = "Button was clicked!" // C# textBox1.Text = "Button was clicked!" // J#
textBox1.set_Text("Button was clicked!"); // C++ textBox1->Text = "Button was clicked!";
2.
3.
No menu Debug, selecione Attach to Process. (Este comando tambm est disponvel a
partir do menuTools.)
A caixa de dilogo Attach to Process ser exibida.
4.
5.
Visual C# Consolidado
581
6.
Passo-a-passo: Depurao da funo SQL CLR definida pelo usurio com valores em tabela
Este tpico se aplica a:
Edio do Visual Studio
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Este exemplo mostra como depurar uma funo table-valued definida pelo usurio SQL CLR
(UDF).
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo de suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar uma funo table-valued definida pelo usurio SQL CLR
1.
Em um novo projeto SQL Server estabelea uma conexo a um banco de dados. Para
obter mais informaes, consulte Como conectar-se a um banco de dados:.
2.
Crie uma nova funo usando o cdigo da primeira seo de exemplo abaixo e a nomeie
TableOfPtimes.cs. Para obter mais informaes, consulte Como Develop com o tipo do
Project Server SQL:.
3.
Adicione um script que testa a funo, incluindo-a em uma instruo SELECT. No Solution
Explorer, clique com o boto direito do mouse no diretrio TestScripts, clique em Add Test
Script, e inserir o cdigo da segunda das sees de exemplo a seguir. Salve o arquivo com
o nome ReadEventLog.sql. Clique com o boto direito do mouse no nome de arquivo, e
clique em Set as Default Debug Script.
4.
Como voc est acessando o Event Log, voc deve alterar o Permission Level no banco
de dados clicando o n do nome do projeto no Project Explorer, e clicando em Properties.
Na caixa de propriedade que aparece no editor de textos, clique na guia Database, e em
seguida, defina o Permission Level para Unsafe.
O depurador no oferece suporte completo a depurao de assemblies inseguros. Em
assemblies inseguros, voc pode criar novos segmentos e chamar cdigo no gerenciado,
mas esses itens no so suportados pela depurao SQL CLR.
5.
6.
Visual C# Consolidado
582
1.
2.
Conforme voc depura a funo, voc pode usar as janelas Locals e Watch para
observar os valores dos diferentes membros.
3.
4.
Exemplo
Este o cdigo que l o log de eventos.
using System; using System.Data; using System.Data.Sql; using System.Data.SqlTypes; using
Microsoft.SqlServer.Server; using System.Collections; public partial class UserDefinedFunctions { struct
primeIndex { public int n; public int p; public primeIndex(int n, int p) { this.n = n; this.p = p; } } static bool
isPrime(int p) { if (p < 2) return false; if (p == 2) return true; if (p % 2 == 0) return false; for (int d = 3; d * d
< p; d+=2) { if (p % d == 0) return false; } return true; } static int nextPrime(int p) { int result = p + 1; while
(!isPrime(result)) result++; return result; } [SqlFunction(FillRowMethodName = "Fill", TableDefinition = "n
int,p int,est float")] public static IEnumerable TableOfPrimes(int n) { int p = 1; for (int i = 1; i <= n; i++) { p =
nextPrime(p); yield return new primeIndex(i, p); } } private static void Fill(object source, out int n, out int p,
out SqlDouble est) { primeIndex pi = (primeIndex)source; n = pi.n; p = pi.p; if (n <5) est = SqlDouble.Null;
else { double log = Math.Log(n); double loglog = Math.Log(log); est = n * (log + loglog - 1 + loglog / log - 2 /
log); } } }
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Padro
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Este exemplo mostra como depurar um disparador CLR SQL. Ele usa a tabela Contact no banco
de dados de exemplo AdventureWorks, que um dos bancos de dados instalado com SQL
Server 2005. O exemplo cria um novo disparador CLR inserir na tabela Contact.
Visual C# Consolidado
583
Observao
As caixas de dilogo e comandos de menu voc v pode diferir daquelas descritas na ajuda
dependendo de suas configuraes ativas ou verso. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar um disparador CLR SQL:
1.
Em um novo projeto do SQL Server, estabelecer uma conexo para o banco de dados
AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um banco de
dados:.
2.
3.
Adicionar um script que testa o disparador gerando uma ativao. No Solution Explorer
clique com o boto direito do mouse no diretrio TestScripts, clique Add Test Script, e
insira o cdigo da segunda seo do exemplo abaixo. Salve o arquivo com o nome
truContact.sql. Clique com o boto direito do mouse no nome de arquivo e clique em Set
as Default Debug Script.
4.
5.
O servidor pode no refletir as alteraes em valores de variveis nas janelas do depurador. Par
obter mais informaes, consulte Limitaes depurao SQL.
3.
Escolha Step Into no menu Debug para passar uma linha na stored procedure.
Observe que a execuo tem instanciado o valor da varivel sqlP do tipo SqlPipe.
4.
Abra a janela Watch. Arraste a varivel sqlP para qualquer local na janela Watch. A
varivel agora adicionada lista de variveis observadas. Para obter mais
informaes, consulte Como: usar janelas variveis do depurador.
Observao
Voc pode editar os valores das variveis na janela Watch.
5.
No editor de texto, clique com o boto direito do mouse na linha ltima e clique em
Insert Breakpoint.
6.
Visual C# Consolidado
584
6.
Exemplo
Isso o cdigo necessrio para criar o disparador usado neste exemplo.
using System; using System.Data; using System.Data.Sql; using Microsoft.SqlServer.Server; public partial
class Triggers { // Enter existing table or view for the target and uncomment the attribute line.
[Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")] public
static void Trigger1() { SqlTriggerContext triggContext = SqlContext.TriggerContext; SqlPipe sqlP =
SqlContext.Pipe; sqlP.Send("primes inserted!"); } }
Este o script de teste que far com que o disparador seja acionado.
UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro/Team
Sim
Sim
Sim
Sim
Sim
Este exemplo mostra como depurar um tipo SQL CLR definido pelo usurio. Ele cria um novo tipo
SQL CLR no banco de dados de exemplo AdventureWorks. O tipo depois usado em uma
definio de tabela, uma instruo INSERT, e em seguida em uma instruo SELECT.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo de suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar um tipo CLR SQL definido pelo usurio
1.
Em um novo projeto do SQL Server, estabelea uma conexo com a banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2.
Crie um novo tipo usando o cdigo da primeira seo exemplo abaixo, e nomeie-a
Point.cs. Para obter mais informaes, consulte Como Develop com o tipo do Project Server
SQL:.
Visual C# Consolidado
585
3.
4.
Adicione um script que testa o tipo. No Solution Explorer, clique com o boto direito do
mouse no diretrio TestScripts , clique Add Test Script, e insera o cdigo da segunda
seo de exemplo abaixo. Salve o arquivo com o nome Point.sql. Clique com o boto direito
do mouse no nome de arquivo, e clique em Set as Default Debug Script.
Adicione pontos de interrupo.
1.
2.
5.
6.
A partir do menu Debug, escolha Start para compilar, implantar, e testar o projeto. Quando
o ponteiro de instruo, designado por uma seta amarela, aparecer no ponto de interrupo,
voc est depurando sua funo.
Experimente recursos de depurao diferentes.
1.
O mtodo Parse executado uma vez para cada instruo INSERT no script no
Point.sql. Repetidamente clicando Step Into no Debug menu, voc pode observar
como o mtodo converte um par de nmeros delimitado por dois-pontos em um objeto
Point.
2.
Na janela Locals, abra a varivel pt, que contm o Point que est sendo criado
atualmente.
3.
No editor de texto, clique duas vezes a varivel pt para selecion-la. Arraste pt para
qualquer local na janela Watch. Agora pt adicionado lista de variveis observadas,
e voc pode observ-la comforme o Point executado.
4.
5.
Exemplo
Isso o cdigo que define o tipo usado neste exemplo. Este cdigo cria uma tabela denominada
pontos, insere linhas nela, e imprime o contedo da tabela. Observe que voc no deve incluir o
comando em lote GO entre a criao da tabela e seu acesso. Na verdade Visual Studio 2005
interpretar o GO como um comando SQL invlido.
using System; using System.Data.Sql; using System.Data.SqlTypes; using System.Runtime.Serialization;
[Serializable, SqlUserDefinedTypeAttribute(Format.Native)] public struct Point: INullable { private bool
m_isNull; private double m_x; private double m_y; public bool IsNull { get { return (m_isNull); } } public
override string ToString() { if (this.IsNull) { return "NULL"; } else { return this.m_x + ":" + this.m_y; } }
public static Point Parse(SqlString s) { if (s.IsNull) { return Null; } else { // Parse input string here to
separate out points: Point pt = new Point(); string str = Convert.ToString(s); string[] xy = str.Split(':'); pt.X =
Convert.ToDouble(xy[0]); pt.Y = Convert.ToDouble(xy[1]); return (pt); } } public static Point Null { get {
Point pt = new Point(); pt. m_isNull = true; return (pt); } } public double X { get { return (this.m_x); } set {
m_x = value; } } public double Y { get { return (this.m_y); } set { m_y = value; } } }
Visual C# Consolidado
586
Passo-a-passo: Depurao de uma funo SQL CLR escalar definida pelo usurio
Este tpico se aplica a:
Visual Studio Edition
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Padro
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Este exemplo mostra como depurar uma funo SQL CLR definida pelo usurio (UDF). Ele cria
uma nova funo SQL CLR definida pelo usurio no banco de dados de exemplo
AdventureWorks.
Observao
As caixas de dilogo e comandos de menu voc v podem diferir daquelas descritas na ajuda
dependendo das suas configuraes ativas ou verso. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Para depurar uma funo escalar CLR SQL definida pelo usurio
1.
Em um novo projeto do SQL Server, estabelea uma conexo com a banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2.
Criar uma nova funo usando o cdigo da primeira seo do exemplo abaixo, e nome-la
OrderCount.cs. Para obter mais informaes, consulte Como Develop com o tipo do Project
Server SQL:.
3.
Adicionar um script que testa a funo incluindo-o em uma instruo SELECT. No Solution
Explorer, clique com o boto direito do mouse no diretrio TestScripts, clique Add Test
Script e insira o cdigo da segunda seo do exemplo abaixo. Salve o arquivo com o nome
CallOrderCount.sql. Clique com boto direito mouse no nome do arquivo e escolha Set as
Default Debug Script.
4.
projeto. Quando o ponteiro de instruo, designado por uma seta amarela, aparecer no
ponto de interrupo, voc est depurando sua funo.
5.
2.
3.
Clique Step Into no menu Debug para passar uma linha na funo. Observe que o
membro sqlComm.CommandText foi instanciado tem.
Visual C# Consolidado
587
4.
No editor de texto, arraste sqlComm para qualquer local na janela Watch. A varivel
agora adicionada lista de variveis observadas.
5.
Escolha Step Into novamente e observe que uma nova janela rotulada Dynamic TSQL abre, exibindo a instruo SQL que est prestes a ser executada.
6.
7.
8.
Exemplo
Isso o cdigo necessrio para criar a funo.
using System; using System.Data.SqlClient; using Microsoft.SqlServer.Server; public partial class
UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static int OrderCount() { using (SqlConnection conn = new SqlConnection("context
connection=true")) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn;
cmd.CommandText = "SELECT 42"; //cmd = new SqlCommand("SELECT 42",conn); int result =
(int)cmd.ExecuteScalar(); return result; } } };
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Este exemplo mostra como depurar uma CLR SQL agregada definida pelo usurio. Ele cria uma
nova funo CLR SQL agregada chamada Concatenate no banco de dados de exemplo
AdventureWorks. Quando esta funo chamada em uma instruo SQL, ela ir concatenar
todos os valores para coluna especificada como seu parmetro de entrada.
Observao
As caixas de dilogo e comandos de menu que voc v podem diferir daquelas descritas na Ajuda
dependendo da suas configuraes ativas ou edio. Para alterar as configuraes, escolha
Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Configuraes Visual Studio.
Visual C# Consolidado
588
Em um novo projeto do SQL Server, estabelea uma conexo com o banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2.
Crie uma nova funo usando o cdigo do primeiro dos exemplo de sees a seguir e
denomine-o Concatenate.cs. Para obter mais informaes, consulte Como Develop com o
tipo do Project Server SQL:.
3.
4.
5.
O mtodo Accumulate executado uma vez para cada linha que constitui a clusula
GROUP BY em script na Concatenate.sql. Repetidamente clicando Step Into no menu
Debug, voc pode observar como o resultado do mtodo criado.
2.
3.
4.
5.
Avane pelo mtodo vrias vezes. O valor de intermediateResult ser alterado toda
vez atravs do mtodo, com um nome de armazenamento adicional concatenado at o
final.
6.
7.
Exemplo
Este o cdigo para a funo agregada usada no exemplo.
using System; using System.Data.Sql; using System.Data.SqlTypes; using System.Data.SqlServer; using
System.IO; using System.Text; [Serializable] [SqlUserDefinedAggregate( //use CLR serialization to serialize
the intermediate result. Format.UserDefined, //Optimizer property: IsInvariantToNulls=true, //Optimizer
property: IsInvariantToDuplicates=false, //Optimizer property: IsInvariantToOrder=false, //Maximum size
in bytes of persisted value: MaxByteSize=8000) ] public class Concatenate: IBinarySerialize { ///
<summary> /// Variable holds intermediate result of the concatenation /// </summary> private
StringBuilder intermediateResult; /// <summary> /// Initialize the internal data structures ///
Visual C# Consolidado
589
</summary> public void Init( ) { intermediateResult = new StringBuilder(); } /// <summary> ///
Accumulate the next value, nop if the value is null /// </summary> /// <param name="value"></param>
public void Accumulate(SqlString value) { if(value.IsNull) { return; }
intermediateResult.Append(value.Value).Append(','); } /// <summary> /// Merge the partially computed
aggregate with this aggregate. /// </summary> /// <param name="other"></param> public void Merge(
Concatenate other) { intermediateResult.Append(other.intermediateResult); } /// <summary> /// Called at
end of aggregation, to return results. /// </summary> /// <returns></returns> public SqlString
Terminate() { string output = string.Empty; //Delete the trailing comma, if any . if (intermediateResult !=
null && intermediateResult.Length > 0) output = intermediateResult.ToString(0,
intermediateResult.Length-1); return new SqlString(output); } public void Read(BinaryReader r) {
intermediateResult = new StringBuilder(r.ReadString()); } public void Write(BinaryWriter w) {
w.Write(intermediateResult.ToString()); } }
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Esta seo contm exemplos demonstrando a depurao para todos os tipos de objeto de banco
de dados T-SQL.
No passado, os desenvolvedores T-SQL freqentemente escrevam e depuraram seus aplicativos
T-SQL usando a ferramenta SQL Server Query Analyzer. Hoje, Query Analyzer foi substitudo pelo
SQL Server Management Studio, que no tem o depurador. Os desenvolvedores T-SQL agora
usam o depurador Visual Studio 2005 em vez disso.
Os desenvolvedores tambm podem gravar seus aplicativos T-SQL no Visual Studio 2005,
usando um projeto de banco de dados. Independentemente de voc escrever seu aplicativo TSQL no Visual Studio 2005 ou no, procedimentos de depurao so quase idnticos.
H trs cenrios de depurao a serem considerados:
Visual C# Consolidado
590
Execuo de um script de teste a partir do SQL Server Management Studio. Para obter
mais informaes, consulte Como: Depurar T-SQL usando o SQL Server Management Studio:.
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Padro
No
No
No
No
No
Pro / Team
Sim
Sim
Sim
Sim
Sim
Em um novo projeto do SQL Server, estabelea uma conexo com o banco de dados
AdventureWorks do exemplo . Para obter mais informaes, consulte Como conectar-se a
um banco de dados:.
2.
3.
Visual C# Consolidado
591
4.
5.
2.
Clique com boto esquerdo do mouse na margem cinza ao lado da instruo SET
NOCOUNT ON para definir um ponto de interrupo no disparador. Esta etapa no
opcional : se voc no definir um ponto de interrupo no disparador, voc ir ignorar
seu cdigo quando voc tentar passar por ele.
Entre no procedimento armazenado. Para obter mais informaes, consulte Como etapa
em um objeto usando Server Explorer:.
A caixa de dilogo Run Stored Procedure ser exibida, perguntando por valores de
parmetro.
6.
@currencyCode= AAA
2.
2.
8.
Voc pode verificar os dados que foram inserido clicando com o boto direito do mouse no
n Sales.Currency em Tables, e em clicando em Show Table Data no Server Explorer.
Exemplo
Esse o cdigo para o procedimento armazenado que faz com que o disparador seja acionado.
ALTER PROCEDURE dbo.UpdateCurrency_T_SQL ( @currencyCode nvarchar(3), @Name nvarchar(50) )
AS SET NOCOUNT ON UPDATE Sales.Currency SET Name = @Name WHERE CurrencyCode =
@currencyCode RETURN
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro/Team
Sim
Sim
Sim
Sim
Sim
Visual C# Consolidado
592
Este exemplo usa uma funo definida pelo usurio existente chamada de ufnGetStock no banco
de dados AdventureWorks. Esta funo retorna uma contagem de itens em estoque para um
determinado ProductID.
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 TSQL, 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.
Para depurar uma funo definida pelo usurio
1.
Em um novo projeto do SQL Server, estabelea uma conexo com o banco de dados de
exemplo AdventureWorks. Para obter mais informaes, consulte Como conectar-se a um
banco de dados:.
2.
3.
4.
5.
6.
Passe pelo cdigo usando a tecla F11 ou o boto Step Into. Na instruo SELECT,
quando voc pressionar F11 novamente, voc entrar na funo definida pelo usurio.
Passe pela funo at que voc saia de volta para o procedimento armazenado e
continue.
2.
Exemplo
Isso o cdigo para o procedimento armazenado que chama a funo definida pelo usurio.
ALTER PROCEDURE Test_ufnGetStock AS SELECT dbo.ufnGetStock(1) as CurrentStock -- non-zero
inventory SELECT dbo.ufnGetStock(316) as CurrentStock -- zero inventory SELECT dbo.ufnGetStock(5) as
CurrentStock -- no such product
Visual C# Consolidado
593
Visual Basic
C#
C++
J#
Express
No
No
No
No
No
Standard
No
No
No
No
No
Pro/Team
Sim
Sim
Sim
Sim
Sim
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 depurar um procedimento armazenado T-SQL
1.
Em um novo projeto do SQL Server, estabelea uma conexo com o banco de dados de
exemplo AdventureWorks. Para obter mais informaes consulte Como conectar-se a um
banco de dados:.
2.
3.
4.
Torne a janela Locals visvel. Para fazer isso, no menu Debug, clique em
Windows e, em seguida, clique em Locals. Observe que parmetros e variveis locais
so exibidos na janela Locals com seus valores correspondentes. Voc pode editar os
valores das variveis na janela Locals medida que o procedimento armazenado
executado. Para obter mais informaes, consulte Como: usar janelas variveis do
depurador.
Observao O servidor pode no refletir as alteraes em valores de variveis nas
janelas do depurador. Para obter mais informaes, consulte Limitaes da Depurao
SQL.
2.
Pressione F10 para passar uma linha no procedimento armazenado. Observe que
o valor da varivel @mynvarchar foi alterado na janela Locals e seu valor agora
exibido em vermelho, indicando que foi alterado.
Visual C# Consolidado
594
3.
Torne a janela Watch visvel. Para fazer isso, no menu Debug, clique em
Windows, e escolha Watch. Para obter mais informaes, consulte Como: usar
janelas variveis do depurador.
4.
5.
6.
5.
No editor de texto, clique com o boto direito do mouse na linha Return (0), e no
menu de atalho, clique em Insert Breakpoint.
No menu Debug, clique em Continue.
Exemplo
Este o cdigo para o procedimento armazenado.
CREATE PROCEDURE HelloWorld AS DECLARE @mynvarchar NVARCHAR(50), @myfloat FLOAT SET
@mynvarchar = @@VERSION SET @mynvarchar = 'Hello, world!' SET @myfloat = 1.6180 PRINT
@mynvarchar RETURN (0)
Visual C# Consolidado
595
Visual C# Consolidado
596
Escrevendo cdigo seguro Tipo-: Para ativar cdigo para se beneficiar de Segurana do
Acesso ao Cdigo voc deve usar um compilador que gera cdigo verifiably Safe tipo-. Para
obter mais informaes, consulte Gravar Verifiably cdigo Safe Type-.
Usando bibliotecas classe seguro: suas bibliotecas classe usar segurana de acesso ao
cdigo para especificar as permisses que eles precisam para ser acessado. Voc deve estar
ciente das permisses necessrias para acessar qualquer biblioteca que usa seu cdigo e
fazem solicitaes apropriadas em seu cdigo. Para obter mais informaes, consulte Usando
bibliotecas classe segura.
Visual C# Consolidado
597
Descrio
Diretiva
corporativa
Diretiva da
mquina
Diretiva de usurio Definido por usurios que definir a diretiva para uma conta de logon nico.
Diretiva de
domnio de
aplicativo
Visual C# Consolidado
598
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.
Mapeando grupos cdigo para conjuntos de permisses
Gerenciar Diretiva, mapeando grupos de cdigos para conjuntos de permisses no nvel de
diretiva ou nveis que voc administrar.
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.
Visual C# Consolidado
599
confivel) recebe restrita acesso a recursos protegidos sob a diretiva de segurana padro.
Cdigo proveniente de Internet e Intranet Local restrito de das seguintes maneiras:
Cdigo que se origina da Internet ou intranet local no tem permisso para ler ou gravar
em uma unidade local.
Cdigo que se origina da Internet ou intranet local no tem permisso para ler ou gravar no
Registro do sistema.
Cdigo que se origina da Internet ou Intranet Local pode se comunicar com o site da Web
do origem.
Cdigo que se origina de intranet local possui acesso irrestrito a elementos UI, mas
somente cdigo originadas na Internet tem acesso sub janelas e a rea de transferncia.
A diretiva de segurana padro adequado para situaes maioria dos, mas no todos,. Voc
deve considerar modificar Diretiva de segurana quando:
Voc deseja confiar um aplicativo que requer mais permisso que a zona da qual ele
provm recebe por padro.
Voc usar aplicativos de uma editora especfica que voc completamente confiar e deseja
esses aplicativos para ter acesso a recursos especficos, no importa onde eles so
executados.
Voc deseja aplicativos no computador local para ter menos de confiana total. Por
exemplo, voc for um administrador de empresa e voc desejar impedir que os usurios de
instalar e executar aplicativos no confiveis.
Se voc decidir editar diretiva, voc deve garantir voc que no faa diminuir permisso para
aplicativos para o ponto que eles no funcionaro corretamente.
Ferramentas de administrao
A maneira recomendada de configurar a diretiva de segurana para usar o Ferramenta .NET
Framework Configuration (Mscorcfg.msc). Essa ferramenta fornece assistentes para ajud-lo
ajustar o usurio, computador, e as configuraes de segurana corporativa. A tabela a seguir
descreve esses assistentes.
Assistente
Descrio
Confiar um
aplicativo
Ajustar
configuraes de
segurana
Criar um pacote de
implantao
Use este assistente para criar um pacote Windows Installer para implantar a
diretiva de segurana em uma empresa.
Para obter mais informaes sobre usando os assistentes, consulte o Ferramenta .NET
Framework Configuration (Mscorcfg.msc).
Se os assistentes no fornecem a funcionalidade necessrios para administrar a diretiva de
segurana, voc poder editar os conjuntos de permisses e cdigo grupos diretamente usando a
qualquer toolor .NET Framework Configuration o Ferramenta Diretiva de segurana para acesso
de cdigo (Caspol.exe). Caspol.exe uma ferramenta de linha de comando fornecida
principalmente para scripts administrao de segurana. Para obter informaes sobre como
Visual C# Consolidado
600
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.
3.
Criar um novo grupo de cdigos que requer o identificador exclusivo do membro. Use a
ferramenta (Mscorcfg.msc).NET Framework Configuration ou Ferramenta Diretiva de
segurana para acesso de cdigo (Caspol.exe). Para criar o grupo de cdigos
4.
Criar um novo conjunto de permisses que inclui todas as permisses montagem em log
de forma mnima precisa para executar usando a ferramenta .NET Framework
Configuration ou a ferramenta Diretiva de Segurana para Acesso ao cdigo.
5.
Associar a nova permisso definir com o novo grupo cdigo, utilizando a ferramenta .NET
Framework Configuration ou a ferramenta Diretiva de Segurana para Acesso ao cdigo.
O aplicativo aps a concluso dessas etapas, ser executado e receber permisses suficientes
para funcionar. Outros, menos aplicativos confiveis no recebero as permisses adicionais; isso
ajuda a proteger seu sistema contra cdigo mal-intencionado. Para obter informaes sobre como
realizar tarefas especficas usando as ferramentas de segurana, consulte Configurao de
diretiva de segurana.
Visual C# Consolidado
601
Visual C# Consolidado
602
2.
Criar um arquivo XML que representa o tipo de permisso voc deseja criar e atribuir aos
conjuntos.
3.
Dicas de administrao
As prticas descritas na seo so aplicveis para cada cenrio Administrao. Voc deve
conserv-lo em mente ao configurar e administrar a diretiva de segurana.
Estratgias de longo prazo para administrao de diretiva
Definir categorias de confiana que voc pode usar para administrar diretiva aplicvel. Definir
vrios grupos de cdigos para discriminate cdigo que provvel que ser executada em seu
ambiente e definir as permisses que devem receber cada grupo. Craft diretiva acordo e
implantar. Voc deve fazer estabelecer sua diretiva geral quando voc configura seu ambiente,
em vez de fone fone-por-inicialmente como necessrios para executar vrios aplicativos.
Nvel de administrao
O nvel de diretiva que voc escolher para administrar determinado pelo escopo que voc
deseja que afetam. Sempre administrar a diretiva de segurana no nvel de diretiva menor que
afeta os usurios mnimo e ainda atender seu cenrio Administrao. Por exemplo:
Se voc estiver administrando um diretiva que afeta cada estao de trabalho e usurio na
sua empresa, verifique as adies Diretiva no nvel da empresa. Nunca fazer uma adio ao
nvel empresa de um computador que no foi feito para afetar todos os computadores na sua
empresa.
Sistema de arquivos
Visual C# Consolidado
603
Usar o sistema de arquivos NTFS sempre que possvel para armazenar os arquivos de diretiva de
segurana. NTFS ajuda a oferecer proteo de arquivos com base em Usurios e grupos, e
somente permite que os usurios com privilgios administrativos para um nvel especfico para
editar arquivos de configurao de segurana. Sistemas que no usam o sistema de arquivos
NTFS criar pontos fracos de segurana, permitindo que os usurios no autorizados para
modificar a diretiva de segurana.
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.
Visual C# Consolidado
604
Chame o mtodo esttico Protect Ao passar uma matriz de bytes para criptografar, a
entropia, e o escopo proteo memria.
Chame o mtodo esttico Unprotect Ao passar uma matriz de bytes para descriptografar e
o escopo Proteo de memria.
Exemplo
O exemplo de cdigo a seguir demonstra duas formas de criptografia e descriptografia. Primeiro, o
exemplo de cdigo criptografa e descriptografa depois os uma matriz de bytes de memria. Em
seguida, o exemplo de cdigo criptografa uma cpia de uma matriz de bytes, salva ele em um
Visual C# Consolidado
605
arquivo, carrega os dados de volta do arquivo, e ento descriptografa os dados. O exemplo exibe
os dados originais, os dados criptografados, e os dados descriptografados.
C#
using System; using System.IO; using System.Text; using System.Security.Cryptography; public class
MemoryProtectionSample { public static void Main() { Run(); } public static void Run() { try {
/////////////////////////////// // // Memory Encryption - ProtectedMemory //
/////////////////////////////// // Create the original data to be encrypted (The data length should be a
multiple of 16). byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting..."); // Encrypt the data in memory. EncryptInMemoryData(toEncrypt,
MemoryProtectionScope.SameLogon); Console.WriteLine("Encrypted data: " +
UnicodeEncoding.ASCII.GetString(toEncrypt)); Console.WriteLine("Decrypting..."); // Decrypt the data in
memory. DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
/////////////////////////////// // // Data Encryption - ProtectedData // ///////////////////////////////
// Create the original data to be encrypted toEncrypt = UnicodeEncoding.ASCII.GetBytes("This is some data
of any length."); // Create a file. FileStream fStream = new FileStream("Data.dat", FileMode.OpenOrCreate);
// Create some random entropy. byte[] entropy = CreateRandomEntropy(); Console.WriteLine();
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting and writing to disk..."); // Encrypt a copy of the data to the stream. int
bytesWritten = EncryptDataToStream(toEncrypt, entropy, DataProtectionScope.CurrentUser, fStream);
fStream.Close(); Console.WriteLine("Reading data from disk and decrypting..."); // Open the file. fStream =
new FileStream("Data.dat", FileMode.Open); // Read from the stream and decrypt the data. byte[]
decryptData = DecryptDataFromStream(entropy, DataProtectionScope.CurrentUser, fStream,
bytesWritten); fStream.Close(); Console.WriteLine("Decrypted data: " +
UnicodeEncoding.ASCII.GetString(decryptData)); } catch (Exception e) { Console.WriteLine("ERROR: " +
e.Message); } } public static void EncryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope ) { if
(Buffer.Length <= 0) throw new ArgumentException("Buffer"); if (Buffer == null) throw new
ArgumentNullException("Buffer"); // Encrypt the data in memory. The result is stored in the same same
array as the original data. ProtectedMemory.Protect(Buffer, Scope); } public static void
DecryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope) { if (Buffer.Length <= 0) throw new
ArgumentException("Buffer"); if (Buffer == null) throw new ArgumentNullException("Buffer"); // Decrypt
the data in memory. The result is stored in the same same array as the original data.
ProtectedMemory.Unprotect(Buffer, Scope); } public static byte[] CreateRandomEntropy() { // Create a byte
array to hold the random value. byte[] entropy = new byte[16]; // Create a new instance of the
RNGCryptoServiceProvider. // Fill the array with a random value. new
RNGCryptoServiceProvider().GetBytes(entropy); // Return the array. return entropy; } public static int
EncryptDataToStream(byte[] Buffer, byte[] Entropy, DataProtectionScope Scope, Stream S) { if
(Buffer.Length <= 0) throw new ArgumentException("Buffer"); if (Buffer == null) throw new
ArgumentNullException("Buffer"); if (Entropy.Length <= 0) throw new ArgumentException("Entropy"); if
(Entropy == null) throw new ArgumentNullException("Entropy"); if (S == null) throw new
ArgumentNullException("S"); int length = 0; // Encrypt the data in memory. The result is stored in the same
same array as the original data. byte[] encrptedData = ProtectedData.Protect(Buffer, Entropy, Scope); //
Write the encrypted data to a stream. if (S.CanWrite && encrptedData != null) { S.Write(encrptedData, 0,
encrptedData.Length); length = encrptedData.Length; } // Return the length that was written to the stream.
Visual C# Consolidado
606
Compilando o cdigo
Incluir uma referncia para System.Security.dll.
2.
Criar um arquivo XML que representa o tipo de permisso voc deseja criar e atribuir aos
conjuntos.
3.
Visual C# Consolidado
607
2.
Clique na Security guia. Voc pode acessar as configuraes para a zona da Internet,
zona Intranet local, sites confiveis, e Sites restritos na neste guia.
3.
Escolha a zona na qual o controle gerenciado Origem e clique no Custom Level boto. e
Run ActiveX controls and plug-insScript ActiveX controls marked safe for scripting
deve ser ativada para gerenciado controles ActiveX para executar ambos.
Consulte tambm
O cdigo anterior cria o arquivo de log e exibir a seguinte mensagem para o console se ele tiver
permisses suficientes:
The Log has been created.
608
Voc pode usar a GenericIdentity classe em conjunto com a GenericPrincipal classe para criar um
esquema de autorizao que existe independentes de um domnio Windows NT ou Windows
2000.
Para criar um objeto GenericPrincipal
1.
Criar uma nova instncia da classe identidade e inicializar-lo com o nome que voc deseja
que ele seja mantenha. O cdigo a seguir cria um novo GenericIdentity objeto e inicializalo com o nome MyUser.
C#
GenericIdentity MyIdentity = new GenericIdentity("MyUser");
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
O exemplo de cdigo a seguir demonstra como criar uma instncia de um GenericPrincipal e um
GenericIdentity. Este cdigo exibe os valores um desses objetos para o console.
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; } }
Visual C# Consolidado
609
The Name is: MyIdentity The IsAuthenticated is: True Is this a Manager? True
2.
2.
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.
Visual C# Consolidado
610
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); } } }
Visual C# Consolidado
611
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:
This application does not have permission to write to the disk.
Visual C# Consolidado
612
definir porque eles representam as permisses pode variar. O exemplo a seguir mostra a sintaxe
para solicitar permisso para um conjunto de permisses nomeado. Anexa com um Name valor
que representa o nome da permisso desejado Definir. um PermissionSetAttribute
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. } } }
O cdigo anterior cria o arquivo de log e exibir a seguinte mensagem para o console se ele tiver
permisses suficientes:
The Log has been created.
Visual C# Consolidado
613
Criar uma nova instncia de uma CspParameters classe e passar o nome que voc deseja
que chamar o continer de chave para o CspParameters.KeyContainerName campo.
2.
Create a new instance of a class that derives from the AsymmetricAlgorithm class (usually
RSACryptoServiceProvider or DSACryptoServiceProvider) and pass the previously
created CspParameters object to its constructor.
Criar uma nova instncia de uma CspParameters classe e passar o nome que voc
deseja que chamar o continer de chave para o CspParameters.KeyContainerName
campo.
2.
Criar uma nova instncia de uma classe que deriva da classe AsymmetricAlgorithm (. ou
DSACryptoServiceProvider) e passar o objeto anteriormente criado CspParameters para
seu construtor geralmente RSACryptoServiceProvider
3.
4.
Exemplo
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.
Observe que que cdigo no mtodo GenKey_SaveInContainer e o GetKeyFromContainer mtodo
semelhante. Quando voc especificar um nome continer de chave para um CspParameters
objeto e transmiti-las a um AsymmetricAlgorithm objeto com a PersistKeyInCsp propriedade ou
PersistKeyInCsp propriedade definida como true, ocorre o seguinte. Se um continer de chave
com o nome especificado no existir, ento um criado e a chave persistente. Se um continer
de chave com o nome especificado no existir, ento a chave no continer automaticamente
carregado no objeto atual AsymmetricAlgorithm. Portanto, o cdigo no mtodo
GenKey_SaveInContainer persiste a chave porque ele executado primeiro, enquanto o cdigo no
mtodo GetKeyFromContainer carrega a chave porque ele executado segundo.
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.
Visual C# Consolidado
614
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.
2.
Visual C# Consolidado
615
3.
Se voc adicionar o conjunto depende do outro conjunto voc tambm deve incluir esse
conjunto para a lista. (ou seja, usa tipos implementados em outro conjunto),
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.
Visual C# Consolidado
616
1.
2.
2.
3.
4.
5.
Clique com o boto direito do mouse no conjunto de permisso cuja permisso voc
deseja modificar e escolha Change Permissions.
6.
7.
Clique em Finish.
2.
2.
3.
4.
5.
Clique com o boto direito do mouse no conjunto de permisso voc deseja adicionar a
permisso para e escolha Change Permissions.
6.
Visual C# Consolidado
617
Se voc desejar adicionar uma permisso personalizada, clique no Import boto e navegue
at o arquivo XML que contm informaes sobre a permisso personalizada.
7.
caspol polchgprompt on
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
2.
2.
3.
4.
5.
6.
7.
Visual C# Consolidado
618
Use the -customuser path option instead of the user policy-level option.
The customuser option points Caspol.exe to a specified user security configuration file. Note
that customuser must be followed by the path to the user security configuration file.
O comando a seguir lista os grupos de cdigos no usurio arquivo de configurao de diretiva
de segurana localizado em C:\config_test\.
caspol customuser "C:\config_test\security.config" listgroups
Visual C# Consolidado
619
Quando voc especifica a all opo antes da opo Nvel de diretiva para listar ou resolver
Diretiva, Caspol.exe considera todos os nveis de diretiva (usurio, mquina, e empresa).A -all
opo sempre usa a diretiva para o usurio atual. No entanto, voc pode usar a diretiva para outro
usurio em uma lista de todos os nveis de diretiva ou uma resoluo da diretiva em nveis de
diretiva.
Para listar ou resolver toda a diretiva nveis para um usurio que no seja o usurio atual
Use a -customall path opo em vez da opo -all.
O seguinte comando resolve diretiva contra a empresa atual e diretiva da mquina,, bem como
contra uma diretiva de usurio personalizada.
caspol customall "c:\config_test\security.config" resolvegroup "myApplication.exe"
2.
2.
3.
Expanda o n para o nvel de diretiva que contm o grupo de cdigo que deseja modificar.
4.
5.
6.
7.
Use the all and the resolveperm options to determine the permissions that policy grants
to the assembly:
caspol all resolveperm assembly-file
Determinar se o conjunto tem o direito de executar, verificando se o sinalizador de
execuo est definido na classe SecurityPermission. Se o conjunto possui direitos de
Visual C# Consolidado
620
3.
Para analisar um conjunto que acessa recursos protegidos ou executada quando no deveria
Se um conjunto executado mas no, Deve ou se acessar recursos que ele no deve
acessar (tais como recursos necessrios para criar caixas de dilogo), um conjunto o conjunto
provavelmente tem sido receber permisses muitos. Use the resolveperm option to
determine which permissions the assembly has been granted. Then use the resolvegroups
option to determine which code groups it belongs to. Alterar as condies de participao ou os
conjuntos dos grupos de cdigos associados para limitar as permisses concedidas ao
conjunto de permisses associado.
Visual C# Consolidado
621
Observao
A recover opo somente desfaz a ltima alterao.Caspol.exe no no cache quaisquer
alteraes feitas a ltima alterao antes. Se voc chamar essa opo duas vezes, voc desfazer
a recuperao da diretiva.
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.
Visual C# Consolidado
622
A nova permisso deve ir em um conjunto de permisses. Voc pode usar para colocar a
permisso em um dos conjuntos de permisso mutveis ou para criar uma nova permisso
definida. o Ferramenta .NET Framework Configuration (Mscorcfg.msc)
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.
Observao
Voc pode desfazer a redefinio usando a recover opo se nenhuma alterao de diretiva
forem feitas aps a reset chamada.
Visual C# Consolidado
623
The parentLabel argument is the label of the parent code group for the new code
group. Alternatively, you can use the parent's code group name (parentName) instead of the
parentLabel. To obtain this information, list the code groups as described in How to: View Code
Groups Using Caspol.exe.
The pset_name argument is the name of the permission set to associate with the
new code group. Before a named permission set can be associated with a code group, it must
be known at the policy level where you are adding the new code group. For example, if you
want to associate a MyPset permission set with a new code group in the user policy, you must
have already added the MyPset permission set to the user policy. The only time a permission
set does not need to be added beforehand is when you use one of the standard permission
sets provided by the .NET Framework. To learn how to add a permission set to a policy level,
see How to: Add Permission Sets Using Caspol.exe.
The mship argument is the membership condition for the new code group. For the
list of values for the mship argument, 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.
Sample Group Addition Commands
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.
Visual C# Consolidado
624
Files from a software publisher must be signed appropriately for this membership condition to
work. The membership condition can be constructed on the basis of either an actual certificate
file or a signed .exe file.
Suppose the certificate file for FourthCoffee (FourthCoffee.cer) is available. The following
command adds a code group in the machine policy for code published by FourthCoffee and
associates the Nothing permission set with the new group. The code group is added as a child
code group of the root.
caspol machine addgroup 1 pub cert FourthCoffee.cer Nothing
To add a code group that targets code from a particular Web site
Use the site option, and specify the URL of the Web site.
Observao
Due to the possibility of DNS name spoofing, using a Web site as a membership condition is not an
effective way to ascertain the identity of code. Where possible, use a strong name membership
condition, publisher membership condition, or the hash membership condition.
The following command associates the Intranet permission set with code from
www.microsoft.com.
Use the url option, and specify the URL of the site.
The URL must include a protocol, such as http://, http://, or ftp://. Additionally, a wildcard
character (*) can be used to specify multiple assemblies from a particular URL.
Observao
Because a URL can be identified using multiple names, using a URL as a membership condition is
not a safe way to ascertain the identity of code. Where possible, use a strong name membership
condition, a publisher membership condition, or the hash membership condition.
caspol user addgroup 1 url http://www.contoso.com/bin/* FullTrust caspol user addgroup 1 url
http://www.contoso.com/bin/MyAssembly.dll FullTrust
Use the custom option, and specify an XML file that contains the XML serialization of the
custom membership condition.
Visual C# Consolidado
625
Caspol.exe supports the use of custom membership conditions in policy, which makes the
policy system highly extensible.
The following command adds a new code group to the root of the user policy. This new code
group contains a custom membership condition found in the NewMembershipCondition.xml file
and grants full trust to assemblies matching this membership condition.
caspol user addgroup All_Code custom NewMembershipCondition.xml FullTrust
Use the name option, and specify a name for the code group. Double quotes (" ") are
required around names that contain spaces.
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.
Use a force opo para a diretiva Alterar opo que caso contrrio, ser rejeitada pelo
Caspol.exe.
O comando a seguir altera grupo de cdigo raiz a diretiva Usurio para associ-lo ao
Nothing conjunto de permisses.
caspol force user chggroup 1 Nothing
Cuidado
Visual C# Consolidado
626
Use esta opo somente com extrema cautela. Ele poder causar Caspol.exe para falhar ou
cessar funcionando, nesse caso, a recover opo no pode ser aplicada porque Caspol.exe no
pode ser executado.
Observao
Se isso ocorrer, voc pode executar o equivalente de uma recover operao manual.A mquina
submetidos a backup e diretiva de usurio so gravadas em arquivos Security.CFG.old.
Simplesmente excluir o arquivo Security.cfg em onde voc fez a alterao, o nvel de diretiva e
renomear o arquivo Security.CFG.old para Security.CFG. Para obter mais informaes sobre onde
esses arquivos esto localizados, consulte Arquivos de configurao de segurana.
2.
2.
3.
Expanda o n para o nvel de diretiva voc deseja adicionar o grupo de cdigos para.
4.
5.
6.
Clique com o boto direito do mouse no grupo de cdigo que ser o pai imediato do novo
grupo de cdigos, e escolha New.
D ao grupo de cdigo um nome e, opcionalmente, uma descrio. Clique em Next.
7.
Selecione uma condio de membro na caixa drop-down. Siga as instrues para inserir
as informaes solicitadas para a condio de membro. Clique em Next.
8.
Visual C# Consolidado
627
Por padro, o tempo de execuo executa coleta de lixo simultaneamente, que reduz o
desempenho. Se seu aplicativo segmento nico e envolve interao usurio intensivo, deixe
coleta de lixo simultneas ativada para o aplicativo no faz pausa para executar coleta de lixo. Se
seu aplicativo tem um aplicativo do servidor ASP.NET, no preciso alterar o valor padro de
elemento <gcConcurrent>.
Visual C# Consolidado
628
Fornecedores de conjuntos podem estado que aplicativos devem usar uma verso mais recente
de um conjunto, incluindo um arquivo de diretiva do editor com o conjunto atualizado. O arquivo de
diretivas do editor especifica redirecionamento do conjunto e configuraes base de cdigo, e usa
o mesmo formato como um arquivo de configurao do aplicativo. O arquivo de diretivas do editor
compilado em um conjunto e inserido no cache de conjunto global.
H trs etapas envolvidas ao criar uma diretiva do editor:
1.
2.
3.
Para saber como especificar uma base de cdigo, consulte Especificar local um conjunto na.
Criando o conjunto da diretiva Publisher
Do Vinculador do conjunto (AL.exe) uso para criar o conjunto da diretiva do editor.
o
o
629
Visual C# Consolidado
630
(Caspol.exe) voc pode usar para substituir a permisso original de disco com o novo conjunto
especificado no arquivo XML.
Para alterar uma permisso defina
Digite o seguinte comando no prompt de comando:
2.
2.
3.
4.
5.
Clique com o boto direito do mouse no conjunto de permisso voc deseja remover e
escolha Delete.
Observao
No possvel remover conjuntos de permisso interna ou conjuntos de permisses que esto
associados a um grupo de cdigos.
2.
Visual C# Consolidado
631
2.
3.
Expanda o n para o nvel de diretiva voc deseja adicionar uma permisso definida.
4.
5.
6.
7.
8.
2.
2.
3.
4.
5.
Clique com o boto direito do mouse no grupo de cdigo que voc deseja que seja
exclusivo ou final e selecione Properties.
6.
Para fazer um grupo de cdigos exclusivos, marque a caixa de seleo rotulada " Este
nvel de diretiva s ter a permisses do conjunto de permisses associado a este grupo de
cdigo ".
OuPara fazer um nvel de grupo de cdigo final, marque a caixa de seleo rotulada " nveis
de diretiva abaixo deste nvel no sero avaliados ".
7.
Clique em OK.
632
Para o sistema de segurana para avaliar diretiva em um nvel que tenha objetos de segurana
que no so fornecidos com o SDK do .NET Framework, com xito o conjunto deve ter confiana
total no nvel de diretiva.
Do Ferramenta .NET Framework Configuration (Mscorcfg.msc) Quando voc receber um conjunto
que contm um novo componente de segurana, use para adicionar o conjunto lista do conjunto
totalmente confivel.
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.
Para adicionar um conjunto lista do conjunto totalmente confivel
1.
2.
3.
Expanda o n para o nvel de diretiva voc deseja adicionar o novo conjunto para.
4.
5.
6.
Selecione o nome do conjunto a partir da lista que aparece. Esses so os conjuntos que
esto em cache de conjunto global.
Clique em Select.
Visual C# Consolidado
633
2.
3.
Expanda o n para o nvel de diretiva voc deseja adicionar uma permisso definida.
4.
5.
Clique em Import e selecione o arquivo XML que contm as informaes sobre o conjunto
de permisses.
6.
Associar permisso definido com um grupo de cdigos. Para obter detalhes, consulte
Configurar grupos de cdigos usando a ferramenta Configurao .NET Framework
(Mscorcfg.msc).
Visual C# Consolidado
634
Por exemplo, suponha que que voc estiver criando um conjunto compartilhado chamado
MySharedAssembly e a pasta de sada C:\MySharedAssembly\Debug. Voc pode colocar
C:\MySharedAssembly\Debug na varivel DEVPATH. Em seguida, especifique o <
developmentMode > elemento no arquivo de configurao do computador. Este elemento informa
o Common Language Runtime para usar DEVPATH para localizar conjuntos.
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
Isso um recurso avanado, direcionado somente para desenvolvimento.
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>
COMO: Registrar um Objeto Ativado pelo Servidor e um Objeto Ativado pelo Cliente para um
Domnio de Aplicativo de Host
O exemplo a seguir mostra como registrar um objeto servidor-activated e um objeto activated
cliente-para um domnio do aplicativo host. O type atributo na <activated> marca indica o nome
completo do tipo e nome do conjunto do objeto, como ele aparece na marca <wellknown> .
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>
Visual C# Consolidado
635
Ter Grupos de cdigos um nmero de referncia e, opcionalmente, um nome. Voc pode usar um
para se referir a grupos de cdigos especficos.
Lista Caspol.exe o nome condio de participao e um valor condio de participao (se
houver), seguido do nome de conjunto de permisses associado a esse grupo de cdigos. Se o
grupo de cdigos mescla as permisses de seus grupos de cdigo filho usando lgica match first-,
Caspol.exe indica isso atravs da exibio (FirstMatchCodeGroup.) ao lado do grupo de cdigo A
lgica de mesclagem padro executa uma unio das permisses que grupos de cdigos filho
conceder. Para obter mais informaes, consulte Modelo de diretiva de segurana.
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.
Visual C# Consolidado
636
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.
Consulte tambm
Visual C# Consolidado
637
Cuidado
Desativando a segurana de acesso ao cdigo uma operao todo computador-que termina
verificaes de segurana para todo cdigo gerenciado e para todos os usurios no computador.
Embora a list opo mostra que Segurana est desativada, nada mais claramente indica para
outros usurios que segurana tenha sido desativada.Se verses lado a lado-do Common
Language Runtime so instaladas, esse comando desativa a segurana para cada verso do
tempo de execuo instalado no computador.
Para desativar a segurana
Digite o seguinte comando no prompt de comando:
caspol security on
2.
2.
3.
4.
5.
Clique com o boto direito do mouse no conjunto de permisso voc deseja remover a
permisso de e escolha Change Permissions.
6.
7.
Clique em Finish.
638
Do Ferramenta Configurao estrutura .NET (Mscorcfg.msc) voc pode usar para configurar a
diretiva de segurana para atender s suas necessidades. A tabela a seguir descreve algumas
das tarefas voc pode executar.
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
Ajustar Segurana
Avaliar Conjunto de
Mdulos (Assembly)
Confiar assembly
Criar um pacote de
implantao
2.
2.
No painel esquerdo, clique com o boto direito do mouse no Runtime Security Policy n.
3.
Visual C# Consolidado
639
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.
1. Substituir e EndAbort membros da classe Compensator., EndPrepare,
CommitRecordBeginCommit, BeginAbortEndCommit, AbortRecord a BeginPrepare,
PrepareRecord
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
Visual C# Consolidado
640
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 +.
Visual C# Consolidado
641
Observao
No.NET Framework verso 1.1, a configurao de segurana do COM + habilitada por padro
se o ApplicationAccessControlAttribute atributo no est presente no conjunto. Isso uma
alterao no comportamento de .NET Framework verso 1.0.
C#
[assembly: ApplicationName("Calculator")] [assembly:
System.Reflection.AssemblyKeyFile("Calculator.snk")] [MustRunInClientContext] public class
Calculator : ServicedComponent { // Member definitions. }
Visual C# Consolidado
642
Compilando o cdigo
Este exemplo requer:
Referncias a espaos para nome do sistema e System.EnterpriseServices.
Compilando o cdigo
Este exemplo requer:
Referncias a espaos para nome do sistema e System.EnterpriseServices.
Compilando o cdigo
Este exemplo requer:
Referncias a espaos para nome do sistema e System.EnterpriseServices
Visual C# Consolidado
643
2.
3.
2.
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; } }
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.
Visual C# Consolidado
644
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(); } }
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices Namespace espaos para nome
Compilando o cdigo
Este exemplo requer:
Visual C# Consolidado
645
Exemplo
C#
using System.EnterpriseServices; [ assembly: ApplicationName("BankComponent")] public class Account :
ServicedComponent { static void Main() {} }
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices espaos para nome.
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Exemplo do cdigo
O procedimento e exemplo a seguir mostram como uma classe derivada da classe
ServicedComponent pode usar o recurso BYOT do COM + para acessar um coordenador
transaes distribudas (DTC). Para obter mais informaes como utilizar o recurso BYOT de
dentro do espao de nome System.EnterpriseServices, consulte BYOT (colocar seu prprio
Transaction).
Para criar um objeto que usa a transao de outro objeto.
1.
Definir uma classe que deriva da classe ServicedComponent, e expe uma propriedade
pblica que retorna o objeto transaes DTC com + atual. Por exemplo, no cdigo a seguir
a classe Base, herda a classe ServicedComponent e tem uma propriedade pblica que
retorna o objeto ContextUtil.Transaction para a transao COM + DTC atual no qual o
objeto instanciado.
C#
using System.EnterpriseServices; public class Base : ServicedComponent { public Object Transaction
{ get { return ContextUtil.Transaction; } } }
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#
Visual C# Consolidado
646
Object tx = tx1.Transaction;
3.
4.
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."); } }
Compilando o cdigo
Este exemplo requer:
Compilando o cdigo
Visual C# Consolidado
647
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices espaos para nome.
2.
3.
4.
5.
Exemplo
C#
Visual C# Consolidado
648
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices espaos para nome.
Compilando o cdigo
Este exemplo requer:
Visual C# Consolidado
649
2.
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); }
4.
5.
Criar uma varivel cujo tipo de dados a interface na fila do qual a classe
componente enfileirado derivada.
C#
IQComponent iQc = null;
2.
Exemplo
C#
using System.Reflection; using System.EnterpriseServices; [assembly: ApplicationName("QCDemoSvr")]
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationQueuing(Enabled=true,
Visual C# Consolidado
650
Definir uma interface de eventos. Por exemplo, o cdigo a seguir define uma interface de
evento denominada IlceMsg que tenha um mtodo chamado EventMethod.
C#
public interface ILceMsg { void EventMethod(string message); }
2.
3.
4.
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"); } } }
Visual C# Consolidado
651
C#
//Publisher protected void Fire_Click (object sender, System.EventArgs e) { ILceMsg evt = (ILceMsg) new
LceClass(); evt.EventMethod("Hello events"); }
2.
3.
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
2.
3.
4.
Exemplo
C#
using System; using System.EnterpriseServices; using System.Data; using System.Data.SqlClient; [assembly :
ApplicationName("OCDemo")] namespace OCDemo { [ConstructionEnabled(Default="Initial
Catalog=Northwind; Data Source=.\\SQLServerInstance;Trusted_Connection=yes")] public class
TestObjectConstruct : ServicedComponent { private string connectStr; SqlConnection conn; public
TestObjectConstruct() { } protected override void Construct(string constructString) { // Called after
constructor. connectStr = constructString; } public void ConnectToDatabase() { conn = new
SqlConnection(connectStr); conn.Open(); } } }
Visual C# Consolidado
653
Visual Basic
vbc myCode.vb
Para criar um conjunto com uma extenso.exe e especificar o nome do arquivo de sada
Visual C# Consolidado
654
Visual Basic
vbc /out:myAssembly.exe myCode.vb
Visual Basic
vbc /out:myCodeLibrary.dll /t:library myCode.vb
Visual C# Consolidado
655
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.
Do Disassembler MSIL (Ildasm.exe) para conjuntos de mdulos (assemblies) que no esto no
cache de conjunto global, voc pode usar cdigo para exibir as informaes para o console ou a
uma varivel, ou voc pode usar para examinar metadados do conjunto, que contm o nome
totalmente qualificado.
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
Visual C# Consolidado
656
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.
A ApplicationBase propriedade Define o Diretrio de raiz do aplicativo. Quando o Runtime
precisa atender uma requisio tipo, ele investiga para o conjunto que contm o tipo no diretrio
especificado pela propriedade ApplicationBase.
Observao
Um novo domnio do aplicativo herdar apenas a ApplicationBase propriedade do criador.
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); } }
Type ildasm <assembly name> at the command prompt. Por exemplo, o comando a seguir
desmonta o Hello.exe conjunto.
ildasm Hello.exe
Exemplo
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 C# Consolidado
657
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
<assembly name>
.assembly <assembly
name>
.subsystem <value>
corflags
Visual C# Consolidado
658
Quando voc fazer uma referncia em tempo de execuo a um conjunto de nome seguro,
por exemplo, usando voc deve usar o nome de exibio do conjunto de nome seguro
referenciado. ou Assembly.GetType mtodos, o Assembly.Load A sintaxe de um nome de
exibio a seguinte:
Voc pode imprimir o formato hexadecimal da chave pblica e smbolo de chave pblica para um
conjunto especfico usando o seguinte Ferramenta nome forte (SN.exe) Comando:
Visual C# Consolidado
659
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>
Visual C# Consolidado
660
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),
Voc pode usar Gacutil.exe para adicionar conjuntos de nome seguro de cache de conjunto
global e para exibir o contedo do cache de montagem global.
Observao
Gacutil.exe serve apenas para fins de desenvolvimento e no deve ser usado para instalar
conjuntos de produo no cache de conjunto global.
Usando o Microsoft Windows Installer 2.0.
Essa a maneira recomendada e mais comum para adicionar conjuntos de cache de conjunto
global. O instalador fornece referncia Contagem de conjuntos no cache de conjunto global, e
outros benefcios.
Usando uma extenso do shell do Windows fornecido pelo SDK do .NET Framework
chamado o Visualizador cache do conjunto (Shfusion.dll).
A extenso do shell permite que voc a arrastar conjuntos para cache de conjunto global.
Usando o Ferramenta Configurao estrutura .NET (Mscorcfg.msc).
O Ferramenta Configurao estrutura .NET (Mscorcfg.msc) permite que voc se exibir o cache
de conjunto de mdulos global e adicionar novos conjuntos de no cache.
Para instalar um conjunto de nome seguro no cache de conjunto global usando a ferramenta
Global Assembly Cache (Gacutil.exe)
No prompt de comando, digite o seguinte comando:
Compilar todos os arquivos que contm espaos para nome referido por outros mdulos
na montagem em mdulos de cdigo. A extenso padro para mdulos de cdigo
Visual C# Consolidado
661
.netmodule. Por exemplo, se criar um arquivo chamado Stringer espao para nome
chamada myStringer que referenciado no arquivo Cdigo do cliente, Stringer deve ser
compilado em um mdulo de cdigo primeiro.
2.
3.
Do Vinculador do conjunto (AL.exe) uso para criar o arquivo de sada que contm o
manifesto do conjunto. Esse arquivo contm informaes de referncia para todos os
mdulos ou recursos que fazem parte do conjunto.
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
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.
O exemplo a seguir mostra o cdigo para Client.
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 C# Consolidado
662
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
O C# e Visual Basic compiladores suportam diretamente criao usando as seguintes sintaxes
diferentes dois conjuntos de vrios arquivos.
Dois compilations criar um conjunto-dois arquivos:
Visual Basic
vbc /t:module Stringer.vb vbc Client.vb /addmodule:Stringer.netmodule
C#
csc /t:module Stringer.cs csc Client.cs /addmodule:Stringer.netmodule
Visual Basic
vbc /out:Stringer.netmodule Stringer.vb /out:Client.exe Client.vb
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.
Visual C# Consolidado
663
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.
Visual C# Consolidado
664
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:
Observao
Em ambientes de desenvolvimento, como Visual Studio, o conjunto no pode ser compilado no
diretrio do projeto. Por exemplo, algumas verses do Visual Studio Compilar projetos C# em um
bin\Debug subdiretrio. Nesse caso, o caminho no exemplo de cdigo seria ".. \\ \\sgKey.snk ". No
Visual Studio 2005 arquivo de chave no C# pode ser especificado nas configuraes do projeto.
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
Ao assinar um conjunto com um nome de alta segurana, a Vinculador do conjunto (AL.exe)
Aparncia da chave arquivos relativo para a pasta atual e para o diretrio de sada. Ao usar linha
comando compiladores, basta copiar a chave para a pasta atual que contm seus mdulos de
cdigo.
Visual C# Consolidado
665
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),
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
sn -p keypair.snk public.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.
C#
Visual C# Consolidado
666
[assembly: AssemblyKeyFileAttribute(@"..\..\key.snk")]
Como Incorporar Bibliotecas de Tipo como Recursos Win32 em Aplicativos Baseados no .NET
Voc pode compactar uma biblioteca de tipos como um arquivo separado ou incorpor-lo como
arquivo recurso Win32 dentro de um aplicativo baseado em .NET. O Microsoft Visual Basic 6.0
executado essa tarefa para voc automaticamente; no entanto, ao usar Microsoft Visual Basic
2005, voc deve incorporar sua biblioteca tipo manualmente.
Para incorporar uma biblioteca de tipos como um recurso do Win32 em um aplicativo baseado em
.NET
1.
Compilar o aplicativo gerenciado como um arquivo de biblioteca. Por exemplo, para criar
um conjunto para um aplicativo chamado MyApp, digite o seguinte comando no prompt de
comando:
Visual Basic
vbc /t:library MyApp.vb
C#
csc /t:library MyApp.cs
2.
Exportar um arquivo biblioteca tipo do seu conjunto usando o Tipo Exporter da biblioteca
(TlbExp.exe). No prompt de comando, digite o seguinte comando:
tlbexp MyApp.dll /out:mytypelib.tlb
3.
C#
csc /t:library MyApp.cs /win32res:myresource.res
Visual C# Consolidado
667
Neste comando, tlbfile o arquivo que contm a biblioteca de tipos COM, filename o nome
do recipiente ou arquivo que contm o par de chaves e assemblyname o nome da montagem
para entrar com um nome de alta segurana.
Conjuntos de interoperabilidade primrias podem referenciar apenas outros conjuntos de
interoperabilidade primrias. Se seu conjunto faz referncia tipos de uma biblioteca de tipos com
de terceiros, voc dever obter um conjunto interoperacional primrio do editor antes voc pode
gerar seu conjunto interoperacional primrio. Se voc for o editor, voc deve gerar um conjunto de
interoperabilidade primrio para a biblioteca de tipos dependente antes de gerar conjunto de
mdulos (assembly referncia o) de interoperabilidade primria.
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.
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dll
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
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /namespace:CompanyA.LibUtil
/out:CompanyA.LibUtil.dll
2.
Visual C# Consolidado
668
1.
2.
3.
3.
C#
[assembly:AssemblyKeyFile(@"..\..\CompanyA.snk")] [assembly:Guid("97d25db0-0363-1cf-abc4-02608
c9e7553"] [assembly:PrimaryInteropAssembly(4, 2)] [assembly:PrimaryInteropAssembly(5, 2)]
Exemplo
O seguinte comando produz o conjunto Loanlib.DLL no espao para nome Loanlib.
tlbimp Loanlib.dll
Visual C# Consolidado
669
Definir a interface do coletor de eventos no cdigo gerenciado. Esta interface pode conter
um subconjunto dos eventos sourced por uma classe gerenciado. Os nomes mtodo da
interface deve ser a mesma os nomes de eventos.
2.
3.
Exportar o conjunto que contm a classe para uma biblioteca de tipos. Use API equivalente
ou Tipo Exporter da biblioteca (TlbExp.exe) um para exportar o conjunto.
4.
5.
Exemplo
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-337148dc-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") ]
Visual C# Consolidado
670
Definir um espao para nome de destino para os tipos em uma biblioteca com
explicitamente.
2.
3.
2.
3.
4.
Visual C# Consolidado
671
Para informaes sobre elementos manifesto e seus atributos, procure por " Reference
Manifests Application " na Biblioteca do MSDN.
3.
4.
5.
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 ".
3.
Visual C# Consolidado
672
4.
Atributo
Descrio
Required
Clsid
Sim
description
No
name
Sim
ProgID
No
No
runtimeVersion
tlbid
5.
6.
7.
No
8.
Visual C# Consolidado
673
RT_MANIFEST 1 myManagedComp.manifest
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.
3.
4.
Visual C# Consolidado
674
obter informaes detalhadas sobre como evitar coleta de lixo, consulte Interoperabilidade
Marshaling COM Invoke Platform.
Exemplo
C#
using System; using System.Runtime.InteropServices; public delegate bool CallBack(int hwnd, int lParam);
public class EnumReportApp { [DllImport("user32")] public static extern int EnumWindows(CallBack x, int
y); public static void Main() { CallBack myCallBack = new CallBack(EnumReportApp.Report);
EnumWindows(myCallBack, 0); } public static bool Report(int hwnd, int lParam) { Console.Write("Window
handle is "); Console.WriteLine(hwnd); return true; } }
Use o seguinte cdigo para criar uma nova classe de exceo chamado NoAccessException
e mape-lo para o HRESULT E_ACCESSDENIED.
C++
Class NoAccessException : public ApplicationException { NoAccessException () { HResult =
E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
Voc pode encontrar um programa (em qualquer linguagem de programao) que usa um cdigo
tanto gerenciados e no gerenciados ao mesmo tempo. Por exemplo, o empacotador
personalizado no exemplo de cdigo a seguir usa o Marshal.ThrowExceptionForHR(int
HResult) mtodo para acionar uma exceo com um valor HRESULT especfico. O mtodo
procura o HRESULT e gera o tipo de exceo apropriado. Por exemplo, o HRESULT no
fragmento de cdigo a seguir gera ArgumentException.
C++
CMyClass::MethodThatThrows { Marshal.ThrowExceptionForHR(COR_E_ARGUMENT); }
A tabela a seguir fornece o mapeamento completo de cada HRESULT sua classe de exceo
comparvel no .NET Framework.
Visual C# Consolidado
675
HRESULT
Exceo .NET
MSEE_E_APPDOMAINUNLOADED
AppDomainUnloadedException
COR_E_APPLICATION
ApplicationException
COR_E_ARGUMENT ou E_INVALIDARG
ArgumentException
COR_E_ARGUMENTOUTOFRANGE
ArgumentOutOfRangeException
COR_E_ARITHMETIC ou
ERROR_ARITHMETIC_OVERFLOW
ArithmeticException
COR_E_ARRAYTYPEMISMATCH
ArrayTypeMismatchException
COR_E_BADIMAGEFORMAT ou
ERROR_BAD_FORMAT
BadImageFormatException
COR_E_COMEMULATE_ERROR
COMEmulateException
COR_E_CONTEXTMARSHAL
ContextMarshalException
COR_E_CORE
CoreException
NTE_FAIL
CryptographicException
COR_E_DIRECTORYNOTFOUND ou
ERROR_PATH_NOT_FOUND
DirectoryNotFoundException
COR_E_DIVIDEBYZERO
DivideByZeroException
COR_E_DUPLICATEWAITOBJECT
DuplicateWaitObjectException
COR_E_ENDOFSTREAM
EndOfStreamException
COR_E_TYPELOAD
EntryPointNotFoundException
COR_E_EXCEPTION
Exceo
COR_E_EXECUTIONENGINE
ExecutionEngineException
COR_E_FIELDACCESS
FieldAccessException
COR_E_FILENOTFOUND ou
ERROR_FILE_NOT_FOUND
FileNotFoundException
COR_E_FORMAT
FormatException
COR_E_INDEXOUTOFRANGE
IndexOutOfRangeException
COR_E_INVALIDCAST ou E_NOINTERFACE
InvalidCastException
COR_E_INVALIDCOMOBJECT
InvalidComObjectException
COR_E_INVALIDFILTERCRITERIA
InvalidFilterCriteriaException
COR_E_INVALIDOLEVARIANTTYPE
InvalidOleVariantTypeException
COR_E_INVALIDOPERATION
InvalidOperationException
COR_E_IO
IOException
COR_E_MEMBERACCESS
AccessException
COR_E_METHODACCESS
MethodAccessException
Visual C# Consolidado
676
COR_E_MISSINGFIELD
MissingFieldException
COR_E_MISSINGMANIFESTRESOURCE
MissingManifestResourceException
COR_E_MISSINGMEMBER
MissingMemberException
COR_E_MISSINGMETHOD
MissingMethodException
COR_E_MULTICASTNOTSUPPORTED
MulticastNotSupportedException
COR_E_NOTFINITENUMBER
NotFiniteNumberException
E_NOTIMPL
NotImplementedException
COR_E_NOTSUPPORTED
NotSupportedException
OrE_POINTER COR_E_NULLREFERENCE
NullReferenceException
COR_E_OUTOFMEMORY ou
E_OUTOFMEMORY
OutOfMemoryException
COR_E_OVERFLOW
OverflowException
COR_E_PATHTOOLONG ou
ERROR_FILENAME_EXCED_RANGE
PathTooLongException
COR_E_RANK
RankException
COR_E_REFLECTIONTYPELOAD
ReflectionTypeLoadException
COR_E_REMOTING
RemotingException
COR_E_SAFEARRAYTYPEMISMATCH
SafeArrayTypeMismatchException
COR_E_SECURITY
SecurityException
COR_E_SERIALIZATION
SerializationException
OrERROR_STACK_OVERFLOW
COR_E_STACKOVERFLOW
StackOverflowException
COR_E_SYNCHRONIZATIONLOCK
SynchronizationLockException
COR_E_SYSTEM
SystemException
COR_E_TARGET
TargetException
COR_E_TARGETINVOCATION
TargetInvocationException
COR_E_TARGETPARAMCOUNT
TargetParameterCountException
COR_E_THREADABORTED
ThreadAbortException
COR_E_THREADINTERRUPTED
ThreadInterruptedException
COR_E_THREADSTATE
ThreadStateException
COR_E_THREADSTOP
ThreadStopException
COR_E_TYPELOAD
TypeLoadException
COR_E_TYPEINITIALIZATION
TypeInitializationException
COR_E_VERIFICATION
VerificationException
COR_E_WEAKREFERENCE
WeakReferenceException
Visual C# Consolidado
677
COR_E_VTABLECALLSNOTSUPPORTED
VTableCallsNotSupportedException
COMException
Para recuperar informaes de erro estendidas, o cliente gerenciado deve examinar os campos do
objeto de exceo que foi gerado. Para o objeto de exceo para fornecer informaes teis
sobre um erro, o objeto COM deve implementa a IErrorInfo interface. Tempo de Execuo utiliza
as informaes fornecidas por IErrorInfo para inicializar o objeto de exceo.
Se o objeto COM no oferece suporte IErrorInfo, o Runtime Inicializa um objeto de exceo com
valores padro. A tabela a seguir lista cada campo associado a um objeto de exceo e identifica
a fonte de informaes padro quando o objeto com oferece suporte IErrorInfo.
Observe que o Runtime s vezes ignorar uma HRESULT casos em onde h um IErrorInfo
presente no segmento. Este comportamento pode ocorrer em casos onde. e HRESULT o
IErrorInfo no representam o mesmo erro
Campo Exceo
ErrorCode
HelpLink
InnerException
Message
(Mensagem)
Origem
StackTrace
O rastreamento da pilha.
TargetSite
Gerar conjunto interoperacional inicial usando TLBIMP.exe. Por exemplo, para produzir um
conjunto chamado New.dll de New. TLB, digite o seguinte comando no prompt de comando:
tlbimp New.tlb /out:New.dll
2.
No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
Visual C# Consolidado
678
3.
4.
Instale o arquivo exe ou dll com em seu computador, a menos que um instalar.exe do
Windows executa a instalao para voc.
2.
3.
4.
5.
Clique em OK.
2.
Visual C# Consolidado
679
3.
4.
Consumir eventos da fonte de eventos COM da mesma maneira que consome eventos de
uma origem de evento gerenciado.
Exemplo
O exemplo a seguir demonstra como abrir uma janela do Internet Explorer e Wire eventos criados
pelo InternetExplorer Objeto para manipuladores de eventos implementado no cdigo gerenciado.
Definies de tipos Internet Explorer (incluindo representantes de evento) so importadas como
metadados do SHDocVw.dll. O exemplo recpetores o TitleChange evento.
C#
namespace InternetExplorer { using System; using System.Runtime.InteropServices; using SHDocVw; public
class Explorer { public static void Main() { Explorer explorer = new Explorer(); explorer.Run(); } public void
Run() { Object o = null; String s; try { // Starts the browser. m_IExplorer = new
SHDocVw.InternetExplorer(); } catch(Exception e) { Console.WriteLine("Exception when creating Internet
Explorer object {0}", e); return; } // Wires your event handlers to m_IExplorer. SetAllEvents(); try { // Goes
to the home page. m_WebBrowser = (IWebBrowserApp) m_IExplorer; m_WebBrowser.Visible = true;
m_WebBrowser.GoHome(); // Starts navigating to different URLs. Console.Write("Enter URL (or enter to
quit): "); s = Console.ReadLine(); while (s != "" && m_IExplorer != null && m_WebBrowser != null) {
m_WebBrowser.Navigate(s, ref o, ref o, ref o, ref o); Console.Write("Enter URL (or enter to quit): "); s =
Console.ReadLine(); } m_WebBrowser.Quit(); } catch(Exception sE) { if (m_IExplorer == null &&
m_WebBrowser == null) { Console.WriteLine("Internet Explorer has gone away"); } else {
Console.WriteLine("Exception happens {0}", sE); } } } // Uses the += syntax for adding delegates to events.
void SetAllEvents() { if (m_IExplorer != null) { // Title Change event // DWebBrowserEvents2 is the name of
the sink event //interface. // TitleChange is the name of the event. //
DWebBrowserEvents2_TitleChangeEventHandler is the // delegate name assigned by TlbImp.exe.
DWebBrowserEvents2_TitleChangeEventHandler DTitleChangeE = new
DWebBrowserEvents2_TitleChangeEventHandler(OnTitleChange); m_IExplorer.TitleChange +=
DTitleChangeE; } } /////////////////////////////////////////////////////////////////////// // Define
event handlers. // Document title changed static void OnTitleChange(String Text) { Console.WriteLine("Title
changes to {0}", Text); } ////////////////////////////////////////////////////////////////////////// //
The following are class fields. static private SHDocVw.InternetExplorer m_IExplorer = null; static private
IWebBrowserApp m_WebBrowser = null; } }
Declarar os tipos em um idioma que seja compatvel o com comum especificao (cls)
idioma e compilar o arquivo.
Exportar o conjunto que contm os tipos com o Tipo Exporter da biblioteca (TlbExp.exe).
Visual C# Consolidado
680
3.
Usar a biblioteca de tipos com exportado como uma base para declarar tipos gerenciados
orientado com.
Supondo que voc tiver um arquivo IDL ou arquivo biblioteca Tipo, decidir quais classes e
interfaces voc deseja incluir no RCW personalizado. Voc pode excluir qualquer tipos que
voc no pretende usar diretamente ou indiretamente em seu aplicativo.
2.
3.
4.
Como com os tipos importados com TLBIMP.exe, algumas exigem informaes adicionais
que voc pode adicionar diretamente a seu cdigo. Para obter detalhes, consulte Como
editar conjuntos Interop:.
Exemplo
O cdigo a seguir mostra um exemplo da interface e ISATestSATest Classe em IDL e os tipos
correspondentes no cdigo fonte C#.
Arquivo de biblioteca IDL ou tipo
[ object, uuid(40A8C65D-2448-447A-B786-64682CBEF133), dual, helpstring("ISATest Interface"),
pointer_default(unique) ] interface ISATest : IDispatch { [id(1), helpstring("method InSArray")] HRESULT
InSArray([in] SAFEARRAY(int) *ppsa, [out,retval] int *pSum); }; [ uuid(116CCA1E-7E39-4515-984990790DA6431E), helpstring("SATest Class") ] coclass SATest { [default] interface ISATest; };
Visual C# Consolidado
681
Voc dever registrar todos os adquirida primrio conjuntos interoperabilidade no seu computador
de desenvolvimento antes voc pode referi-las com Microsoft Visual Studio 2005. O Visual Studio
procurar e usa um conjunto interoperacional primrio na primeira vez que voc referncia um tipo
de uma biblioteca de tipos COM. Se Visual Studio no possvel localizar conjunto de mdulos
(assembly o) de interoperabilidade primria associado biblioteca tipo, ele solicitar que voc a
adquiri-lo ou oferece para criar um conjunto de interoperabilidade. Do Importador da biblioteca
Tipo (TLBIMP.exe) da mesma forma, tambm usa o Registro para localizar conjuntos de
interoperabilidade primrias.
Embora ele no seja necessrio para registrar conjuntos de interoperabilidade primrias a menos
que voc pretende usar Visual Studio, registro oferece duas vantagens:
Voc pode evitar acidentalmente gerar e usando um novo conjunto interoperacional se, em
algum momento no futuro, voc usar o Visual Studio para fazer referncia a um tipo para as
quais voc tem Conjunto de Mdulos (Assembly no registrado um) de interoperabilidade
primria.
regasm assemblyname
Neste comando, assemblyname o nome de arquivo do conjunto que est registrado.
RegAsm.exe adiciona uma entrada para o conjunto de interoperabilidade primrio sob a
mesma chave de Registro como a biblioteca tipo original.
Exemplo
O exemplo a seguir registra o CompanyA.UtilLib.dll conjunto de mdulos (assembly) de
interoperabilidade primria.
regasm CompanyA.UtilLib.dll
2.
3.
Visual C# Consolidado
682
4.
Gerar e assinar um novo conjunto do arquivo de texto modificado por meio do Assembler
MSIL (Ilasm.exe):
ilasm LibUtil.il /dll /key:CompanyA.snk
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.
Para gerar classes que esto em conformidade com um esquema especfico
1.
2.
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">
3.
Visual C# Consolidado
683
Geralmente til para examinar o esquema do no fluxo XML que gerado quando as instncias
de uma classe (ou classes) so serializados. Por exemplo, voc pode publicar o esquema para
outros usurios a ser usado, ou voc poder compar-lo a um esquema com o qual voc est
tentando se atingir conformity.
2.
3.
O esquema (ou esquemas) sero gravadas, comeando com " a schema0.xsd " Nome.
2.
3.
4.
5.
6.
7.
8.
Exemplo
C#
public class SerializeOverride() { // Creates an XmlElementAttribute with the alternate name.
XmlElementAttribute myElementAttribute = new XmlElementAttribute();
myElementAttribute.ElementName = "BookID"; XmlAttributes myAttributes = new XmlAttributes();
myAttributes.XmlElements.Add(myElementAttribute); XmlAttributeOverrides myOverrides = new
XmlAttributeOverrides(); myOverrides.Add(typeof(Book), "ISBN", myAttributes); XmlSerializer
mySerializer = new XmlSerializer(typeof(Book), myOverrides) Book b = new Book(); b.ISBN = "123456789"
Visual C# Consolidado
684
// Creates a StreamWriter to write the XML stream to. StreamWriter writer = new
StreamWriter("Book.xml"); mySerializer.Serialize(writer, b); }
Visual C# Consolidado
685
derived type // and cast the returned object to it. ExpandedBook expanded; foreach(Book b in
myOrders.Books) { expanded = (ExpandedBook)b; Console.WriteLine( expanded.ISBN + "\n" +
expanded.NewEdition); } } }
2.
3.
4.
5.
Exemplo
C#
// Serializes a class named Group as a SOAP message. XmlTypeMapping myTypeMapping = (new
SoapReflectionImporter().ImportTypeMapping(typeof(Group)); XmlSerializer mySerializer = new
XmlSerializer(myTypeMapping);
2.
Visual C# Consolidado
686
Alterar o mtodo da Web em para retornar o tipo que implementa IXmlSerializable o proxy
cliente. Voc pode usar fazer isso automaticamente, mas isso no mostrado aqui. para
um SchemaImporterExtension
2.
Implementar o ReadXml mtodo para ler os dados em partes fluxo e gravar os bytes em
disco. Essa implementao tambm aumenta eventos andamento que podem ser usados
por um controle grfico, como uma barra de progresso.
Exemplo
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
Visual C# Consolidado
687
Compilando o cdigo
2.
Construir usando um XmlSerializer o tipo de objeto. Para obter mais informaes, consulte
os XmlSerializer construtores de classe.
3.
Chame o Serialize mtodo para gerar um fluxo XML ou uma representao em arquivo de
propriedades pblicas do objeto e campos. O exemplo a seguir cria um arquivo.
C#
MySerializableClass myObject = new MySerializableClass(); // Insert code to set properties and fields
of the object. XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass)); // To
Visual C# Consolidado
688
2.
3.
4.
5.
Defina a Namespace propriedade de cada atributo como um dos valores de espao para
nome a XmlSerializerNamespaces.
Passar o XmlSerializerNamespaces. para o Serialize mtodo da XmlSerializer
Exemplo
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);
Visual C# Consolidado
689
2.
Criar para cada membro da classe que est sendo serializado. um SoapAttributes
3.
Criar uma instncia de uma ou mais dos atributos que afetam a serializao de XML,
conforme apropriado, para o membro sendo serializado. Para obter mais informaes,
consulte " atributos que codificado serializao SOAP controle ".
4.
5.
6.
7.
8.
Exemplo
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,
Visual C# Consolidado
690
large } public class Run { public static void Main() { Run test = new Run();
test.SerializeOriginal("SoapOriginal.xml"); test.SerializeOverride("SoapOverrides.xml");
test.DeserializeOriginal("SoapOriginal.xml"); test.DeserializeOverride("SoapOverrides.xml"); } public void
SerializeOriginal(string filename) { // Creates an instance of the XmlSerializer class. XmlTypeMapping
myMapping = (new SoapReflectionImporter().ImportTypeMapping( typeof(Group))); XmlSerializer
mySerializer = new XmlSerializer(myMapping); // Writing the file requires a TextWriter. TextWriter writer
= new StreamWriter(filename); // Creates an instance of the class that will be serialized. Group myGroup =
new Group(); // Sets the object properties. myGroup.GroupName = ".NET"; Byte [] hexByte = new
Byte[2]{Convert.ToByte(100), Convert.ToByte(50)}; myGroup.GroupNumber = hexByte; DateTime myDate
= new DateTime(2002,5,2); myGroup.Today = myDate; myGroup.PostitiveInt= "10000";
myGroup.IgnoreThis=true; myGroup.Grouptype= GroupType.small; Car thisCar =(Car)
myGroup.myCar("1234566"); // Prints the license number just to prove the car was created.
Console.WriteLine("License#: " + thisCar.licenseNumber + "\n"); // Serializes the class and closes the
TextWriter. mySerializer.Serialize(writer, myGroup); writer.Close(); } public void SerializeOverride(string
filename) { // Creates an instance of the XmlSerializer class // that overrides the serialization. XmlSerializer
overRideSerializer = CreateOverrideSerializer(); // Writing the file requires a TextWriter. TextWriter writer
= new StreamWriter(filename); // Creates an instance of the class that will be serialized. Group myGroup =
new Group(); // Sets the object properties. myGroup.GroupName = ".NET"; Byte [] hexByte = new
Byte[2]{Convert.ToByte(100), Convert.ToByte(50)}; myGroup.GroupNumber = hexByte; DateTime myDate
= new DateTime(2002,5,2); myGroup.Today = myDate; myGroup.PostitiveInt= "10000";
myGroup.IgnoreThis=true; myGroup.Grouptype= GroupType.small; Car thisCar =(Car)
myGroup.myCar("1234566"); // Serializes the class and closes the TextWriter.
overRideSerializer.Serialize(writer, myGroup); writer.Close(); } public void DeserializeOriginal(string
filename) { // Creates an instance of the XmlSerializer class. XmlTypeMapping myMapping = (new
SoapReflectionImporter().ImportTypeMapping( typeof(Group))); XmlSerializer mySerializer = new
XmlSerializer(myMapping); TextReader reader = new StreamReader(filename); // Deserializes and casts the
object. Group myGroup; myGroup = (Group) mySerializer.Deserialize(reader);
Console.WriteLine(myGroup.GroupName); Console.WriteLine(myGroup.GroupNumber[0]);
Console.WriteLine(myGroup.GroupNumber[1]); Console.WriteLine(myGroup.Today);
Console.WriteLine(myGroup.PostitiveInt); Console.WriteLine(myGroup.IgnoreThis); Console.WriteLine(); }
public void DeserializeOverride(string filename) { // Creates an instance of the XmlSerializer class.
XmlSerializer overRideSerializer = CreateOverrideSerializer(); // Reading the file requires a TextReader.
TextReader reader = new StreamReader(filename); // Deserializes and casts the object. Group myGroup;
myGroup = (Group) overRideSerializer.Deserialize(reader); Console.WriteLine(myGroup.GroupName);
Console.WriteLine(myGroup.GroupNumber[0]); Console.WriteLine(myGroup.GroupNumber[1]);
Console.WriteLine(myGroup.Today); Console.WriteLine(myGroup.PostitiveInt);
Console.WriteLine(myGroup.IgnoreThis); } private XmlSerializer CreateOverrideSerializer() {
SoapAttributeOverrides mySoapAttributeOverrides = new SoapAttributeOverrides(); SoapAttributes
soapAtts = new SoapAttributes(); SoapElementAttribute mySoapElement = new SoapElementAttribute();
mySoapElement.ElementName = "xxxx"; soapAtts.SoapElement = mySoapElement;
mySoapAttributeOverrides.Add(typeof(Group), "PostitiveInt", soapAtts); // Overrides the IgnoreThis
property. SoapIgnoreAttribute myIgnore = new SoapIgnoreAttribute(); soapAtts = new SoapAttributes();
soapAtts.SoapIgnore = false; mySoapAttributeOverrides.Add(typeof(Group), "IgnoreThis", soapAtts); //
Overrides the GroupType enumeration. soapAtts = new SoapAttributes(); SoapEnumAttribute xSoapEnum =
new SoapEnumAttribute(); xSoapEnum.Name = "Over1000"; soapAtts.SoapEnum = xSoapEnum; // Adds
the SoapAttributes to the // mySoapAttributeOverridesrides.
Visual C# Consolidado
691
Visual C# Consolidado
692
2.
3.
4.
Exemplo
O exemplo de cdigo a seguir usa a CultureAndRegionInfoBuilder classe para definir e registrar
uma cultura personalizado chamado " x trao US--, amostra " e ento cria um CultureInfo objeto
para a cultura " x trao US--" amostras. O exemplo de cdigo tambm mostra algumas
propriedades correspondentes do e CultureInfo Objetos. o CultureAndRegionInfoBuilder
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);
Visual C# Consolidado
693
Visual C# Consolidado
694
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)};
3.
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);
6.
Visual C# Consolidado
695
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);
5.
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.
C#
Visual C# Consolidado
696
Exemplo
O exemplo de cdigo a seguir demonstra um mtodo dinmico simples e um mtodo dinmico
vinculado a uma instncia de uma classe.
O mtodo dinmico simples leva um argumento, um inteiro de 32 bits, e retorna o quadrado 64
bits do que inteiro. Um representante genrico usado para chamar o mtodo.
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}",
Visual C# Consolidado
697
Compilando o cdigo
Obter uma instncia do Type que representa o tipo genrico. No cdigo a seguir, o tipo
obtido usando o operador C# typeof (GetType no Visual Basic, typeid no Visual C++.)
Visual C# Consolidado
698
Consulte o Type tpico de classe para outras maneiras de se obter um Type objeto.
Observe que no restante deste procedimento, o tipo est contido em um parmetro mtodo
chamado t.
C#
Type d1 = typeof(Dictionary<,>);
2.
3.
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);
6.
7.
Visual C# Consolidado
699
8.
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)};
3.
Visual C# Consolidado
700
C#
Type constructed = d1.MakeGenericType(typeArgs);
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 a seguir define um DisplayGenericType mtodo para examinar a definies
tipo genrico e construdos tipos usados no cdigo e exibir suas informaes. Mostra como usar o
DisplayGenericType mtodo a IsGenericType, IsGenericParameter., e GenericParameterPosition
propriedades e o GetGenericArguments mtodo
O exemplo tambm define um DisplayGenericParameter mtodo para examinar um parmetro tipo
genrico e exibir suas restries.
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
Visual C# Consolidado
701
Compilando o cdigo
Visual C# Consolidado
702
Antes de comear, ela til para examinar como o mtodo genrico aparece quando
gravados usando uma linguagem de alto nvel. O cdigo a seguir includo no cdigo de
exemplo para este tpico, juntamente com cdigo para chamar o mtodo genrico. O
mtodo tem dois parmetros Tipo, TInput e TOutput, o segundo dos quais deve ser um tipo
de referncia (new deve ter um construtor sem parmetros (class).),, e deve implementar
ICollection(Of TInput) em C#) (ICollection<TInput> Esta restrio interface assegura que o
System.Collections.Generic.ICollection.Add( mtodo pode ser usado para adicionar
elementos coleo TOutput que cria o mtodo. O mtodo tem um parmetro formal, input,.
que uma matriz de TInput O mtodo cria um conjunto de tipo TOutput e copia os
elementos de input coleo.
C#
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; }
2.
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);
4.
Visual C# Consolidado
703
5.
6.
7.
8.
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
Visual C# Consolidado
704
Quando voc emitir chamadas para mtodos de tipos genricos e os argumentos os tipo desses
tipos so parmetros tipo do mtodo genrico, voc deve usar o static GetConstructor,
GetMethod., e GetField overloads mtodo da classe TypeBuilder para obter formas dos mtodos
construdo O procedimento de acompanhamento de emissor o corpo de mtodo demonstra isso.
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 armazenlo 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);
4.
Visual C# Consolidado
705
5.
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);
Factory uma definio Mtodo genrico. A fim de cham-lo, voc deve atribuir tipos aos
seus parmetros tipo genrico. Use o MakeGenericMethod mtodo para fazer isso. O
Visual C# Consolidado
706
cdigo a seguir cria um mtodo genrico construdo, especificando String para TInput e
List(Of String). (List<string>) para TOutput, em C# e exibe uma representao de seqncia
do mtodo
C#
MethodInfo m = dt.GetMethod("Factory"); MethodInfo bound =
m.MakeGenericMethod(typeof(string), typeof(List<string>)); // Display a string representing the
bound method. Console.WriteLine(bound);
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.
Quando o cdigo executado, o conjunto dinmico salvo como DemoGenericMethod1.dll, e
pode ser examinado usando o Disassembler MSIL (Ildasm.exe).
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++.
Visual C# Consolidado
707
O exemplo de cdigo inclui cdigo de fonte que equivalente ao mtodo emitted. O mtodo
emitted chamado vinculados as e tambm usando um representante genrico declarada no
exemplo de cdigo.
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 =
Visual C# Consolidado
708
Visual C# Consolidado
709
in an array of objects // representing the arguments. In this case, there is only // one element in that array,
the argument 'arr'. // object o = bound.Invoke(null, new object[]{arr}); List<string> list2 = (List<string>) o;
Console.WriteLine("The first element is: {0}", list2[0]); // You can get better performance from multiple
calls if // you bind the constructed method to a delegate. The // following code uses the generic delegate D
defined // earlier. // 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]); } } /* This code example produces the following
output: The first element is: a System.Collections.Generic.List`1[System.String]
Factory[String,List`1](System.String[]) The first element is: a The first element is: a */
Compilando o cdigo
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);
Visual C# Consolidado
710
2.
3.
4.
Exemplo
O exemplo de cdigo a seguir mostra como examinar os atributos aplicados a um conjunto
carregado do contexto somente Reflection-.
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-.
Visual C# Consolidado
711
C#
using System; using System.Reflection; using System.Collections.Generic; // The example attribute is
applied to the assembly. [assembly:Example(ExampleKind.ThirdKind, Note="This is a note on the
assembly.")] // An enumeration used by the ExampleAttribute class. public enum ExampleKind { FirstKind,
SecondKind, ThirdKind, FourthKind }; // An example attribute. The attribute can be applied to all // targets,
from assemblies to parameters. // [AttributeUsage(AttributeTargets.All)] public class ExampleAttribute :
Attribute { // Data for properties. private ExampleKind kindValue; private string noteValue; // Constructors.
The parameterless constructor (.ctor) calls // the constructor that specifies ExampleKind, and supplies the //
default value. // public ExampleAttribute(ExampleKind initKind) { kindValue = initKind; } public
ExampleAttribute() : this(ExampleKind.FirstKind) {} // Properties. The Note property must be read/write,
so that it // can be used as a named parameter. // public ExampleKind Kind { get { return kindValue; }}
public string Note { get { return noteValue; } set { noteValue = value; } } } // The example attribute is applied
to the test class. // [Example(ExampleKind.SecondKind, Note="This is a note on the class.")] public class
Test { // The example attribute is applied to a method, using the // parameterless constructor and supplying
a named argument. // The attribute is also applied to the method parameter. // [Example(Note="This is a
note on a method.")] public void TestMethod([Example] object arg) { } // Main() gets objects representing
the assembly, the test // type, the test method, and the method parameter. Custom // attribute data is
displayed for each of these. // public static void Main() { Assembly asm =
Assembly.ReflectionOnlyLoad("Source"); Type t = asm.GetType("Test"); MethodInfo m =
t.GetMethod("TestMethod"); ParameterInfo[] p = m.GetParameters(); Console.WriteLine("\r\nAttributes
for assembly: {0}", asm); ShowAttributeData(CustomAttributeData.GetCustomAttributes(asm));
Console.WriteLine("\r\nAttributes for type: {0}", t);
ShowAttributeData(CustomAttributeData.GetCustomAttributes(t)); Console.WriteLine("\r\nAttributes for
member: {0}", m); ShowAttributeData(CustomAttributeData.GetCustomAttributes(m));
Console.WriteLine("\r\nAttributes for parameter: {0}", p);
ShowAttributeData(CustomAttributeData.GetCustomAttributes(p[0])); } private static void
ShowAttributeData( IList<CustomAttributeData> attributes) { foreach( CustomAttributeData cad in
attributes ) { Console.WriteLine(" {0}", cad); Console.WriteLine(" Constructor: {0}", cad.Constructor);
Console.WriteLine(" Constructor arguments:"); foreach( CustomAttributeTypedArgument cata in
cad.ConstructorArguments ) { Console.WriteLine(" Type: {0} Value: {1}", cata.ArgumentType, cata.Value); }
Console.WriteLine(" Named arguments:"); foreach( CustomAttributeNamedArgument cana in
cad.NamedArguments ) { CustomAttributeTypedArgument cata = cana.TypedValue; Console.WriteLine("
MemberInfo: {0}", cana.MemberInfo); Console.WriteLine(" Type: {0} Value: {1}", cata.ArgumentType,
cata.Value); } } } } /* This code example produces output similar to the following: Attributes for assembly:
source, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null [ExampleAttribute((ExampleKind)2, Note
= "This is a note on the assembly.")] Constructor: Void .ctor(ExampleKind) Constructor arguments: Type:
ExampleKind Value: 2 Named arguments: MemberInfo: System.String Note Type: System.String Value: This
is a note on the assembly. [System.Runtime.CompilerServices.CompilationRelaxationsAttribute((Int32)8)]
Constructor: Void .ctor(Int32) Constructor arguments: Type: System.Int32 Value: 8 Named arguments:
Attributes for type: Test [ExampleAttribute((ExampleKind)1, Note = "This is a note on the class.")]
Constructor: Void .ctor(ExampleKind) Constructor arguments: Type: ExampleKind Value: 1 Named
arguments: MemberInfo: System.String Note Type: System.String Value: This is a note on the class.
Attributes for member: Void TestMethod(System.Object) [ExampleAttribute(Note = "This is a note on a
method.")] Constructor: Void .ctor() Constructor arguments: Named arguments: MemberInfo: System.String
Visual C# Consolidado
712
Note Type: System.String Value: This is a note on a method. Attributes for parameter: System.Object arg
[ExampleAttribute()] Constructor: Void .ctor() Constructor arguments: Named arguments: */
2.
3.
4.
Visual C# Consolidado
713
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);
6.
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
Visual C# Consolidado
714
named T. That Is Por que este exemplo de cdigo usa os nomes TFirst e TSecond). Para
obter o tipo de argumento de construtor, inicie com a definio IEnumerable<T> tipo
genrico e chamada MakeGenericType com o primeiro parmetro do List<T> tipo genrico.
A lista de argumentos de construtor deve ser passada como uma matriz, com apenas um
argumento, nesse caso.
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.
Agora possvel para obter o Construtor de List<T> chamando GetConstructor na
definio tipo genrico. Para converter esse construtor para o construtor de List<TFirst>,
secreta List<TFirst> correspondente e o Construtor de List<T> para o mtodo esttico
System.Reflection.Emit.TypeBuilder.GetConstructor(System.Type,System.Reflection.Constr
uctorInfo).
C#
ILGenerator ilgen = exMethod.GetILGenerator(); Type ienumOf = typeof(IEnumerable<>); Type
TfromListOf = listOf.GetGenericArguments()[0]; Type ienumOfT =
ienumOf.MakeGenericType(TfromListOf); Type[] ctorArgs = {ienumOfT}; ConstructorInfo ctorPrep
= listOf.GetConstructor(ctorArgs); ConstructorInfo ctor = TypeBuilder.GetConstructor(listOfTFirst,
ctorPrep); ilgen.Emit(OpCodes.Ldarg_0); ilgen.Emit(OpCodes.Newobj, ctor);
ilgen.Emit(OpCodes.Ret);
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
Visual C# Consolidado
715
O exemplo de cdigo a seguir define uma classe nomeado Sample, junto com uma classe base e
duas interfaces. O programa define dois parmetros tipo genrico para Sample, transformando-lo
em um tipo genrico. Parmetros tipo so a nica coisa que faz um tipo genrica. O programa
mostra isso, exibindo uma mensagem de teste antes e depois a definio de tipo os parmetros.
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.
Depois que a Sample classe foi criada, o mtodo chamado.
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.
Do Disassembler MSIL (Ildasm.exe) o programa salvar o mdulo terminado em disco como
GenericEmitExample1.dll, para que voc possa abri-lo com e examine o MSIL para a Sample classe.
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
Visual C# Consolidado
716
ExampleBase. The // interface constraints are specified as an array // containing the interface types.
TSecond.SetBaseTypeConstraint(baseType); Type[] interfaceTypes = {interfaceA, interfaceB};
TSecond.SetInterfaceConstraints(interfaceTypes); // The following code adds a private field named
ExampleField, // of type TFirst. FieldBuilder exField = myType.DefineField("ExampleField", TFirst,
FieldAttributes.Private); // Define a static method that takes an array of TFirst and // returns a List<TFirst>
containing all the elements of // the array. To define this method it is necessary to create // the type
List<TFirst> by calling MakeGenericType on the // generic type definition, List<T>. (The T is omitted with
// the typeof operator when you get the generic type // definition.) The parameter type is created by using
the // MakeArrayType method. // Type listOf = typeof(List<>); Type listOfTFirst =
listOf.MakeGenericType(TFirst); Type[] mParamTypes = {TFirst.MakeArrayType()}; MethodBuilder
exMethod = myType.DefineMethod("ExampleMethod", MethodAttributes.Public | MethodAttributes.Static,
listOfTFirst, mParamTypes); // Emit the method body. // The method body consists of just three opcodes, to
load // the input array onto the execution stack, to call the // List<TFirst> constructor that takes
IEnumerable<TFirst>, // which does all the work of putting the input elements into // the list, and to return,
leaving the list on the stack. The // hard work is getting the constructor. // // The GetConstructor method is
not supported on a // GenericTypeParameterBuilder, so it is not possible to get // the constructor of
List<TFirst> directly. There are two // steps, first getting the constructor of List<T> and then // calling a
method that converts it to the corresponding // constructor of List<TFirst>. // // The constructor needed
here is the one that takes an // IEnumerable<T>. Note, however, that this is not the // generic type
definition of IEnumerable<T>; instead, the // T from List<T> must be substituted for the T of //
IEnumerable<T>. (This seems confusing only because both // types have type parameters named T. That is
why this example // uses the somewhat silly names TFirst and TSecond.) To get // the type of the constructor
argument, take the generic // type definition IEnumerable<T> (expressed as // IEnumerable<> when you
use the typeof operator) and // call MakeGenericType with the first generic type parameter // of List<T>.
The constructor argument list must be passed // as an array, with just one argument in this case. // // Now it
is possible to get the constructor of List<T>, // using GetConstructor on the generic type definition. To get //
the constructor of List<TFirst>, pass List<TFirst> and // the constructor from List<T> to the static //
TypeBuilder.GetConstructor method. // ILGenerator ilgen = exMethod.GetILGenerator(); Type ienumOf =
typeof(IEnumerable<>); Type TfromListOf = listOf.GetGenericArguments()[0]; Type ienumOfT =
ienumOf.MakeGenericType(TfromListOf); Type[] ctorArgs = {ienumOfT}; ConstructorInfo ctorPrep =
listOf.GetConstructor(ctorArgs); ConstructorInfo ctor = TypeBuilder.GetConstructor(listOfTFirst, ctorPrep);
ilgen.Emit(OpCodes.Ldarg_0); ilgen.Emit(OpCodes.Newobj, ctor); ilgen.Emit(OpCodes.Ret); // Create the
type and save the assembly. Type finished = myType.CreateType();
myAssembly.Save(myAsmName.Name+".dll"); // Invoke the method. // ExampleMethod is not generic, but
the type it belongs to is // generic, so in order to get a MethodInfo that can be invoked // it is necessary to
create a constructed type. The Example // class satisfies the constraints on TFirst, because it is a // reference
type and has a default constructor. In order to // have a class that satisfies the constraints on TSecond, //
this code example defines the ExampleDerived type. These // two types are passed to MakeGenericMethod to
create the // constructed type. // Type[] typeArgs = {typeof(Example), typeof(ExampleDerived)}; Type
constructed = finished.MakeGenericType(typeArgs); MethodInfo mi =
constructed.GetMethod("ExampleMethod"); // Create an array of Example objects, as input to the generic //
method. This array must be passed as the only element of an // array of arguments. The first argument of
Invoke is // null, because ExampleMethod is static. Display the count // on the resulting List<Example>. //
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); DisplayGenericParameters(finished); } private static void
Visual C# Consolidado
717
Compilando o cdigo
Visual C# Consolidado
718
Permisses suficientes para poder para criar e executar projetos do aplicativo Windows
Forms no computador onde o .NET Framework instalado.
Para implementar uma classe derivada de DesignerActionList
1.
No mesmo espao para nome que o componente, adicione a declarao para a classe
derivada de DesignerActionList.
C#
Visual C# Consolidado
719
2.
Adicionar um construtor a esta classe que leva uma instncia do controle associado.
Fornecer um campo particular para manter uma referncia a essa instncia. Tambm
fornecer um campo particular para cache uma referncia DesignerActionService. Isso
ser usado para atualizar a lista.
C#
private ColorLabel colLabel;
C#
private DesignerActionUIService designerActionUISvc = null;
C#
public ColorLabelActionList( IComponent component ) : base(component) { this.colLabel =
component as ColorLabel; // Cache a reference to DesignerActionUIService, so the //
DesigneractionList can be refreshed. this.designerActionUISvc =
GetService(typeof(DesignerActionUIService)) as DesignerActionUIService; }
3.
Adicionar mtodos e propriedades que voc deseja associar aos itens de marcas
inteligentes. Mtodos sero executados quando sua entrada de marca inteligente
correspondente selecionada. Propriedades devem ter sees Getter para que seu valor
atual seja exibido; eles opcionalmente podem ter sees setter que use o GetProperties
mtodo se seus valores tiverem que ser editvel da entrada de marca inteligente
correspondente.
Observao
Como o caso em todo o ambiente Design-time, uma propriedade capaz de sendo editados
somente se um dos tipos base fornecida pelo .NET Framework, o tipo pode ser convertido em
um tipo base por um fornecido TypeConverter, ou quando um personalizado UITypeEditor
fornecido.
C#
public Color ForeColor { get { return colLabel.ForeColor; } set {
GetPropertyByName("ForeColor").SetValue(colLabel, value); } }
C#
// Boolean properties are automatically displayed with binary // UI (such as a checkbox). public bool
LockColors { get { return colLabel.ColorLocked; } set {
GetPropertyByName("ColorLocked").SetValue(colLabel, value); // Refresh the list.
this.designerActionUISvc.Refresh(this.Component); } }
C#
public void InvertColors() { Color currentBackColor = colLabel.BackColor; BackColor = Color.FromArgb(
255 - currentBackColor.R, 255 - currentBackColor.G, 255 - currentBackColor.B); Color currentForeColor
= colLabel.ForeColor; ForeColor = Color.FromArgb( 255 - currentForeColor.R, 255 - currentForeColor.G,
255 - currentForeColor.B); }
4.
Visual C# Consolidado
720
ordem dos itens, categoriz-los, ou opcionalmente mostr-las. A lista tambm pode incluir
estticos itens, como ttulos grupo lgico.
C#
public override DesignerActionItemCollection GetSortedActionItems() {
DesignerActionItemCollection items = new DesignerActionItemCollection(); //Define static section
header entries. items.Add(new DesignerActionHeaderItem("Appearance")); items.Add(new
DesignerActionHeaderItem("Information")); //Boolean property for locking color selections.
items.Add(new DesignerActionPropertyItem("LockColors", "Lock Colors", "Appearance", "Locks the
color properties.")); if (!LockColors) { items.Add(new DesignerActionPropertyItem("BackColor",
"Back Color", "Appearance", "Selects the background color.")); items.Add(new
DesignerActionPropertyItem("ForeColor", "Fore Color", "Appearance", "Selects the foreground
color.")); //This next method item is also added to the context menu // (as a designer verb).
items.Add(new DesignerActionMethodItem(this, "InvertColors", "Invert Colors", "Appearance",
"Inverts the fore and background colors.", true)); } items.Add(new
DesignerActionPropertyItem("Text", "Text String", "Appearance", "Sets the display text.")); //Create
entries for static Information section. StringBuilder location = new StringBuilder("Location: ");
location.Append(colLabel.Location); StringBuilder size = new StringBuilder("Size: ");
size.Append(colLabel.Size); items.Add(new DesignerActionTextItem(location.ToString(),
"Information")); items.Add(new DesignerActionTextItem(size.ToString(), "Information")); return
items; }
Localize a classe Designer para o controle. Se um no existir, crie uma classe designer e
associ-la para a classe de controle. Para obter mais informaes sobre designers,
consulte Base classes do criador.
2.
3.
Comentrios
Vrias reas do cdigo merece uma explicao mais detalhada:
Visual C# Consolidado
721
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.
Visual C# Consolidado
722
Configurar a extenso SOAP a ser executada com mtodos de servio da Web especficos.
Pr-requisitos
Derivar de SoapExtension uma classe.
A classe que deriva de SoapExtension a classe que executa a funcionalidade da extenso
SOAP. Isto , se a extenso SOAP uma criptografia extenso SOAP, ento a classe que deriva
da classe SoapExtension executar a criptografia e descriptografia correspondente.
Salvar referncias a objetos fluxo Representing mensagens SOAP futuros
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.
2.
3.
Para obter um exemplo de uma implementao do mtodo ChainStream, comuns Consulte Como
implementar o mtodo ChainStream para salvar referncias a objetos do fluxo:.
Inicializar dados especficos extenso SOAP
A classe que deriva de SoapExtension tem dois mtodos para inicializar dados, GetInitializer e
Initialize.
Agora que a infra-estrutura ASP.NET chama o GetInitializer mtodo, e os parmetros so
passados para o mtodo, dependem do modo como a extenso SOAP configurado. (See SOAP
Message Modification Using SOAP Extensions and Configure the SOAP Extension to Run with
Web Service Methods.
723
1.
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:.
Processar o mensagens SOAP
A classe derivada de SoapExtension, no pedao principais de implementao o
ProcessMessage mtodo. Este mtodo chamado vrias vezes pelo ASP.NET em cada um dos
estgios definido na SoapMessageStage enumerao.
Visual C# Consolidado
724
2.
3.
2.
2.
Criar uma classe que implementa o servio da Web. A classe opcionalmente pode derivar
a partir da WebService classe.
3.
4.
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.
Visual C# Consolidado
725
Observao
Se voc no especificar um conjunto da @ WebService diretiva, ento ASP.NET pesquisar pela
lista de conjuntos de mdulos (assemblies) no diretrio \Bin do aplicativo da Web que est
hospedando a hora do servio na primeira Web o servio da Web acessada. Portanto, voc
melhora o desempenho para o primeiro acesso, fornecendo o nome conjunto.
Derivar da classe WebService
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
Visual C# Consolidado
726
altamente recomendvel que este espao para nome padro, que http://tempuri.org, ser
alterado antes do XML Web Service seja feita publicamente consumo. This is important because
the XML Web service must be distinguished from other XML Web services that might inadvertently
use the namespace as the default (<http://tempuri.org/>).
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; } }
Visual C# Consolidado
727
Voc pode executar as aes a seguir para qualquer controle que oferea suporte modelos. Este
exemplo usa o List controle.
Para selecionar um filtro do dispositivo
1.
Arraste o List controle de ou Panel controle em uma pgina mvel formulrios da Web
ASP.NET. para a Toolbox uma Form
2.
3.
Na lista Applied Device Filter drop-down, escolha o filtro do dispositivo que voc deseja
configurar. Se voc desejar editar a associar modelos com este filtro, clique no Close boto
e siga as etapas no Criando e editando modelos. Se o filtro que voc deseja usar no
estiver na lista, clique no Edit boto para adicionar filtros para a lista de filtros do dispositivo
aplicado. Isso abrir a Aplicado filtros do dispositivo caixa de dilogo.
4.
Se voc precisa para criar um novo filtro, clique no Edit boto. Na caixa Editor de filtro do
dispositivo de dilogo, faa o seguinte:
5.
1.
2.
3.
4.
5.
Do Up Arrow uso e Down Arrow Botes para definir a ordem na qual os filtros do
dispositivo so salvos no arquivo de configurao (web.config) do aplicativo.
6.
Use a Available Device Filters Lista suspensa para selecionar o filtro do dispositivo ou
filtros que voc deseja usar. A Available Device Filters lista mostra todos os filtros do
dispositivo definidos no nvel do aplicativo.
Visual C# Consolidado
728
6.
Clique no Add to List boto. O filtro dispositivo selecionado agora parte da lista Applied
Device Filters e pode ser usado para criar modelos.
7.
8.
Do Up Arrow uso e Down Arrow Botes para ordenar os filtros aplicados do dispositivo.
Em tempo de execuo, os filtros so testados um por um da parte superior parte inferior.
O primeiro filtro que resulta em uma avaliao xito do dispositivo determina quais modelos
sero usados.
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.
9.
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.
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
As informaes especificadas no campo Markup Schema usado somente pelo designer e no
tem efeito em tempo de execuo. O esquema fornecer corretos IntelliSense Microsoft e sintaxe
check in Modo HTML.
3.
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
Visual C# Consolidado
729
1.
Para este exemplo, selecione Edit Template no menu de atalho e depois escolha Header
and Footer Templates. Do Header Template o List controle na sua formulrios da Web
mveis pgina exibe e Footer Template caixas.
2.
Opcionalmente, digite texto literal para o cabealho na caixa Header Template, e para o
rodap na caixa Footer Template . Como alternativa, voc pode arrastar controles de ou
Footer Template caixas., como um Label controle, para o Toolbox, o Header Template
3.
2.
4.
Type in a string of characters that you want to use for an item separator; for
example, hyphens (----------).
5.
Quando voc tiver terminado, selecione End Template Editing no menu de atalho.
Na caixa Property Overrides de dilogo, o Applied Device Filter posicionamento emPara Baixo lista, clique no filtro do dispositivo que voc deseja aplicar; por exemplo,
isHTML32.
2.
Agora a Property Overrides caixa de dilogo mostra as propriedades que voc pode
substituir. Configurar quaisquer propriedades que voc deseja alterar para que o Applied
Device Filter esteja exibido na parte superior da caixa de dilogo.
Visual C# Consolidado
730
elementos ao descrio do servio para informar aos clientes que uma extenso SOAP deve
executar, e o SDFE pode estender o proxy classe processo gerao para adicionar um atributo
personalizado para a classe proxy, que faz com a classe para executar a extenso SOAP.
Durante essa explicao passo a passo, voc aprender como:
1.
2.
3.
4.
5.
2.
3.
Visual C# Consolidado
731
Binding
OperationBinding
InputBinding
OutputBinding
FaultBinding
Port
Operation
4.
5.
Visual C# Consolidado
732
C#
private Boolean reverse; [XmlElement("Reverse")] public Boolean Reverse { get { return reverse; } set
{ reverse = value; } }
2.
3.
4.
5.
733
1.
2.
3.
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.
2.
Visual C# Consolidado
734
3.
2.
3.
Observao
Visual C# Consolidado
735
O mtodo gerado na classe proxy usado por um aplicativo cliente se comunicar com o servio
da Web, caso se um SDFE adiciona um atributo que reside em um conjunto do qual o aplicativo
cliente no notificado, um erro do compilador gerado. Para resolver o erro do compilador,
adicionar uma referncia ao conjunto que contm o atributo se usando Visual Studio. NET, ou
adicione montagem para a linha de comando do compilador se usando compilao de linha de
comando.
Visual C# Consolidado
736
1.
Abra um .NET Framework Prompt de comando SDK, e altere para o diretrio em que voc
ir armazenar os ClickOnce arquivos.
2.
Crie uma subpasta chamada bin e coloque todos os seus arquivos do aplicativo Incluindo
arquivos executveis, conjuntos, recursos, e arquivos de dados aqui,
3.
Crie uma subpasta chamada aps a verso atual do sua implantao. Se esta for a
primeira vez voc estiver implantando o aplicativo, voc provavelmente escolher 1.0.0.0.
Observao
A verso da sua implantao pode estar distintas da verso dos arquivos do aplicativo.
4.
5.
6.
7.
Gerar o manifesto de implantao com uma chamada para Mage.exe. Por padro,
Mage.exe ir, marcar a implantao ClickOnce como um aplicativo instalado, para que ele
pode ser executado tanto online e offline. Para tornar o aplicativo disponvel somente
quando o usurio est online, usar o -i Sinalizador com um valor de f. Se voc usar o
padro, e usurios ir instalar um aplicativo de um site da Web ou compartilhamento de
arquivo, certifique-se o valor dos pontos de sinalizador providerUrl para o local do manifesto
de aplicativo no servidor Web ou compartilhamento -.
mage -New Deployment -ToFile WindowsFormsApp1.application -Name "Windows Forms App 1" Version 1.0.0.0 -AppManifest 1.0.0.0\WindowsFormsApp1.manifest -providerUrl
http://www.adatum.com/WindowsFormsApp1/WindowsFormsApp1.application
8.
9.
Copie todo dos arquivos na pasta atual incluindo a pasta de verso e a pasta \bin
para o destino de implantao. Isso pode ser qualquer uma pasta em um site da Web ou
FTP site, um compartilhamento de arquivo, ou um CD.
10. Fornecer os usurios com a URL, UNC ou mdia fsica necessria para instalar um
aplicativo. Se voc est fornecendo um URL ou UNC, voc deve atribuir os usurios o
caminho completo o manifesto de implantao. Por exemplo, caso WindowsFormsApp1
seja implantado para http://webserver01/ no diretrio WindowsFormsApp1, o caminho
completo URL seria http://webserver01/WindowsFormsApp1/WindowsFormsApp1.Deploy.
Implantando o aplicativo com a ferramenta Grfico MageUI.exe
1.
Abra um .NET Framework Prompt de comando SDK, e navegue para a pasta em que voc
ir armazenar os ClickOnce arquivos.
2.
Crie uma subpasta chamada bin e coloque todos os seus arquivos do aplicativo Incluindo
arquivos executveis, conjuntos, recursos, e arquivos de dados aqui.
3.
Crie uma subpasta chamada aps a verso atual do sua implantao. Se esta for a
primeira vez voc estiver implantando o aplicativo, voc provavelmente escolher 1.0.0.0.
Visual C# Consolidado
737
Observao
A verso da sua implantao pode estar distintas da verso dos arquivos do aplicativo.
4.
Mover o: \ bin diretrio para a pasta que voc criou na etapa 2, e inicie a ferramenta
grfica
MageUI.exe
5.
6.
7.
Selecione a Files guia e clique no Browse... boto prximo caixa de texto Diretrio
aplicativo.
8.
Selecione a pasta que contm os arquivos do aplicativo que voc criou na etapa 2, e clique
OK na pasta Caixa de dilogo de seleo.
9.
Clique no Populate boto para adicionar todos os arquivos do aplicativo lista da arquivo.
Se seu aplicativo contm mais de um arquivo executvel, marcar o arquivo executvel
principal para essa implantao como o aplicativo de inicializao, selecionar Entry Point
na lista File Type drop-down. MageUI.exe (se seu aplicativo s contm um arquivo
executvel, ser marc-la para voc.)
10. Selecione a Permissions Required guia e selecione o nvel de confiana voc precisa seu
aplicativo para declarar. O padro Full Trust, que ser adequado para a maioria dos
aplicativos.
11. Selecione File, Save no menu, e salve o manifesto de aplicativo. Voc ser solicitado para
assinar o manifesto de aplicativo quando voc salv-lo.
12. Se voc tiver um certificado armazenado como um arquivo no seu sistema de arquivos,
use a Sign as certificate file opo, e selecione o certificado do sistema de arquivos
usando o ... boto.
OuSe o certificado mantido em um armazenamento de certificados acessvel de sua
mquina, selecione e selecione o certificado na lista fornecida. o Sign with stored
certificate option,
13. Selecionar File, New, Deployment Manifest no menu para criar sua implantao
manifesto, e em seguida, na guia Name, fornea um nome e verso nmero, neste exemplo
(1.0.0.0).
14. Selecione a Publisher guia e fornecer valores para Publisher e Product. ( Product is the
name given your application on the Windows Start menu when you install your application
locally.)
15. Alterne para a Update guia, e especifique a freqncia voc deseja este aplicativo para
atualizar. Se o aplicativo usa a ClickOnce API de implantao para verificar se h
atualizaes propriamente dito, desmarque a caixa de seleo rotulada This application
should check for updates.
16. Alternar para a Application Reference guia. Voc pode preencher todos os valores nesta
guia, clicando no Select Manifest boto e selecionando o aplicativo manifesto voc criou
nas etapas anteriores.
17. Escolha Save e salvar o manifesto de implantao em disco. Voc ser solicitado para
assinar o manifesto de aplicativo quando voc salv-lo.
Visual C# Consolidado
738
18. Se voc tiver um certificado armazenado como um arquivo no seu sistema de arquivos,
use a Sign as certificate file opo, e selecione o certificado do sistema de arquivos
usando o ... boto.
OuSe o certificado mantido em um armazenamento de certificados acessvel de sua
mquina, selecione e selecione o certificado na lista fornecida. o Sign with stored
certificate option,
19. Copiar todos os arquivos na pasta atual, incluindo a pasta de verso e a pasta para o
destino de implantao. \ bin Isso pode ser qualquer uma pasta em um site da Web ou FTP
site, um compartilhamento de arquivo, ou um CD.
20. Fornecer os usurios com a URL, UNC ou mdia fsica necessria para instalar um
aplicativo. Se voc est fornecendo um URL ou UNC, voc deve atribuir os usurios o
caminho completo o manifesto de implantao. Por exemplo, caso WindowsFormsApp1
seja implantado para http://webserver01/ no diretrio WindowsFormsApp1, o caminho
completo URL seria http://webserver01/WindowsFormsApp1/WindowsFormsApp1.Deploy.
Prximas etapas
Quando voc precisa implantar uma nova verso do aplicativo, precisar criar uma nova pasta
chamada aps a nova verso por exemplo, 1.1.0.0and move the new application files into a
\bin pasta em que novo diretrio. Voc deve gerar um novo manifesto de aplicativo e armazeneno novo diretrio, e ter o editor assinar o novo manifesto. Aps voc obter o manifesto assinado
de volta, voc pode usar Mage.exe para atualizar o manifesto de implantao e aponte-lo no novo
manifesto de aplicativo:
mage -Update WindowsFormsApp1.application -Version 1.1.0.0 -AppManifest
1.1.0.0\WindowsFormsApp1.exe.manifest
Usurios MageUI.exe podem efetuar a mesma operao, abrindo o seu manifesto de implantao,
selecione a Application Reference guia e selecionar o Select Manifest boto novamente.
Aps atualizar o aplicativo manifesto referncia, ser necessrio assinar novamente o manifesto
de implantao, como alterar um manifesto de alguma forma invalida a assinatura digital.
1.
Visual C# Consolidado
739
2.
3.
1.
Crie um novo arquivo usando o editor de texto e insira o cdigo a seguir, que cria um
aplicativo Windows Forms que baixa o conjunto ClickOnceOnDemand quando ele
necessrio.
Salve o arquivo como um Form1.cs ou Form1.vb. csc /target:exe
/reference:ClickOnceOnDemand.dll Form1.csvbc /target:exe /reference:ClickOnceOnDemand.dll
Form1.vb e compil-lo em um executvel
Para marcar conjuntos como opcionais em seu aplicativo ClickOnce usando o manifesto
gerao e ferramenta de edio-cliente grfico (MageUI.exe)
1.
2.
3.
3.
Quando o formulrio principal for exibida, pressione o Button. Voc deve ver uma
seqncia em uma janela caixa de mensagem que l " Hello, World! "
Visual C# Consolidado
740
Para copiar o cdigo nessa explicao passo a passo como uma lista simples, consulte COMO:
Criar um controle de formulrios do Windows que tira vantagem de recursos em tempo de criao.
Pr-requisitos
A fim de concluir este explicao passo a passo, ser necessrio:
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
C#
// This defines the possible values for the MarqueeBorder // control's LightShape property. public enum
MarqueeLightShape { Square, Circle }
Visual C# Consolidado
741
2.
Visual C# Consolidado
742
C#
public override object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object
value) { if (provider != null) { editorService = provider.GetService(
typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; } if (editorService != null) {
LightShapeSelectionControl selectionControl = new LightShapeSelectionControl(
(MarqueeLightShape)value, editorService); editorService.DropDownControl(selectionControl); value =
selectionControl.LightShape; } return value; }
Visual C# Consolidado
743
// This method indicates to the design environment that // the type editor will paint additional content in
the // LightShape entry in the PropertyGrid. public override bool GetPaintValueSupported(
ITypeDescriptorContext context) { return true; } // This method paints a graphical representation of the
// selected value of the LightShpae property. public override void PaintValue(PaintValueEventArgs e) {
MarqueeLightShape shape = (MarqueeLightShape)e.Value; using (Pen p = Pens.Black) { if (shape ==
MarqueeLightShape.Square) { e.Graphics.DrawRectangle(p, e.Bounds); } else {
e.Graphics.DrawEllipse(p, e.Bounds); } } }
C#
private MarqueeLightShape lightShapeValue; [Category("Marquee")] [Browsable(true)]
[EditorAttribute(typeof(LightShapeEditor), typeof(System.Drawing.Design.UITypeEditor))] public
MarqueeLightShape LightShape { get { return this.lightShapeValue; } set { this.lightShapeValue = value; } }
Visual C# Consolidado
744
Gravar um editor tipo UI com base em uma caixa de dilogo restrita em vez de um controle
de exibio.
Gravar um designer de seu controle personalizado. Para obter mais informaes, consulte
COMO: Criar um controle de formulrios do Windows que tira vantagem de recursos em tempo
de criao.
2.
Aplicar atributos para indicar como cada conjunto, classe, ou mtodo deve interagir com
funcionalidade com +.
Observao
No.NET Framework verso 1.1, a configurao de segurana do COM + habilitada por padro
se o ApplicationAccessControlAttribute atributo no est presente no conjunto. Isso uma
alterao no comportamento de .NET Framework verso 1.0.
C#
[assembly: ApplicationName("Calculator")] [assembly:
System.Reflection.AssemblyKeyFile("Calculator.snk")] [MustRunInClientContext] public class Calculator :
ServicedComponent { // Member definitions. }
3.
4.
5.
Visual C# Consolidado
745
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); } }
Compilando o cdigo
Este exemplo requer:
Compilando o cdigo
Este exemplo requer:
Visual C# Consolidado
746
C#
using System.EnterpriseServices; [ assembly: ApplicationName("BankComponent")] [ assembly:
ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")] public class Account : ServicedComponent {
static void Main() {} }
Compilando o cdigo
Este exemplo requer:
Referncias a espaos para nome do sistema e System.EnterpriseServices
2.
3.
2.
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; } }
Visual C# Consolidado
747
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(); } }
Visual C# Consolidado
748
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices Namespace espaos para nome
Compilando o cdigo
Este exemplo requer:
Referncias ao espao para nome System.EnterpriseServices.
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices espaos para nome.
Como Usar o Recurso BYOT (Bring Your Own Transaction - Traga sua Prpria Transao) do
COM+
Exemplo do cdigo
O procedimento e exemplo a seguir mostram como uma classe derivada da classe
ServicedComponent pode usar o recurso BYOT do COM + para acessar um coordenador
transaes distribudas (DTC). Para obter mais informaes como utilizar o recurso BYOT de
dentro do espao de nome System.EnterpriseServices, consulte BYOT (colocar seu prprio
Transaction).
Para criar um objeto que usa a transao de outro objeto.
1.
Definir uma classe que deriva da classe ServicedComponent, e expe uma propriedade
pblica que retorna o objeto transaes DTC com + atual. Por exemplo, no cdigo a seguir a
classe Base, herda a classe ServicedComponent e tem uma propriedade pblica que retorna
o objeto ContextUtil.Transaction para a transao COM + DTC atual no qual o objeto
instanciado.
Visual C# Consolidado
749
C#
using System.EnterpriseServices; public class Base : ServicedComponent { public Object Transaction {
get { return ContextUtil.Transaction; } } }
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;
3.
4.
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."); } }
750
Compilando o cdigo
Este exemplo requer:
Referncias ao espao para nome System.ServiceProcess.
Consulte tambm
Referncia
Compilando o cdigo
Este exemplo requer:
Referncias para o sistema e System.EnterpriseServices espaos para nome.
Consulte tambm
Referncia
Compilando o cdigo
Este exemplo requer:
Visual C# Consolidado
751
1.
2.
3.
4.
5.
Exemplo
C#
// ----------------------------------------------------------------- // TestApp.cs // Generate a Strong name: // sn -k
TestApp.snk // Compile the code: // csc /target:exe /r:System.EnterpriseServices.dll TestApp.cs // Run
TestApp: // start TestApp.exe // ----------------------------------------------------------------- using System; using
System.Runtime.CompilerServices; using System.EnterpriseServices; using System.Reflection;
//Registration details. //COM+ application name as it appears in the COM+ catalog. [assembly:
ApplicationName("TestApp")] //Strong name for assembly. [assembly:
AssemblyKeyFileAttribute("TestApp.snk")] [Transaction(TransactionOption.Required)] public class Account
: ServicedComponent { //Provides SetComplete behavior in the absence of exceptions. [AutoComplete]
public void Debit(int amount) { // Do some database work. Any exception thrown here aborts the //
transaction; otherwise, transaction commits. } } public class client { public static int Main() { Account
accountX = new Account(); accountX.Debit(100); return 0; } }
Compilando o cdigo
Visual C# Consolidado
752
Compilando o cdigo
Este exemplo requer:
Referncias a espaos para nome do sistema e System.EnterpriseServices.
2.
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); }
4.
Visual C# Consolidado
753
5.
Criar uma varivel cujo tipo de dados a interface na fila do qual a classe
componente enfileirado derivada.
C#
IQComponent iQc = null;
2.
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"); } } }
Definir uma interface de eventos. Por exemplo, o cdigo a seguir define uma interface de
evento denominada IlceMsg que tenha um mtodo chamado EventMethod.
C#
public interface ILceMsg { void EventMethod(string message); }
Visual C# Consolidado
754
2.
3.
4.
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"); }
Visual C# Consolidado
755
2.
3.
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(); } }
2.
3.
4.
Exemplo
Visual C# Consolidado
756
C#
using System; using System.EnterpriseServices; using System.Data; using System.Data.SqlClient; [assembly :
ApplicationName("OCDemo")] namespace OCDemo { [ConstructionEnabled(Default="Initial
Catalog=Northwind; Data Source=.\\SQLServerInstance;Trusted_Connection=yes")] public class
TestObjectConstruct : ServicedComponent { private string connectStr; SqlConnection conn; public
TestObjectConstruct() { } protected override void Construct(string constructString) { // Called after
constructor. connectStr = constructString; } public void ConnectToDatabase() { conn = new
SqlConnection(connectStr); conn.Open(); } } }
Visual C# Consolidado
757
Para criar um conjunto com uma extenso.exe e especificar o nome do arquivo de sada
No prompt de comando, digite o seguinte comando:
Visual C# Consolidado
758
conjuntos que voc deseja gerenciar pessoal. Voc tambm pode criar domnios de aplicativo do
qual voc executar cdigo.
Criar um novo domnio do aplicativo usando um dos mtodos sobrecarregados CreateDomain na
classe System.AppDomain. Voc pode dar o domnio do aplicativo um nome e fazer referncia a
ela com esse nome.
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.
Do Disassembler MSIL (Ildasm.exe) para conjuntos de mdulos (assemblies) que no esto no
cache de conjunto global, voc pode usar cdigo para exibir as informaes para o console ou a
uma varivel, ou voc pode usar para examinar metadados do conjunto, que contm o nome
totalmente qualificado.
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
Visual C# Consolidado
759
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
Visual C# Consolidado
760
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.
Para exibir o contedo de um conjunto usando Ildasm.exe
Type ildasm <assembly name> at the command prompt. Por exemplo, o comando a seguir
desmonta o Hello.exe conjunto.
ildasm Hello.exe
Exemplo
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
<assembly name>
.assembly <assembly
name>
Visual C# Consolidado
761
.subsystem <value>
corflags
Quando voc fazer uma referncia em tempo de execuo a um conjunto de nome seguro,
por exemplo, usando voc deve usar o nome de exibio do conjunto de nome seguro
referenciado. ou Assembly.GetType mtodos, o Assembly.Load A sintaxe de um nome de
exibio a seguinte:
Visual C# Consolidado
762
Por exemplo:
myDll, Version=1.1.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33
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>
Visual C# Consolidado
763
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),
Usando uma extenso do shell do Windows fornecido pelo SDK do .NET Framework
chamado o Visualizador cache do conjunto (Shfusion.dll).
A extenso do shell permite que voc a arrastar conjuntos para cache de conjunto global.
Para instalar um conjunto de nome seguro no cache de conjunto global usando a ferramenta
Global Assembly Cache (Gacutil.exe)
Visual C# Consolidado
764
Compilar todos os arquivos que contm espaos para nome referido por outros mdulos
na montagem em mdulos de cdigo. A extenso padro para mdulos de cdigo
.netmodule. Por exemplo, se criar um arquivo chamado Stringer espao para nome
chamada myStringer que referenciado no arquivo Cdigo do cliente, Stringer deve ser
compilado em um mdulo de cdigo primeiro.
2.
3.
Do Vinculador do conjunto (AL.exe) uso para criar o arquivo de sada que contm o
manifesto do conjunto. Esse arquivo contm informaes de referncia para todos os
mdulos ou recursos que fazem parte do conjunto.
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 C# Consolidado
765
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.
O exemplo a seguir mostra o cdigo para Client.
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(); } }
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
O C# e Visual Basic compiladores suportam diretamente criao usando as seguintes sintaxes
diferentes dois conjuntos de vrios arquivos.
Dois compilations criar um conjunto-dois arquivos:
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.
Visual C# Consolidado
766
Os module name argumentos neste comando, especifique o nome de cada mdulo para incluir
no conjunto. A /main: opo especifica o nome do mtodo que ponto de entrada do conjunto.
A /out: opo especifica o nome do arquivo de sada, que contm metadados do conjunto. A
/target: opo especifica que o conjunto um arquivo executvel (.exe) do aplicativo Console,
um arquivo executvel (.Win) do Windows, ou um arquivo biblioteca (.lib).
No exemplo a seguir, a Al.exe cria um conjunto que um aplicativo de console executvel
chamado myAssembly.exe. O aplicativo consiste de dois mdulos chamados Client.netmodule e
Stringer.netmodule. e o arquivo executvel chamado myAssembly.exe, que contm somente
metadados conjunto O ponto de entrada do conjunto o Main mtodo na classe MainClientApp,
que est localizado em Client.dll.
al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe
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.
Visual C# Consolidado
767
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:
Observao
Em ambientes de desenvolvimento, como Visual Studio, o conjunto no pode ser compilado no
diretrio do projeto. Por exemplo, algumas verses do Visual Studio Compilar projetos C# em um
bin\Debug subdiretrio. Nesse caso, o caminho no exemplo de cdigo seria ".. \\ \\sgKey.snk ". No
Visual Studio 2005 arquivo de chave no C# pode ser especificado nas configuraes do projeto.
Voc tambm pode atrasar assinar um conjunto durante a compilao. Para obter mais
informaes, consulte Atraso assinatura um conjunto.
Ao assinar um conjunto com um nome de alta segurana, a Vinculador do conjunto (AL.exe)
Aparncia da chave arquivos relativo para a pasta atual e para o diretrio de sada. Ao usar linha
comando compiladores, basta copiar a chave para a pasta atual que contm seus mdulos de
cdigo.
Visual C# Consolidado
768
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),
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
sn -p keypair.snk public.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.
Visual C# Consolidado
769
C#
[assembly: AssemblyKeyFileAttribute(@"..\..\key.snk")]
Como Incorporar Bibliotecas de Tipo como Recursos Win32 em Aplicativos Baseados no .NET
Voc pode compactar uma biblioteca de tipos como um arquivo separado ou incorpor-lo como
arquivo recurso Win32 dentro de um aplicativo baseado em .NET. O Microsoft Visual Basic 6.0
executado essa tarefa para voc automaticamente; no entanto, ao usar Microsoft Visual Basic
2005, voc deve incorporar sua biblioteca tipo manualmente.
Para incorporar uma biblioteca de tipos como um recurso do Win32 em um aplicativo baseado em
.NET
1.
Compilar o aplicativo gerenciado como um arquivo de biblioteca. Por exemplo, para criar
um conjunto para um aplicativo chamado MyApp, digite o seguinte comando no prompt de
comando:
C#
csc /t:library MyApp.cs
2.
Exportar um arquivo biblioteca tipo do seu conjunto usando o Tipo Exporter da biblioteca
(TlbExp.exe). No prompt de comando, digite o seguinte comando:
tlbexp MyApp.dll /out:mytypelib.tlb
3.
C#
csc /t:library MyApp.cs /win32res:myresource.res
Visual C# Consolidado
770
Neste comando, tlbfile o arquivo que contm a biblioteca de tipos COM, filename o nome do
recipiente ou arquivo que contm o par de chaves e assemblyname o nome da montagem
para entrar com um nome de alta segurana.
Conjuntos de interoperabilidade primrias podem referenciar apenas outros conjuntos de
interoperabilidade primrias. Se seu conjunto faz referncia tipos de uma biblioteca de tipos com
de terceiros, voc dever obter um conjunto interoperacional primrio do editor antes voc pode
gerar seu conjunto interoperacional primrio. Se voc for o editor, voc deve gerar um conjunto de
interoperabilidade primrio para a biblioteca de tipos dependente antes de gerar conjunto de
mdulos (assembly referncia o) de interoperabilidade primria.
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.
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /out:LibUtil.dll
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
tlbimp LibUtil.tlb /primary /keyfile:CompanyA.snk /namespace:CompanyA.LibUtil
/out:CompanyA.LibUtil.dll
2.
Visual C# Consolidado
771
1.
2.
3.
3.
C#
[assembly:AssemblyKeyFile(@"..\..\CompanyA.snk")] [assembly:Guid("97d25db0-0363-1cf-abc4-02608
c9e7553"] [assembly:PrimaryInteropAssembly(4, 2)] [assembly:PrimaryInteropAssembly(5, 2)]
Exemplo
O seguinte comando produz o conjunto Loanlib.DLL no espao para nome Loanlib.
tlbimp Loanlib.dll
Visual C# Consolidado
772
Definir a interface do coletor de eventos no cdigo gerenciado. Esta interface pode conter
um subconjunto dos eventos sourced por uma classe gerenciado. Os nomes mtodo da
interface deve ser a mesma os nomes de eventos.
2.
3.
Exportar o conjunto que contm a classe para uma biblioteca de tipos. Use API equivalente
ou Tipo Exporter da biblioteca (TlbExp.exe) um para exportar o conjunto.
4.
5.
Exemplo
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-337148dc-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") ]
Visual C# Consolidado
773
Definir um espao para nome de destino para os tipos em uma biblioteca com
explicitamente.
2.
3.
2.
3.
4.
Visual C# Consolidado
774
Para informaes sobre elementos manifesto e seus atributos, procure por " Reference
Manifests Application " na Biblioteca do MSDN.
3.
4.
5.
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 ".
3.
Visual C# Consolidado
775
4.
Descrio
Required
Clsid
Sim
description
No
name
Sim
ProgID
No
No
6.
No
7.
Visual C# Consolidado
776
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.
3.
4.
Exemplo
Visual C# Consolidado
777
C#
using System; using System.Runtime.InteropServices; public delegate bool CallBack(int hwnd, int lParam);
public class EnumReportApp { [DllImport("user32")] public static extern int EnumWindows(CallBack x, int
y); public static void Main() { CallBack myCallBack = new CallBack(EnumReportApp.Report);
EnumWindows(myCallBack, 0); } public static bool Report(int hwnd, int lParam) { Console.Write("Window
handle is "); Console.WriteLine(hwnd); return true; } }
Use o seguinte cdigo para criar uma nova classe de exceo chamado NoAccessException
e mape-lo para o HRESULT E_ACCESSDENIED.
C++
Class NoAccessException : public ApplicationException { NoAccessException () { HResult =
E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
Voc pode encontrar um programa (em qualquer linguagem de programao) que usa um cdigo
tanto gerenciados e no gerenciados ao mesmo tempo. Por exemplo, o empacotador
personalizado no exemplo de cdigo a seguir usa o Marshal.ThrowExceptionForHR(int
HResult) mtodo para acionar uma exceo com um valor HRESULT especfico. O mtodo
procura o HRESULT e gera o tipo de exceo apropriado. Por exemplo, o HRESULT no
fragmento de cdigo a seguir gera ArgumentException.
C++
CMyClass::MethodThatThrows { Marshal.ThrowExceptionForHR(COR_E_ARGUMENT); }
A tabela a seguir fornece o mapeamento completo de cada HRESULT sua classe de exceo
comparvel no .NET Framework.
HRESULT
Exceo .NET
Visual C# Consolidado
778
MSEE_E_APPDOMAINUNLOADED
AppDomainUnloadedException
COR_E_APPLICATION
ApplicationException
COR_E_ARGUMENT ou E_INVALIDARG
ArgumentException
COR_E_ARGUMENTOUTOFRANGE
ArgumentOutOfRangeException
COR_E_ARITHMETIC ou
ERROR_ARITHMETIC_OVERFLOW
ArithmeticException
COR_E_ARRAYTYPEMISMATCH
ArrayTypeMismatchException
COR_E_BADIMAGEFORMAT ou
ERROR_BAD_FORMAT
BadImageFormatException
COR_E_COMEMULATE_ERROR
COMEmulateException
COR_E_CONTEXTMARSHAL
ContextMarshalException
COR_E_CORE
CoreException
NTE_FAIL
CryptographicException
COR_E_DIRECTORYNOTFOUND ou
ERROR_PATH_NOT_FOUND
DirectoryNotFoundException
COR_E_DIVIDEBYZERO
DivideByZeroException
COR_E_DUPLICATEWAITOBJECT
DuplicateWaitObjectException
COR_E_ENDOFSTREAM
EndOfStreamException
COR_E_TYPELOAD
EntryPointNotFoundException
COR_E_EXCEPTION
Exceo
COR_E_EXECUTIONENGINE
ExecutionEngineException
COR_E_FIELDACCESS
FieldAccessException
COR_E_FILENOTFOUND ou
ERROR_FILE_NOT_FOUND
FileNotFoundException
COR_E_FORMAT
FormatException
COR_E_INDEXOUTOFRANGE
IndexOutOfRangeException
COR_E_INVALIDCAST ou E_NOINTERFACE
InvalidCastException
COR_E_INVALIDCOMOBJECT
InvalidComObjectException
COR_E_INVALIDFILTERCRITERIA
InvalidFilterCriteriaException
COR_E_INVALIDOLEVARIANTTYPE
InvalidOleVariantTypeException
COR_E_INVALIDOPERATION
InvalidOperationException
COR_E_IO
IOException
COR_E_MEMBERACCESS
AccessException
COR_E_METHODACCESS
MethodAccessException
COR_E_MISSINGFIELD
MissingFieldException
COR_E_MISSINGMANIFESTRESOURCE
MissingManifestResourceException
COR_E_MISSINGMEMBER
MissingMemberException
Visual C# Consolidado
779
COR_E_MISSINGMETHOD
MissingMethodException
COR_E_MULTICASTNOTSUPPORTED
MulticastNotSupportedException
COR_E_NOTFINITENUMBER
NotFiniteNumberException
E_NOTIMPL
NotImplementedException
COR_E_NOTSUPPORTED
NotSupportedException
OrE_POINTER COR_E_NULLREFERENCE
NullReferenceException
COR_E_OUTOFMEMORY ou
E_OUTOFMEMORY
OutOfMemoryException
COR_E_OVERFLOW
OverflowException
COR_E_PATHTOOLONG ou
ERROR_FILENAME_EXCED_RANGE
PathTooLongException
COR_E_RANK
RankException
COR_E_REFLECTIONTYPELOAD
ReflectionTypeLoadException
COR_E_REMOTING
RemotingException
COR_E_SAFEARRAYTYPEMISMATCH
SafeArrayTypeMismatchException
COR_E_SECURITY
SecurityException
COR_E_SERIALIZATION
SerializationException
OrERROR_STACK_OVERFLOW
COR_E_STACKOVERFLOW
StackOverflowException
COR_E_SYNCHRONIZATIONLOCK
SynchronizationLockException
COR_E_SYSTEM
SystemException
COR_E_TARGET
TargetException
COR_E_TARGETINVOCATION
TargetInvocationException
COR_E_TARGETPARAMCOUNT
TargetParameterCountException
COR_E_THREADABORTED
ThreadAbortException
COR_E_THREADINTERRUPTED
ThreadInterruptedException
COR_E_THREADSTATE
ThreadStateException
COR_E_THREADSTOP
ThreadStopException
COR_E_TYPELOAD
TypeLoadException
COR_E_TYPEINITIALIZATION
TypeInitializationException
COR_E_VERIFICATION
VerificationException
COR_E_WEAKREFERENCE
WeakReferenceException
COR_E_VTABLECALLSNOTSUPPORTED
VTableCallsNotSupportedException
COMException
Para recuperar informaes de erro estendidas, o cliente gerenciado deve examinar os campos do
objeto de exceo que foi gerado. Para o objeto de exceo para fornecer informaes teis
Visual C# Consolidado
780
sobre um erro, o objeto COM deve implementa a IErrorInfo interface. Tempo de Execuo utiliza
as informaes fornecidas por IErrorInfo para inicializar o objeto de exceo.
Se o objeto COM no oferece suporte IErrorInfo, o Runtime Inicializa um objeto de exceo com
valores padro. A tabela a seguir lista cada campo associado a um objeto de exceo e identifica
a fonte de informaes padro quando o objeto com oferece suporte IErrorInfo.
Observe que o Runtime s vezes ignorar uma HRESULT casos em onde h um IErrorInfo
presente no segmento. Este comportamento pode ocorrer em casos onde. e HRESULT o
IErrorInfo no representam o mesmo erro
Campo Exceo
ErrorCode
HelpLink
InnerException
Message
(Mensagem)
Origem
StackTrace
O rastreamento da pilha.
TargetSite
Gerar conjunto interoperacional inicial usando TLBIMP.exe. Por exemplo, para produzir um
conjunto chamado New.dll de New. TLB, digite o seguinte comando no prompt de comando:
tlbimp New.tlb /out:New.dll
2.
No prompt de comando, digite o seguinte comando para produzir MSIL para o conjunto:
ildasm New.dll /out:new.il
3.
4.
Visual C# Consolidado
781
Instale o arquivo exe ou dll com em seu computador, a menos que um instalar.exe do
Windows executa a instalao para voc.
2.
3.
4.
5.
Clique em OK.
2.
3.
4.
Consumir eventos da fonte de eventos COM da mesma maneira que consome eventos de
uma origem de evento gerenciado.
Exemplo
Visual C# Consolidado
782
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; } }
Declarar os tipos em um idioma que seja compatvel o com comum especificao (cls)
idioma e compilar o arquivo.
2.
Exportar o conjunto que contm os tipos com o Tipo Exporter da biblioteca (TlbExp.exe).
3.
Usar a biblioteca de tipos com exportado como uma base para declarar tipos gerenciados
orientado com.
Supondo que voc tiver um arquivo IDL ou arquivo biblioteca Tipo, decidir quais classes e
interfaces voc deseja incluir no RCW personalizado. Voc pode excluir qualquer tipos que
voc no pretende usar diretamente ou indiretamente em seu aplicativo.
Visual C# Consolidado
783
2.
3.
4.
Como com os tipos importados com TLBIMP.exe, algumas exigem informaes adicionais
que voc pode adicionar diretamente a seu cdigo. Para obter detalhes, consulte Como
editar conjuntos Interop:.
Exemplo
O cdigo a seguir mostra um exemplo da interface e ISATestSATest Classe em IDL e os tipos
correspondentes no cdigo fonte C#.
Arquivo de biblioteca IDL ou tipo
[ object, uuid(40A8C65D-2448-447A-B786-64682CBEF133), dual, helpstring("ISATest Interface"),
pointer_default(unique) ] interface ISATest : IDispatch { [id(1), helpstring("method InSArray")] HRESULT
InSArray([in] SAFEARRAY(int) *ppsa, [out,retval] int *pSum); }; [ uuid(116CCA1E-7E39-4515-984990790DA6431E), helpstring("SATest Class") ] coclass SATest { [default] interface ISATest; };
Visual C# Consolidado
784
Embora ele no seja necessrio para registrar conjuntos de interoperabilidade primrias a menos
que voc pretende usar Visual Studio, registro oferece duas vantagens:
Voc pode evitar acidentalmente gerar e usando um novo conjunto interoperacional se, em
algum momento no futuro, voc usar o Visual Studio para fazer referncia a um tipo para as
quais voc tem Conjunto de Mdulos (Assembly no registrado um) de interoperabilidade
primria.
regasm assemblyname
Neste comando, assemblyname o nome de arquivo do conjunto que est registrado.
RegAsm.exe adiciona uma entrada para o conjunto de interoperabilidade primrio sob a
mesma chave de Registro como a biblioteca tipo original.
Exemplo
O exemplo a seguir registra o CompanyA.UtilLib.dll conjunto de mdulos (assembly) de
interoperabilidade primria.
regasm CompanyA.UtilLib.dll
2.
3.
4.
Gerar e assinar um novo conjunto do arquivo de texto modificado por meio do Assembler
MSIL (Ilasm.exe):
ilasm LibUtil.il /dll /key:CompanyA.snk
Visual C# Consolidado
785
2.
Na caixa Class Name suspensa, selecione um dos controles que voc deseja que tem o
manipulador de eventos tratar.
3.
Na caixa Method Name suspensa, selecione um dos eventos que voc deseja
manipulador de eventos para manipular.
4.
O Editor de Cdigo insere o manipulador de eventos apropriado e posiciona o ponto de
insero dentro do mtodo. No exemplo abaixo, ele o Click evento para o Button controle.
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click ' Add event-handler code here. End Sub
5.
Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click, Button2.Click ' Add event-handler code here. End Sub
6.
Visual C# Consolidado
786
1.
2.
3.
).
4.
Na seo valor ao lado do nome de evento, clique no boto drop-down para exibir uma
lista de existente manipuladores de eventos que correspondem assinatura mtodo do evento
voc deseja manipular.
5.
Cdigo ser adicionado para o formulrio para vincular o evento ao manipulador de eventos
existentes.
2.
Criar um procedimento que define a interface do usurio. O cdigo a seguir define as
propriedades para que se ser o formulrio parecer com interface de usurio no Microsoft Outlook.
No entanto, ao usando outros controles ou encaixe-los de forma diferente, apenas to fcil para
criar outras interfaces de usurio que so igualmente flexveis.
C#
Visual C# Consolidado
787
public void createOutlookUI() { // Create an instance of each control being used. treeView1 = new
System.Windows.Forms.TreeView(); listView1 = new System.Windows.Forms.ListView(); richTextBox1 =
new System.Windows.Forms.RichTextBox(); splitContainer2 = new
System.Windows.Forms.SplitContainer(); splitContainer1 = new System.Windows.Forms.SplitContainer();
// Insert code here to hook up event methods. // Set properties of TreeView control. treeView1.Dock =
System.Windows.Forms.DockStyle.Fill; treeView1.TabIndex = 0; treeView1.Nodes.Add("treeView"); // Set
properties of ListView control. listView1.Dock = System.Windows.Forms.DockStyle.Top; listView1.TabIndex
= 2; listView1.Items.Add("listView"); // Set properties of RichTextBox control. richTextBox1.Dock =
System.Windows.Forms.DockStyle.Fill; richTextBox1.TabIndex = 3; richTextBox1.Text = "richTextBox1"; //
Set properties of first SplitContainer control. splitContainer1.Dock = System.Windows.Forms.DockStyle.Fil1;
splitContainer2.TabIndex = 1; splitContainer2.SplitterWidth = 4; splitContainer2.SplitterDistance = 150;
splitContainer2.Orientation = Orientation.Horizontal; splitContainer2.Panel1.Controls.Add(this.listView1);
splitContainer2.Panel1.Controls.Add(this.richTextBox1); // Set properties of second SplitContainer control.
splitContainer2.Dock = System.Windows.Forms.DockStyle.Fil1; splitContainer2.TabIndex = 4;
splitContainer2.SplitterWidth = 4; splitContainer2.SplitterDistance = 100;
splitContainer2.Panel1.Controls.Add(this.treeView1);
splitContainer2.Panel1.Controls.Add(this.splitContainer1); // Add the main SplitContainer control to the
form. this.Controls.Add(this.splitContainer2); this.Text = "Intricate UI Example"; }
3.
No Visual Basic, adicione uma chamada para o procedimento recm-criado no
procedimento New(). No Visual C#, adicione esta linha de cdigo para o construtor para a classe
formulrio.
C#
// Add this to the form class's constructor. createOutlookUI();
Visual C# Consolidado
788
2.
C#
// In this example, button1 is the control to display the ToolTip. toolTip1.SetToolTip(button1, "Save
changes");
2.
3.
Na janela Properties, defina o ToolTip on ToolTip1 valor como uma seqncia de texto
apropriada.
Visual C# Consolidado
789
Adiciona Visual Studio Todas as referncias para o controle no seu projeto. Para obter mais
informaes sobre o que tenha em mente ao usar controles ActiveX em Windows Forms, consulte
Consideraes ao hospedando um controle ActiveX em um formulrio do Windows.
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).
C#
// Set the letter "P" as an access key. button1.Text = "&Print";
Observao
To include an ampersand in a caption without creating an access key, include two ampersands
(&&). Um nico e comercial exibido na legenda e sem caracteres so sublinhados.
Visual C# Consolidado
790
O exemplo de cdigo a seguir aplica a qualquer controle que mantm um conjunto de controles
dentro dela.
Para adicionar um controle a uma coleo programaticamente
1.
2.
3.
O exemplo de cdigo a seguir mostra como criar uma instncia do controle Button. Ele requer um
formulrio com um Panel controle e que o mtodo tratamento de eventos para o boto sendo
criada NewPanelButton_Click,. j existe
C#
public Button newPanelButton = new Button(); public void addNewControl() { // The Add method will
accept as a parameter any object that derives // from the Control class. In this case, it is a Button control.
panel1.Controls.Add(newPanelButton); // The event handler indicated for the Click event in the code //
below is used as an example. Substite the appropriate event // handler for your application.
this.newPanelButton.Click += new System.EventHandler(this. NewPanelButton_Click); }
Use o Remove mtodo para excluir o controle desejado do painel na Controls coleo.
3.
Chamar o Dispose mtodo para verso todos os recursos usado pelo controle.
C#
private void removeControl(object sender, System.EventArgs e) { // NOTE: The code below uses the instance
of // the button (newPanelButton) from the previous example.
if(panel1.Controls.Contains(newPanelButton)) { this.newPanelButton.Click -= new
System.EventHandler(this. NewPanelButton_Click); panel1.Controls.Remove(newPanelButton);
newPanelButton.Dispose(); } }
Visual C# Consolidado
791
C#
Application.EnableVisualStyles();
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
1.
No Visual Basic, adicionar um mdulo a seu aplicativo baseado no Windows, com o
boto direito do mouse o projeto e escolhendo Add Module.
2.
3.
Para obter mais informaes sobre como criar um aplicativo baseado no Windows, consulte
Como: Criar um projeto de aplicativos Windows.
2.
Dentro do mdulo ou classe, desenvolver uma Main subrotina que podem atuar como o
objeto de inicializao para o projeto.
O exemplo de cdigo a seguir mostra como voc pode Approach isso.
C#
// All methods must be contained in a class. // This class is added to the namespace containing the Form1
class. class MainApplication { public static void Main() { // Instantiate a new instance of Form1. Form1 f1 =
new Form1(); // Display a messagebox. This shows the application // is running, yet there is nothing shown
Visual C# Consolidado
792
to the user. // This is the point at which you customize your form.
System.Windows.Forms.MessageBox.Show("The application " + "is running now, but no forms have been
shown."); // Customize the form. f1.Text = "Running Form"; // Show the instance of the form modally.
f1.ShowDialog(); } }
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
Ignorar esta etapa para aplicativos baseados no Windows em Visual C++.
4.
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; }
O exemplo de cdigo a seguir mostra como exibir uma caixa de dilogo modally.
C#
//Display frmAbout as a modal dialog Form frmAbout = new Form(); frmAbout.ShowDialog();
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); }
Visual C# Consolidado
794
Para exibir um formulrio como uma caixa de dilogo sem janela restrita
Chame o Show mtodo.
O exemplo a seguir mostra como exibir uma About caixa de dilogo em formato sem janela
restrita.
C#
//Display f as a modeless dialog Form f= new Form(); f.Show();
Observao
Se um formulrio exibido como janela restrita, o cdigo seguinte ao ShowDialog mtodo no
ser executado at que a caixa de dilogo seja fechada. No entanto, quando um formulrio
exibido como modal, o cdigo seguinte ao Show mtodo for executado imediatamente aps o
formulrio exibido..
O cdigo a seguir seleciona o contedo de uma caixa de texto quando o controle o Enter evento
ocorrer. O TextBox1_Enter manipulador de eventos deve ser vinculado ao controle; para obter mais
informaes, consulte Como criar manipuladores de eventos em tempo de execuo para
Windows Forms:.
C#
private void textBox1_Enter(object sender, System.EventArgs e){ textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length; }
Visual C# Consolidado
795
1.
No Visual Basic, inserir duas aspas em uma linha como uma marca cotao incorporada.
Em Visual C# \ " como uma marca cotao incorporada. e Visual C++, insira a seqncia de
escape Por exemplo, para criar a seqncia anterior, use o cdigo a seguir.
C#
private void InsertQuote(){ textBox1.Text = "She said, \"You deserve a treat!\" "; }
- 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 ;
2.
3.
Visual C# Consolidado
796
Para exibir um retorno de carro em uma vrias linhas TextBox, use a NewLine
propriedade.
Esteja ciente que a interpretao de caracteres de escape ( especfico de idioma. Visual
Basic usa Chr$(13) & Chr$(10) para retorno de carro e alimentao de linha a combinao de
caracteres.
2.
Defina a Multiline propriedade para true. Se WordWrap ser true (o padro), em seguida,
o texto no controle ser exibida como um ou mais pargrafos; caso contrrio, ele aparecer
como uma lista, em que algumas linhas podem ser cortadas na borda do controle.
Defina a ScrollBars propriedade como um valor apropriado.
Value
(Valor)
3.
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.
Descrio
false
Texto no controle no automaticamente ser ser disposto, para que ele ir rolar para a
direita at que uma quebra de linha seja alcanada. Use esse valor se voc escolheu
Horizontal barras de rolagem ou Both, acima.
(true
padro)
A barra de rolagem horizontal no ser exibido. Use esse valor se voc escolheu
Vertical barras de rolagem ou None, acima, para exibir um ou mais pargrafos.
Visual C# Consolidado
797
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).
Visual C# Consolidado
798
1.
Adicionar ao seu formulrio. um Timer Consulte a seo exemplo a seguir para obter uma
ilustrao de como fazer isso programaticamente. Tambm Visual Studio oferece suporte
para adicionar componentes a um formulrio.
2.
Defina a Interval propriedade (em milissegundos) para o timer. Esta propriedade determina
quanto tempo ir passar antes o procedimento executado novamente.
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.
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(); } }
Visual C# Consolidado
799
Visual C# Consolidado
800
Observao
Determinados aplicativos apresentam controles muito semelhantes barra de ferramentas que
tm a capacidade de " flutuar " acima a janela do aplicativo e ser reposicionada. O controle
Windows Forms ToolBar no podem fazer essas aes.
Quando a Aparncia propriedade definida para Normal, os botes da barra de ferramentas
aparecem elevado e tridimensional. Voc pode definir a Appearance Propriedade da barra de
ferramentas para Flat para dar a barra de ferramentas e seus botes uma aparncia plana.
Quando o ponteiro do mouse se move sobre um boto plano, aparncia do boto muda para
tridimensional. Botes da barra de ferramentas podem ser dividida em grupos lgicos, usando
separadores. Um separador um boto da barra de ferramentas com a Estilo propriedade
definida como Separador. Ele exibido como espao vazio na barra de ferramentas. Quando tiver
uma aparncia plana, barra de ferramentas separadores boto aparecem como linhas em vez de
espaos entre os botes.
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,
Visual C# Consolidado
801
2.
(
3.
4.
Descrio
5.
PartialPush
Pushed
Style
Text
ToolTipText
2.
Visual C# Consolidado
802
Adicionar imagens para o ImageList Componente. Para obter mais informaes, consulte
Como adicionar ou remover imagens ImageList com o designer:.
Selecione o ToolBar controle no formulrio.
3.
4.
Visual C# Consolidado
803
5.
6.
2.
3.
Visual C# Consolidado
804
Se o formulrio Windows recursos um ToolBar controle com botes da barra de ferramentas, ser
desejar saber qual boto o usurio clicar.
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.
Para manipular o evento Click em uma barra de ferramentas
1.
2.
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; } }
Visual C# Consolidado
805
As sees a seguir fornecem um resumo de alto nvel das alteraes no Visual Web Developer.
Web Sites
Projetos
Edio
Programao
Visual C# Consolidado
806
Controles
Para informaes sobre novos recursos no ASP.NET 2.0, consulte O que h de novo no ASP.NET
Web Sites e Projetos
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.
Agora voc pode criar os seguintes tipos de web sites:
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.
Visual C# Consolidado
807
Trabalhar sem um modelo de projeto no somente torna possvel adicionar, editar e remover
arquivos de fora do Visual Web Developer, como tambm torna mais fcil a mais de um
desenvolvedor trabalhar juntos para criar um site. Mais de um desenvolvedor pode adicionar ou
remover arquivos de um web site sem exigir acesso a um arquivo centralizado de projeto, que
precisa ser atualizado com as informaes do arquivo. Alm disso, mais fcil manter arquivos do
web site em um sistema controlado por origem, como o sistema de controle de verso do
Microsoft Visual SourceSafe, porque os desenvolvedores no tm, exclusivamente, que fazer o
check-out em um arquivo de projeto para adicionar arquivos ao web site.
Modelo de Compilao Dinmica
No Visual Web Developer, web sites no usam mais o modelo de compilao que foi usado em
verses anteriores, no qual o cdigo executvel do projeto inteiro era compilado em um nico
assembly. Em vez disso, como padro, a nova verso usa o modelo de compilao dinmica que
nativo para o ASP.NET 2.0.
Trabalhar com web sites que no produzem um assembly executvel como sada tem vrias
vantagens:
Voc pode testar web sites que contm pginas ainda em desenvolvimento pginas que
contm erros de compilao no impedem que outras pginas do web site sejam executadas.
Para desenvolvimento em web sites grandes, no necessrio que a aplicao inteira seja
recompilada sempre que uma alterao feita a uma pgina nica ou componente. Quando
um desenvolvedor altera uma nica pgina, somente essa pgina recompilada quando ela
solicitada em seguida.
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.
Publicao de Web Sites
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 prcompilao 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
Esta propriedade no est disponvel no Visual Web Developer Express Edition.
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 prcompilao localiza qualquer erro em tempo de compilao, em pginas ou cdigo dependente.
Visual C# Consolidado
808
Finalmente, a pr-compilao melhora o desempenho e reduz o tempo que leva para as pginas
de seu web site processarem na primeira vez.
Edio de pginas
O Visual Web Developer oferece os seguintes aperfeioamentos para criar e editar pginas da
web:
Programao
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:
Cdigo compartilhado.
Classes para as quais o cdigo fonte est na pasta App_Code de sua aplicao da web so
automaticamente referenciadas; se voc tiver compilado componentes, voc pode inseri-los na
pasta Bin para que o Visual Web Developer os referencie automaticamente. A funcionalidade
IntelliSense obtm informaes sobre qualquer componente que estiver instalada na pasta
Visual C# Consolidado
809
App_Code ou Bin, de sua aplicao. Para obter detalhes, consulte Passo-a-passo: Usando
Cdigo Compartilhado em Web Sites no Visual Web Developer.
Depurao.
Voc tem facilidades completas de depurao para Web Sites locais, incluindo arquivos de
sistema. A depurao menos complexa e mais rpida do que nas verses anteriores. Para
obter detalhes, consulte Passo-a-passo: Depurao de Pginas da Web no Visual Web
Developer.
Controles
Visual C# Consolidado
810
O Visual Web Developer oferece suporte aos novos controles ASP.NET 2.0, cujas novas
funcionalidades resultam no aumento significativo da produtividade. Alm dos novos controles de
hospedagem, o Web Page Designer inclui melhoras para ajud-lo a trabalhar mais facilmente com
controles. Destaques incluem o seguinte:
Edio de modelo.
O Web Page Designer fornece uma interface simplificada e mais intuitiva para criar e editar
modelos em controles complexos, como o controle DataList e o GridView.
Edio de Tabela.
muito mais fcil agora criar e editar tabelas HTML no Web Page Designer. Para obter
detalhes, consulte Passo-a-passo: Editando Tabelas HTML no Visual Web Developer.
Extensibilidade de Controle
Agora voc pode estender controles de novas e eficientes maneiras. Como antes, voc pode criar
controles de usurio e controles personalizados. Esta verso da ferramenta de desenvolvimento
da Web, o Visual Web Developer, fornece suporte aprimorado para controles de usurio, incluindo
processamento WYSIWYG no modo Design e janela Properties de suporte.
Voc pode estender o comportamento em tempo de execuo dos controles criando adaptadores
que definem a sada do controle para um dispositivo especfico ou navegador. Em tempo de
execuo, o ASP.NET 2.0 determina o tipo de dispositivo que gerou a solicitao e chama um
adaptador de controle para processar a sada apropriada para este dispositivo, para um dado
controle. Criando um adaptador para um controle e uma classe especfica de dispositivo, voc
pode personalizar a sada para o controle do dispositivo. Adaptadores so especialmente teis
para criar processamento personalizado para novos dispositivos. Para mais informaes, consulte
Criao de Adaptadores de Controle do Servidor ASP.NET - Uma Introduo.
Se voc desenvolver controles comuns, voc ter melhorado o suporte para hospedar seu
controle em um Web Page Designer, incluindo o seguinte:
Classes que permitem que voc adicione edio baseada em regio aos controles em
tempo de design.
Suporte a edio baseada em tarefas, de modo que voc possa definir verbos (tarefas)
que so expostos para o controle usando atalhos de menu no Web Page Designer.
Servios de edio de modelos que simplificam a adio de suporte para modelos nos
controles.
Visual C# Consolidado
811
Informaes de conexo.
Consultas (um instruo SQL, nome de parmetro armazenado ou nomes dos mtodos
para chamar em um objeto).
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.
Para ajud-lo a criar e configurar controles de fonte dados, a ferramenta de desenvolvimento da
Web, o Visual Web Developer, inclui assistentes que o ajudam a criar conexes, definir consultas
ou especificar mtodos para chamar e configurar parmetros.
Controles de dados avanados
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
Visual C# Consolidado
812
trabalham juntos para gerenciar, automaticamente, a vinculao de dados, para que na maioria
dos casos, voc no precise escrever cdigo para executar a vinculao.
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:
O controle DetailsView exibe um registro por vez e permite que voc edite, exclua e insira
registros.
Voc pode tambm paginar atravs de vrios registros.
O controle FormView semelhante ao controle DetailsView, mas permite que voc defina
um layout de forma livre para cada registro.
O controle FormView como um controle DataList para um registro individual.
Voc pode continuar usando o controle DataGrid, embora ele seja substitudo pelo controle
GridView. Pginas existentes que usam o controle DataGrid trabalham como so. Como em
outros controles de dados, o controle DataGrid foi aprimorado para interagir com controles de
fonte de dados.
Vinculao bidirecional de dados
A combinao de controles de fonte de dados, parmetros declarativos e controles de dados
avanados fornece a capacidade para criar vinculao bidirecional de dados, sem precisar
escrever cdigo. Nos controles de fonte de dados, voc pode definir consultas ou nomes de
mtodos a serem usados para atualizaes. Controles de dados, como o controle GridView,
DetailsView e FormView, suportam modos de edio e excluso (e para alguns controles, modo
de insero) que automaticamente podem interagir com os controles de fonte de dados, para
gravar dados na fonte de dados.
Armazenamento de seqncia de caracteres de conexo
Para ajudar a tornar seus sites mais manutenveis e mais seguros, voc pode manter as
seqncias de caracteres de conexo no arquivo Web.config em uma nova seo, que foi
desenvolvida especificamente para armazenamento de seqncia de caracteres de conexo.
Quando utilizar a ferramenta de desenvolvimento da Web, o Visual Web Developer, para criar ou
configurar controles de fonte de dados, voc pode especificar que a seqncia de caracteres de
conexo seja armazenada no arquivo Web.config. Se voc alterar as fontes de dados, voc pode
facilmente alterar a seqncia de caracteres de conexo em um local, ao invs de ter que
atualizar todos os componentes de dados em todas as pginas, com uma nova seqncia de
caracteres de conexo. Para segurana adicional, voc pode criptografar a seo de seqncia
de caracteres de conexo do arquivo Web.config. Para obter detalhes, consulte Criptografar
informaes de configurao usando configurao protegida.
Acesso a dados em duas e trs camadas
O modelo anterior de vinculao de dados incentivava a criao de solues de dados em duas
camadas, na qual as pginas da Web interagiam diretamente com o banco de dados para
preencher o dataset e para vincular controles a ele. O novo modelo continua facilitando o trabalho
em uma estrutura em duas camadas. Por exemplo, o controle SqlDataSource se conecta
Visual C# Consolidado
813
diretamente a um banco de dados e executa instrues SQL ou procedimentos para ler e gravar
dados armazenados.
O novo modelo de vinculao de dados tambm torna mais fcil criar uma estrutura em trs
camadas na qual o acesso a dados tratado por um objeto corporativo de camada intermediria.
O controle ObjectDataSource interage com um objeto corporativo chamando mtodos no objeto
para recuperar e atualizar dados. Controles de dados em uma pgina podem se vincular ao
controle ObjectDataSource da mesma maneira como eles fazem a quaisquer outros controles de
fonte de dados, como o controle SqlDataSource.
A ferramenta de desenvolvimento da Web, o Visual Web Developer, inclui um assistente de
componente de dados que ajuda a criar um objeto personalizado que contm mtodos para ler e
atualizar dados. Como alternativa, voc pode criar seu prprio objeto de camada intermediria que
contm mtodos. Enquanto seu objeto personalizado expe os mtodos com as assinaturas
apropriadas, voc pode referenci-los de um controle ObjectDataSource. Para obter detalhes,
consulte Passo-a-passo: Vinculao de Dados Para Um Objeto Corporativo Personalizado.
Compatibilidade com Verses Anteriores para Acesso a Dados
A ferramenta de desenvolvimento da Web, o Visual Web Developer, continua oferecendo suporte
a pginas que usam o modelo de vinculao de dados de verses anteriores. Pginas que contm
datasets e outros componentes executam como faziam antes, e voc pode abrir e editar as
pginas no Web Page Designer. O Visual Web Developer no remove os componentes de dados
e no converte os componentes para controles de fonte de dados.
Observao
Componentes de dados, como datasets e conexes de dados, no so mostrados no Web Page
Designer do Visual Web Developer. Portanto, voc no pode definir, nem examinar as
propriedades usando a janela Properties. Entretanto, voc ainda pode editar o cdigo que usado
para instanciar os componentes de dados e definir suas propriedades.
Para obter mais informaes, consulte Viso Geral de Controles de Fonte de Dados e Passo-apasso: Acesso Bsico a Dados em Pginas da Web.
Convertendo sites da Web existentes
O Visual Web Developer, pode converter automaticamente seus projetos existentes para o novo e
modernizado layout de site. O processo de converso preserva a funcionalidade de seu aplicativo
e as opes de projeto que so aplicadas. Pginas da Web code-behind existentes so
convertidas em um novo modelo code-behind que preserva a separao de HTML e cdigo, mas
fornece uma estrutura simplificada. Para mais informaes, consulte Converso do Projeto Da
Web no Visual Studio.NET.
Aps a converso, voc pode usar o Web Page Designer para trabalhar com pginas e controles
que foram desenvolvidos em verses anteriores do Visual Web Developer.
Visual C# Consolidado
814
2.
3.
4.
A pgina remetida para o servidor Web. ( O navegador executa um mtodo HTTP POST,
que no ASP.NET conhecido como um postback). Especificamente, a pgina remetida de
volta a si mesma. Por exemplo, se o usurio que estiver trabalhando com a pgina
Default.aspx clicar em um boto na pgina , a pgina a remete de volta para o servidor com
um destino de Default.aspx.
5.
6.
7.
Esse ciclo continua, enquanto o usurio estiver trabalhando na pgina. Cada vez que um boto
clicado, a informao na pgina remetida para o servidor Web e a pgina executada
novamente. Cada ciclo conhecido como um round trip(processamento). Como o processamento
da pgina ocorre no servidor Web, cada ao que pode fazer a pgina requer um round trip para o
servidor.
Observao
Visual C# Consolidado
815
Uma pgina da Web do ASP.NET pode executar scripts de cliente, o que no requer um round trip
para o servidor, e que til para validao de entrada de usurio e para alguns tipos de interface
de programao. Para obter mais informaes, consulte Programando pginas da Web do
ASP.NET com script de cliente.
Postagem cruzada de pginas
Em algumas circunstncias, voc pode querer que uma pgina poste para uma pgina diferente,
no a si prpria. Isso chamado de da cross-page posting(postagem cruzada de pgina). Por
exemplo, voc pode ir criando uma srie de pginas que processam um pedido do cliente. Cada
pgina pode enviar para a prxima pgina na seqncia. Para obter mais informaes, consulte
Postagem entre Pginas em Pginas da Web do ASP.NET.
Vida til da pgina
Diferente de formulrios em aplicativos desktop, uma pgina da Web do ASP.NET no
inicializada, executa enquanto o usurio trabalha com o formulrio, e depois descarrega somente
quando o usurio clicar um boto Close (fechar). Isso ocorre porque a Web est desconectada
inerentemente. Quando um navegador solicita uma pgina de um servidor Web, o navegador e o
servidor esto conectados somente durante tempo suficiente para processar a solicitao. Depois
que o servidor Web tenha processado uma pgina para o navegador, a conexo encerrada. Se
o navegador fizer outra solicitao para o mesmo servidor Web, mesmo para a mesma pgina, a
solicitao ser processada como uma nova solicitao.
A natureza desconectada da Web determina a maneira que uma pgina ASP.NET executa.
Quando um usurio solicita uma pgina da Web do ASP.NET, uma nova instncia da pgina
criada. A pgina executa seu processamento, processa a marcao para o navegador, e
descartada. Se o usurio clica em um boto para executar uma nova postagem, uma nova
instncia da pgina criada, a pgina executa seu processamento, e novamente ser descartada.
Assim, cada nova postagem e round trip resulta em uma nova instncia da pgina.
Para obter mais informaes, consulte Pginas da Web ASP.NET.
Preservando o estado da pgina
No protocolo normal HTTP, a nica informao que o servidor tem sobre uma pgina a
informao que o usurio especificou usando controles na pgina, porque o navegador envia
somente essas informaes para o servidor quando a pgina postada. Outras informaes, tais
como valores de varivel e definies de propriedade, so descartadas. ASP.NET ajuda a
preservar outras informaes de pgina das seguintes maneiras:
O ASP.NET fornece recursos de gerenciamento de estado para que voc possa salvar
suas prprias variveis e informaes especficas do aplicativo ou informaes especficas de
sesso entre as round trips.
ASP.NET pode detectar quando uma pgina solicitada pela primeira vez e quando a
pgina enviada, o que lhe permite programar adequadamente. Por exemplo, voc talvez
queira ler informaes de um banco de dados na primeira vez que uma pgina exibida, mas
no em cada novo postback.
Observao
Visual C# Consolidado
816
O servidor pode ser configurado para guardar informaes de pgina para otimizar as pginas,
mas para fins de programao de aplicativos, melhor pensar em pginas como sendo
descartadas assim que o servidor terminar seu processamento.
Para obter mais informaes, consulte Viso Geral sobre o Gerenciamento de Estado do
ASP.NET.
Programando pginas da Web ASP.NET
Voc pode criar o cdigo de servidor para suas pginas da Web ASP.NET usando uma variedade
de idiomas no.NET Framework, incluindo Visual Basic, C#, e J#. As pginas da Web ASP.NET
podem conter scripts de cliente que executam dentro do navegador. Algumas funes ASP.NET
geram scripts de cliente e inserem-nos na pgina. Nesse caso, ASP.NET sempre gera
ECMAScript (JavaScript) para melhor funcionalidade de navegadores cruzados. Alm disso, voc
pode adicionar seus prprios scripts de cliente para funcionalidade personalizada. Se fizer isso,
voc pode utilizar qualquer linguagem de script de cliente que seja compatvel com os
navegadores que voc estiver como objetivo.
Controles de servidor
Como qualquer pgina da Web, as pginas da Web ASP.NET podem conter texto esttico. Com
mais freqncia, entretanto, voc adicionar controles para a pgina, como caixas de texto, caixas
de seleo e botes. Esses controles permitem ao usurio interagir com a pgina e enviar
informaes para o servidor quando a pgina remetida novamente.
O ASP.NET fornece um conjunto de controles conhecido como controles do servidor Web.
Controles do servidor ASP.NET podem ser semelhante aos elementos de formulrios HTML
correspondentes. Por exemplo, o controle ASP.NET TextBox semelhante a um marcador HTML
<input type="text">. Entretanto, os controles do servidor ASP.NET oferecem uma experincia de
programao mais enriquecedora de elementos HTML. H tambm controles do servidor
ASP.NET para um intervalo muito maior de funes que o que oferecido pelos elementos HTML.
Entre os controles do servidor que podem ser usados em um pgina da Web do ASP.NET est
um controle de calendrio, controles com dados vinculados que exibem listas ou grades, um
controle de logon para adicionar segurana a seu site, e muito mais.
Para obter mais informaes, consulte Controles de servidores Web do ASP.NET.
Pgina e eventos de controle do servidor
Um pgina da Web do ASP.NET e os controles dele oferecem suporte a um modelo de evento
como os encontrados em Windows Forms. Por exemplo, quando os usurios clicar em um
controle Button em um pgina da Web do ASP.NET, a pgina remetida de volta para o servidor,
recriada, e um evento de clique criado. Voc pode adicionar cdigo para a pgina que responde
a este evento de clique.
A prpria pgina inicia eventos de ciclos de vida quando inicializada, como os eventos Page_Init
e Page_Load, que oferecem a oportunidade de executar o cdigo quando a pgina inicializada
(Lembre-se de que a pgina criada e reinicializada em cada round trip). Controles individuais
podem iniciar seus prprios eventos. Controles de boto iniciam um evento Click, controles de
boto de rdio e caixas de seleo iniciam um mtodo CheckedChanged, e caixa de listagem e
controles de lista drop-down iniciam um evento SelectedIndexChanged. Alguns controles, tais
como o controle Calendar, disparam eventos que so mais abstratos do que simples eventos de
clique. Por exemplo, o controle Calendar dispara um evento VisibleMonthChanged quando
usurios navegarem para um ms diferente.
Visual C# Consolidado
817
A maioria dos controles servidor ASP.NET suportam somente alguns dos eventos que voc pode
tratar no cdigo servidor. Para processar um evento, a pgina deve executar uma round trip para
que a escolha do usurio possa ser enviada para a pgina para processamento. Os controles do
servidor no expe eventos de alta freqncia como onmouseover, porque sempre que esse
evento iniciado, outra round trip para o servidor deve ocorrer, o que iria afetar
consideravelmente o tempo de resposta na pgina. Entretanto, voc pode configurar controles de
servidor ASP.NET para iniciar eventos do lado do cliente, como onmouseover. Nesse caso, os
controles no iro ser remetidos novamente para o servidor, e voc criar um script de cliente para
responder a eventos.
Para obter mais informaes sobre como criar e usar eventos e manipuladores de eventos,
consulte Tratamento de Evento de servidor em pginas da Web ASP.NET.
Compatibilidade do navegador
Como o processamento da pgina da Web do ASP.NET ocorre no servidor Web, pginas da Web
ASP.NET so compatveis com qualquer navegador ou dispositivo mvel. Uma pgina da Web
processa automatica e corretamente a marcao (XHTML ou outra linguagem de marcao)
compatvel com o navegador para recursos, como estilos e layout. Como alternativa, voc pode
criar pginas da Web com controles projetados especificamente para processar a sada para
dispositivos especficos, como telefones celulares. Para obter mais informaes, consulte Criando
Aplicativos da Web ASP.NET Mobile.
Visual C# Consolidado
818
O XmlWriterXmlReader,. e XPathNavigator Classes tiver sido atualizadas para incluir suporte tipo
Novos mtodos nessas classes Ativar voc retornar um valor de n como um objeto Runtime de
idioma comum.
Para obter mais informaes consulte Suporte tipo nas classes System.Xml.
Novo modelo para criao XmlReader e objetos XmlWriter
Do XmlReader os mtodos estticos Create Em e XmlWriter classes so a prtica recomendada
para criar XmlReader e XmlWriter objetos. Do XmlReader o Create mtodo permite que voc
para especificar o conjunto de recursos que voc deseja ou XmlWriter Objeto para oferecer
suporte.
Consulte Criando leitores XML e Criando Writers XML Para obter mais informaes.
Inference do esquema
A classe classe XmlSchemaInference permite-lhe inferir um esquema de idioma (XSD) de
definio esquema XML da estrutura de um documento XML.
Verso 1.1
O cdigo a seguir cria um XmlTextReader objeto que ignora espao em branco e usa um
XmlUrlResolver objeto para resolver o nome do arquivo URI.
C#
// Supply the credentials necessary to access the Web server. XmlUrlResolver resolver = new
XmlUrlResolver(); resolver.Credentials = CredentialCache.DefaultCredentials; // Create the XmlTextReader.
XmlTextReader reader = new XmlTextReader("http://serverName/data/books.xml");
reader.WhitespaceHandling = WhitespaceHandling.None; reader.XmlResolver = resolver;
Visual C# Consolidado
819
Verso 2,0
O cdigo a seguir cria um XmlReader objeto com a mesma configurao, usando o Create
mtodo.
C#
// Supply the credentials necessary to access the Web server. XmlUrlResolver resolver = new
XmlUrlResolver(); resolver.Credentials = CredentialCache.DefaultCredentials; // Create the XmlReader.
XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true;
settings.XmlResolver = resolver; XmlReader reader =
XmlReader.Create("http://serverName/data/books.xml", settings);
Verso 1.1
Do XmlValidatingReader o cdigo a seguir valida dados usando e XmlSchemaCollection
Classes.
C#
XmlValidatingReader reader = new XmlValidatingReader(new XmlTextReader("books.xml"));
reader.ValidationType = ValidationType.Schema; reader.Schemas.Add("urn:books", "books.xsd");
reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack); while
(reader.Read());
C#
private static void ValidationCallBack(object sender, ValidationEventArgs e) { Console.WriteLine("Validation
Error: {0}", e.Message); }
Verso 2,0
Do XmlReader o cdigo a seguir valida dados usando e XmlSchemaSet Classes.
C#
XmlReaderSettings settings = new XmlReaderSettings(); settings. ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:books", "books.xsd"); settings.ValidationEventHandler += new
Visual C# Consolidado
820
C#
private static void ValidationCallBack1(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message); }
Criao XmlWriter
Na verso 2.0, XmlWriter objetos so criados usando o mtodo esttico Create na classe
XmlWriter. Um XmlWriterSettings objeto especifica os recursos que voc deseja o criado
XmlWriter para oferecer suporte.
Observao
Embora o .NET Framework inclui a XmlTextWriter classe, que uma implementao da classe
XmlWriter, recomendvel que voc criar XmlWriter objetos com o Create mtodo. Isso permite
que voc para tirar proveito dos todos os novos recursos adicionada classe XmlWriter.
Verso 1.1
O cdigo a seguir cria um XmlTextWriter objeto com uma codificao especfica.
C#
XmlTextWriter writer = new XmlTextWriter("books.xml", Encoding.Unicode); writer.Formatting =
Formatting.Indented;
Verso 2,0
O cdigo a seguir cria um XmlWriter objeto com a mesma configurao, usando o Create
mtodo.
C#
XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding =
Encoding.Unicode; XmlWriter writer = XmlWriter.Create("books.xml", settings);
Verso 1.1
O cdigo a seguir executa uma transformao XSLT usando a XslTransform classe.
C#
Visual C# Consolidado
821
// Create the XslTransform. XslTransform xslt = new XslTransform(); // Create a resolver and set the
credentials to use. XmlUrlResolver resolver = new XmlUrlResolver(); resolver.Credentials =
CredentialCache.DefaultCredentials; // Load the style sheet.
xslt.Load("http://serverName/data/xsl/sort.xsl", resolver); // Transform the file. XPathDocument doc =
new XPathDocument(filename); XmlTextWriter writer = new XmlTextWriter("output.xml", null);
xslt.Transform(doc, null, writer, null);
Verso 2,0
O cdigo a seguir executa uma transformao XSLT usando a XslCompiledTransform classe.
C#
// Create the XslCompiledTransform object. XslCompiledTransform xslt = new XslCompiledTransform(); //
Create a resolver and set the credentials to use. XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials; // Load the style sheet.
xslt.Load("http://serverName/data/xsl/sort.xsl", XsltSettings.Default, resolver); // Transform the file.
XmlWriter writer = XmlWriter.Create("output.xml"); xslt.Transform("books.xml", writer);
Produtividade alta-.
Suporte multilnge.
Extensvel.
Arquitetura conectvel.
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
Visual C# Consolidado
822
Esta seo aborda questes que so especficas para as tecnologias XML. Ele tambm oferece
algumas diretrizes que podem ajudar a proteger seus aplicativos.
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,
XmlResolver Class
XmlTextReader Class
XslCompiledTransform Class
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.
A XmlSecureResolver classe ajuda a proteger outro XmlResolver objeto, disposio o
XmlResolver objeto e restringindo os recursos que base XmlResolver tem acesso ao. Por
exemplo, a XmlSecureResolver classe pode proibir acesso a determinado sites ou zonas.
Voc deve considerar os seguintes itens ao trabalhar com a XmlResolver classe.
Se voc estiver criando uma propriedade de classe que usa a XmlResolver classe, a
propriedade deve ser definida como uma propriedade somente para gravao. A propriedade
pode ser usada para especificar mas ela no pode ser usada para retornar um XmlResolver
objeto. a ser usado, o XmlResolver Isso permite um uso componente no confiveis a classe,
mas no permite-lo para recuperar e use o XmlResolver objeto diretamente.
Visual C# Consolidado
823
O aplicativo pode atenuar Negao de memria das ameaas do servio para o GetEntity
mtodo implementando uma disposio implementada IStream que limita o nmero de bytes
lidos. Isso ajuda a proteo contra situaes onde cdigo mal-intencionado tenta se passar um
fluxo de bytes infinito para o GetEntity mtodo.
Visual C# Consolidado
824
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
A XmlTextReader classe uma implementao da classe XmlReader legada.
Processamento DTD
Processamento DTD ativado por padro. Para desativar processamento DTD, defina a
ProhibitDtd propriedade como true.
Tratamento de entidade
Por padro entidades gerais no so expandidas. Entidades gerais so expandidas quando voc
chamar o ResolveEntity mtodo.
Recursos externos
Dados XML podem incluir referncias a recursos externos, como referncias DTD. Por padro
recursos externos so resolvidos usando um XmlUrlResolver objeto COM sem credenciais de
usurio.
Voc pode proteger isso mais seguindo um destes procedimentos:
Classe XslCompiledTransform
Visual C# Consolidado
825
No permitir que o processo XSLT aberto qualquer recursos externos passando em null
Para o XmlResolver argumento.
Blocos de script
A XslCompiledTransform classe no oferece suporte blocos de script por padro. Blocos de
script so ativados atravs da XsltSettings classe. XSLT script deve ser ativada somente se voc
exigem suporte script e voc estiver trabalhando em um ambiente totalmente confivel.
Objetos de extenso
Objetos extenso adicionam recursos de programao ao transformaes XSLT. Esse recurso
ativado por padro. Se Objetos de extenso for passados para o Transform mtodo, elas so
usadas na transformao XSLT.
Modelo de Objeto de Documento
Porque o DOM (modelo de objeto Document) caches todos os dados da memria, operaes
DOM, como Consultar, Editar, mover sub-Trees entre documentos, e salvar objetos DOM no so
recomendadas se voc estiver trabalhando com dados no confiveis e estiver preocupado com a
ataques de negao de servio. Outra opo para definir um limite para a quantidade de dados
para ler em DOM. Uma maneira para fazer isso para criar uma implementao personalizada de
fluxo que limita o tamanho de entrada usado e Use isso para carregar o objeto DOM.
Objetos XmlDocument podem conter informaes sigilosas such as credenciais de usurio no
objeto incorporado XmlResolver. Se a System.Xml.XmlDocument.XmlResolver propriedade
estiver definida como um XmlResolver objeto com credenciais de usurio, no cache o
XmlDocument objeto ou transmiti-las a um componente no confivel. Um componente no
confivel pode usar o objeto DOM, e as credenciais do usurio incorporado XmlResolver, para
acessar e carregar dados.
Visual C# Consolidado
826
Faa como voc garantir que seu aplicativo somente recupera arquivos de sites
confiveis? Por exemplo, se um documento XML tiver uma referncia de arquivo a um arquivo
a partir da Internet, voc deseja seu aplicativo para recuperar este arquivo?
Fazer se voc recuperar um arquivo, como voc garantir esse arquivo no contm dados
mal intencionados?
Negao de Servio
Porque documentos XML podem incluir referncias a outros arquivos, difcil para determinar a
quantidade de capacidade de processamento necessrio para analisar um documento XML. Por
exemplo, documentos XML podem incluir um DTD. Se o DTD contm entidades aninhadas ou
complexos Modelos de contedo, ele poder ter uma quantidade excessiva de tempo para
analisar o documento.
Os seguintes cenrios so considerados para ser menos vulnervel a ataques de negao de
servio porque as System.Xml classes fornecem um meio de proteo contra esses ataques.
Para saber sobre os tipos de questes de segurana que possam surgir ao trabalhar com
System.Xml componentes e o que voc pode fazer para atenuar essas ameaas, consulte
Consideraes sobre segurana System.Xml.
Anlise binrios dados XML se os dados XML binrios foi gerados pelo Microsoft SQL
Server 2005.
Visual C# Consolidado
827
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.
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
O XmlTextReader permite DTD processamento por padro. Use a
System.Xml.XmlTextReader.ProhibitDtd propriedade para desativar este recurso.
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:
Visual C# Consolidado
828
Script XSLT desativado por padro. XSLT script deve ser ativada somente se voc
exigem suporte script e voc estiver trabalhando em um ambiente totalmente confivel.
A funo XSLT document() desativada por padro. Se voc ativar a document() funo,
restringir os recursos que podem ser acessados, passando um XmlSecureResolver objeto
para o Transform mtodo
Folhas de estilos XSLT podem incluir referncias a outros arquivos e blocos de script
incorporado. Um usurio mal-intencionado pode explorar isso, fornecendo voc com dados ou
estilo folhas que quando executado pode causar o sistema para processar at que o
computador executar baixa em Recursos.
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
Visual C# Consolidado
829
A XmlDocument classe representa um documento XML. Ele inclui membros para recuperar e criar
todos os outros objetos XML. Usando e suas classes relacionados, voc pode construir
documentos XML, carregar e acessar dados, modificar dados, e salvar alteraes. o
XmlDocument,
Nesta seo
Ler um documento XML para o DOM.
Discute como ler dados XML em um documento XML.
Inserir ns em um documento XML
Discute como inserir ns em um documento XML.
Remover ns, contedo, e valores de um documento XML
Explica como remover ns, incluindo valores de n.
Modificar ns, contedo, e valores em um documento XML
Discute como modificar o contedo de n.
Resolvendo recursos externos
Discute usando a XmlResolver classe para Resolver e acessar recursos externos.
Estendendo o DOM
Discute como estender as classes DOM para fornecer funcionalidade adicional.
Sees relacionadas
Processo dados XML usando o modelo de dados XPath
Discute processamento XML usando a XPathNavigator classe.
Visual C# Consolidado
830
Descreve como criar uma leitura-somente XPathDocument Classe objeto para ler um
documento XML e como criar um objeto de classe editvel XmlDocument para ler e editar
um documento XML. Este tpico tambm descreve como retorno um XPathNavigator
objeto de cada classe para navegar e editar um documento XML.
Selecionar, Evaluating e correspondncia dados XML usando XPathNavigator
Descreve os mtodos da classe XPathNavigator utilizada para selecionar ns no ou
XmlDocument Objeto utilizando uma consulta XPath, avaliar e examine os resultados de
uma expresso XPath, e determinar se um n em um documento XML coincide com uma
expresso XPath especificada. um XPathDocument
Acessando dados XML usando XPathNavigator
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
Editando dados XML usando XPathNavigator
Descreve os mtodos da XPathNavigator classe usada para inserir, modificar e remover
ns e valores de um documento XML contido em um XmlDocument objeto.
Validao de esquema usando XPathNavigator
Descreve as maneiras para validar o contedo XML contido no ou XmlDocument Objeto.
um XPathDocument
Nesta seo
Novos recursos na classe XmlReader
Descreve alteraes para a XmlReader classe.
Tarefas comuns XmlReader
Visual C# Consolidado
831
Codificar bytes binrios como BASE64, ou BinHex, e gravao sem o texto resultante.
Passar os valores usando tipos Runtime de idioma comuns em vez de seqncias. Isso
permite evitar a Executar converses valor manualmente.
Visual C# Consolidado
832
Verificao de caracteres
Do XmlWriter a System.Xml.XmlWriterSettings.CheckCharacters propriedade configura para
verificar caracteres no fluxo de dados XML para garantir que todos os caracteres sejam dentro do
intervalo de caracteres XML vlidos. Caractere verificao inclui, verificando se h caracteres
invlidos em ns de texto e nomes XML, assim como verificao validade de nomes XML no (por
exemplo, um nome xml pode comear com um numrica). Se os dados XML no no vir dentro do
intervalo de caracteres XML legais, acionada. um XmlException
Verificando a conformidade
Do XmlWriter a System.Xml.XmlWriterSettings.ConformanceLevel propriedade configura para
verificar e garantir que o fluxo sendo lidos compatvel com um determinado conjunto de regras.
Dependendo do nvel conformidade que for especificado, os dados XML podem ser verificados
para ver que est de acordo com as regras para um documento XML 1.0 vlido ou fragmento de
documento. Se os dados no estiver em conformidade, acionada. um XmlException
Para obter mais informaes, consulte Conformance de dados e o XmlWriter.
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
Explica como criar gravadores usando o System.Xml.XmlWriter.Create mtodo.
Conformance de dados e o XmlWriter
Descreve verificaes conformidade de dados que podem ser definidas na classe
XmlWriter.
Namespace tratamento no XmlWriter
Discute os recursos espao para nome na classe XmlWriter.
Dados digitados escrita
Visual C# Consolidado
833
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.
A XslCompiledTransform classe o processador XSLT no .NET Framework. A
XslCompiledTransform classe oferece suporte a recomendao W3C 1.0 XSLT.
Observao
A XslTransform classe obsoleto no .NET Framework verso 2.0. A XslCompiledTransform
classe uma nova implementao do mecanismo XSLT. Ele inclui aprimoramentos de
desempenho e novos recursos de segurana. A prtica recomendada para criar aplicativos
XSLT usando a XslCompiledTransform classe.
Visual C# Consolidado
834
C#
Cdigo usando a
XslCompiledTransform classe.
C#
835
Cdigo usando a
XslTransform classe.
C#
Cdigo usando a
XslCompiledTransform
classe.
C#
C#
Cdigo usando a
XslCompiledTransform
classe.
C#
C#
Cdigo usando a
XslCompiledTransform
classe.
C#
Visual C# Consolidado
836
C#
Cdigo usando a
XslCompiledTransform
classe.
C#
C#
Cdigo usando a
XslCompiledTransform
classe.
C#
Objetos de extenso
Objetos extenso so adicionados usando o AddExtensionObject mtodo. O conjunto de
permisses FullTrust necessrio para suporte a objetos de extenso. Isso garante que elevao
Visual C# Consolidado
837
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 document() funo desativada por padro na classe XslCompiledTransform. Esse recurso
pode ser ativado ao definir a System.Xml.Xsl.XsltSettings.EnableDocumentFunction propriedade
como true e passar o XsltSettings objeto para o Load mtodo.
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.
A lista a seguir descreve quando se desejar especificar um XmlResolver objeto:
Se o processo XSLT precisa acessar um recurso de rede que exija autenticao, voc
pode usar com as credenciais necessrias. um XmlResolver
Se voc quiser restringir os recursos que o processo XSLT pode acessar, voc poder
usar com a permisso correta Definir. um XmlSecureResolver Use a XmlSecureResolver
classe caso voc precise abrir um recurso que voc no faa controle, ou que no confivel.
Se voc desejar garantir que nenhum recursos externos so acessados, voc pode
especificar null para o XmlResolver argumento.
Visual C# Consolidado
838
Consulte tambm
A recomendao XSLT usa XML Path Language (XPath) para selecionar partes de um documento
XML, XPath uma linguagem de consulta usada para navegar ns de uma rvore de
documentos. Como mostrado no diagrama, a .NET Framework Implementao do XPath usada
para selecionar partes de XML armazenados em vrias classes, como um XmlDocument, um
XmlDataDocument, e um XPathDocument. Um XPathDocument um armazenamento de dados
XSLT otimizado, e quando usado com XslTransform, ele fornece transformaes XSLT com bom
desempenho.
A seguinte lista de tabela normalmente usa classes ao trabalhar com XslTransform e XPath e
suas funes.
Visual C# Consolidado
839
Classe ou
interface
Funo
XPathNavigator
IXPathNavigable
XmlDocument
XPathNodeIterator
Visual C# Consolidado
840
Interagir com o Create mtodo da XmlReader classe para validar documentos da instncia
XML com base em esquemas.
Visual C# Consolidado
841
Para obter mais informaes sobre cada classe no espao para nome System.Xml.Schema,
consulte a System.Xml.Schema documentao de referncia espao para nome da biblioteca de
classe do .NET Framework.
Visual C# Consolidado
842
Visual C# Consolidado
843
Visual C# Consolidado
844
Visual C# Consolidado
845
Visual C# Consolidado
846
Elements
XmlSchemaElement
Attributes
XmlSchemaAttribute
AttributeGroups
XmlSchemaAttributeGroup
Groups
XmlSchemaGroup
Includes
XmlSchemaExternalXmlSchemaInclude ou XmlSchemaRedefine,
XmlSchemaImport
Items
Notations
XmlSchemaNotation
SchemaTypes
UnhandledAttributes
Observao
Todas as propriedades listadas na tabela acima, exceto para a Items propriedade, so Post
Schema--Compilation-InfoSet propriedades (PSCI) que no esto disponveis at que o esquema
tiver sido compilada. A Items propriedade uma propriedade Pre Schema--compilation que pode
ser usada antes o esquema tem foi compilada para acessar e editar todos os elementos nvel
globais, atributos e tipos.
Visual C# Consolidado
847
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.
3.
4.
5.
Se o tipo complexo tem os atributos, obter e grava seu nome para o console. Para
enumerar sobre cada XmlSchemaAttribute um IDictionaryEnumerator
6.
7.
Visual C# Consolidado
848
Adiciona o esquema do cliente para um novo XmlSchemaSet objeto e ento compila ele.
Quaisquer avisos de validao de esquema e erros encontrados ler ou Compilar o esquema
so tratados pelo ValidationEventHandler delegado.
Visual C# Consolidado
849
2.
3.
4.
5.
6.
7.
Visual C# Consolidado
850
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.
3.
4.
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.
7.
8.
Observao
Do System.Xml.Schema.XmlSchema.Items porque o FirstName elemento um elemento global
no no esquema, no est disponvel em ou System.Xml.Schema.XmlSchema.Elements
Colees. O exemplo de cdigo localiza o FirstName elemento, localizando o Customer elemento
Visual C# Consolidado
851
primeiro.
O primeiro exemplo de cdigo traversed o esquema usando o POST-Schema - coleo de
compilao System.Xml.Schema.XmlSchema.Elements. Neste exemplo, o Pre-schema -.
coleo de compilao System.Xml.Schema.XmlSchema.Items usada para atravessar o
esquema Enquanto as duas colees fornecem acesso aos elementos globais no esquema,
Iterando atravs da Items coleo mais demorada porque voc deve iterar sobre todos os
elementos no esquema globais e ele no tem nenhuma propriedade PSCI. As colees PSCI
(System.Xml.Schema.XmlSchema.Elements., System.Xml.Schema.XmlSchema.Attributes)
fornecer acesso direto a seus elementos globais, atributos, e tipos e suas propriedades PSCI,
System.Xml.Schema.XmlSchema.SchemaTypes, e assim por diante
1.
2.
3.
4.
Visual C# Consolidado
852
Customer element // and the sequence particle of the complex type. if (schemaObject is
XmlSchemaElement) { XmlSchemaElement element = schemaObject as XmlSchemaElement; if
(element.QualifiedName.Name.Equals("Customer")) { XmlSchemaComplexType customerType =
element.ElementSchemaType as XmlSchemaComplexType; XmlSchemaSequence sequence =
customerType.Particle as XmlSchemaSequence; // Iterate over each XmlSchemaParticle in the pre-schemacompilation // Items property. foreach (XmlSchemaParticle particle in sequence.Items) { // If the
XmlSchemaParticle is an element, who's QualifiedName // is "FirstName", set the SchemaTypeName of the
FirstName element // to the new FirstName complex type. if (particle is XmlSchemaElement) {
XmlSchemaElement childElement = particle as XmlSchemaElement; if
(childElement.Name.Equals("FirstName")) { childElement.SchemaTypeName = new
XmlQualifiedName("FirstNameComplexType", "http://www.tempuri.org"); } } } } } } // Reprocess and
compile the modified XmlSchema object and write it to the console. schemaSet.Reprocess(customerSchema);
schemaSet.Compile(); customerSchema.Write(Console.Out); } static void ValidationCallback(object sender,
ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Warning) Console.Write("WARNING: ");
else if (args.Severity == XmlSeverityType.Error) Console.Write("ERROR: ");
Console.WriteLine(args.Message); } }
Visual C# Consolidado
853
2.
3.
4.
5.
Visual C# Consolidado
854
A parte do documento XML estruturada pode ser mapeado para um DataSet, e ser
eficiente armazenados, indexado, e pesquisados.
O DataSet pode armazenar uma parte do XML. Isto , voc pode usar XPath ou
XslTransform Para armazenar a. apenas os elementos e atributos de juros um DataSet A
partir da, as alteraes podem ser feitas o subconjunto de dados, menores e filtrados com as
alteraes propagando aos dados maiores no XmlDataDocument.
Visual C# Consolidado
855
Voc tambm pode executar uma transformao sobre os dados que foi carregados em do SQL
Server. o DataSet Outra opo para vincular WinForm gerenciados classes-Estilo- .NET
Framework e controles WebForm para uma DataSet que foi preenchido de um fluxo de entrada
XML.
Alm de suporte XslTransform, um XmlDataDocument Dados Relacionais expe para XPath
consultas e validao. Basicamente, todos os servios XML esto disponveis sobre dados
relacionais, e instalaes relacionais como vnculo de controle, CodeGen, e assim por diante,
esto disponveis sobre uma projeo de XML estruturada sem comprometer fidelidade XML.
Porque XmlDataDocument herdada de um XmlDocument, ele fornece uma implementao de
DOM W3C. O fato de alguma forma. que associado a, e armazenar um subconjunto de seus
dados em, um DataSet faz no restringir ou alterar seu uso como a XmlDataDocument uma
XmlDocument Cdigo escrito para consumir um XmlDocument funciona inalterado contra um
XmlDataDocument. O DataSet Fornece exibio relacional dos mesmos dados definindo tabelas,
colunas, relaes, e restries, e um armazenamento de dados do usurio Autnomo, na
memria.
A ilustrao a seguir mostra as associaes diferentes que dados XML tem com e
XmlDataDocument. o DataSet
A ilustrao mostra dados XML que podem ser carregados diretamente em que permite a
manipulao direta com XML da maneira Relacional. a DataSet, Ou, o XML pode ser carregado
em uma classe de DOM, que o XmlDataDocument, e posteriormente carregado e sincronizado
com derivado o DataSet.. o DataSet Porque as alteraes feitas aos dados em um
armazenamento de dados, so refletidas no outro armazenamento. e XmlDataDocument esto
sincronizados em um nico conjunto a DataSet
Do XmlDocument o XmlDataDocument herda todos os recursos de edio e navegao. H
momentos ao usar. e seus recursos herdados, sincronizados com uma opo mais apropriada
que carregar XML diretamente na XmlDataDocument a DataSet, o DataSet A tabela a seguir
mostra os itens a serem considerados ao escolher o mtodo a ser usado para carregar o DataSet.
Quando se carregar XML diretamente para um
DataSet
Quando se sincronizar um
XmlDataDocument com um DataSet
Consultas de dados na DataSet so mais fcil com Consultas XPath so necessrias sobre os
SQL que XPath.
dados no DataSet.
Preservao do elemento ordenao no cdigofonte XML no crtica.
Visual C# Consolidado
856
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.
O GetEntity mtodo em usa XmlUrlResolver as informaes na Credentials propriedade como
apropriado para obter acesso ao recurso. No h nenhum get acessador para esta propriedade
por razes de segurana. Ao substituir XmlResolver, GetEntity o mtodo que utiliza as
informaes de credenciais na Credentials propriedade.
Visual C# Consolidado
857
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);
Visual C# Consolidado
858
Criar um XmlSecureResolver objeto somente que tem permisso para acessar o site da
intranet local.
C#
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(),
"http://myLocalSite/");
2.
3.
4.
Visual C# Consolidado
859
OuSe seu aplicativo exigir alguns acesso aos recursos, solicitar evidncia do chamador.
Use o XmlSecureResolver para resolver recursos XML
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,
Para criar um objeto XmlReader que usa um XmlSecureResolver
1.
2.
3.
2.
Visual C# Consolidado
860
No.NET Framework verso 1.0 a XmlConvert classe era necessrio para converter entre tipos de
esquema XML e CLR.
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[]
Visual C# Consolidado
861
xs:ENTITY
String
xs:float
Single
xs:gDay
DateTime
xs:gMonthDay
DateTime
xs:gYear
DateTime
xs:gYearMonth
DateTime
xs:hexBinary
Byte[]
xs:ID
String
xs:IDREF
String
xs:IDREFS
String[]
xs:int
Int32
xs:integer
Decimal
xs:language
String
xs:long
Int64
xs:gMmonth
DateTime
xs:Name
String
xs:NCName
String
xs:negativeInteger
Decimal
xs:NMTOKEN
String
xs:NMTOKENS
String[]
xs:nonNegativeInteger
Decimal
xs:nonPositiveInteger
Decimal
xs:normalizedString
String
xs:NOTATION
XmlQualifiedName
xs:positiveInteger
Decimal
xs:QName
XmlQualifiedName
xs:short
Int16
xs:string
String
xs:time
DateTime
xs:token
String
xs:unsignedByte
Byte
xs:unsignedInt
UInt32
xs:unsignedLong
UInt64
xs:unsignedShort
UInt16
Visual C# Consolidado
862
xdt:dayTimeDuration
TimeSpan
xdt:yearMonthDuration
TimeSpan
xdt:untypedAtomic
String
xdt:anyAtomicType
Object
xs:anySimpleType
String
N de documento
XPathNavigator
N de elemento
XPathNavigator
N de Atributo
XPathNavigator
N NameSpace
XPathNavigator
N texto
XPathNavigator
N comentrio
XPathNavigator
N de instruo de processamento
XPathNavigator
System.TimeSpan e xs:duration
Visual C# Consolidado
863
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
Visual C# Consolidado
864
Visual C# Consolidado
865
Criar um XML Web Services Quando voc cria um XML Web Services, voc est
criando um aplicativo que expe a funcionalidade para clientes XML Web Services.
Acessar um XML Web Services Quando voc acessa um XML Web Services, seu
aplicativo cliente localiza, referencia, e usa a funcionalidade contida em um XML Web Services
separado. O cliente de um XML Web Services tipicamente um aplicativo que est apto a
enviar, receber e processar mensagens para e oriundas de XML Web Services. Entretanto, o
requisito mnimo que o cliente deve ser capaz de enviar mensagens para o XML Web
Services. Isso inclui todos os aplicativos usando o .NET Framework.
Visual C# Consolidado
866
XML Web Services pode ser aplicativos autnomos ou subcomponentes de maior um aplicativo da
Web. Por exemplo, suponha que voc estiver criando um aplicativo da Web que vende Livros online. Seu aplicativo da Web pode interagir com XML Web Services da seguinte forma:
Criando um XML Web Services Seu Aplicativo expe sua ordem processando a lgica
como um XML Web Services, que seus Web sites afiliados podem usar em seus aplicativos da
Web para vender livros atravs de seu armazenamento on-line sem exigir que seus clientes
visitem seu site.
Acessando um XML Web Service Seu Aplicativo acessa um XML Web Services
fornecido por outra empresa on-line que especializada em escrever e fornecer revises de
livros para vendedores de livros on-line. Quando um visitante da sua loja on-line v os detalhes
de um livro especfico, eles tambm vem as revises desse livro na mesma pgina.
Lembre-se, XML Web Services podem ser acessados de praticamente qualquer outro tipo de
aplicativo, incluindo outros XML Web Services, aplicativos de Web, aplicativos Windows, e
aplicativos de console. O requisito mnimo que o cliente deve ser capaz de enviar mensagens
para o XML Web Services.
Visual C# Consolidado
867
Visual C# Consolidado
868
Visual C# Consolidado
869
Visual C# Consolidado
870
dependem dos recursos digital e canais de comunicao que so fornecidos pela Internet e
tecnologias relacionadas. Como resultado, muito poucos aplicativos so criados e desenvolvidos
que atualmente no fazer considerar como melhor para incorporar e aproveitar tecnologias da
Internet para totalmente dinamizar os benefcios da computao conectado.
Quando no pursuing totalmente novo desenvolvimento de aplicativos, as organizaes podem
ser encontradas tentativa de criar aplicativos que agregar vrios aplicativos tradicionais, orientado
tarefas-em um aplicativo simples, composto. Isso s vezes inclui integrar aplicativos que existe
dentro dos limites de uma entidade separada, como outra empresa ou um provedor de servios.
No entanto, um dilema ainda maior surge quando tentam integrar aplicativos legados criado
usando uma variedade de tecnologias, modelos de objeto, sistemas operacionais, e linguagens de
programao. Como voc tornar todos eles funcionam juntos? A resposta a Internet
programvel.
Extensible linguagem de marcao (XML) como um formato Descrio dados abertas tem
fornecidos aumento para a realidade de um Internet programvel. Da mesma forma TCP / IP
fornecido conectividade universal para a Internet, e HTML fornecido um idioma padronizada para
exibir informaes em uma grande variedade de plataformas para consumo humano, XML fornece
um idioma padronizada para trocar dados para consumo automatizado. Ele fornece a capacidade
para representar dados em um formato que permite que computadores para enviar e receber
dados em um estilo previsvel, habilitando programabilidade que ultrapassa sistemas fechados,
controlado amplamente aceitos. XML liberating porque sua simplicidade e extensibilidade
permite que voc para definir quase tudo, permitindo sala para expanso. Uma dos blocos
construo fundamental da Internet programvel servios XML da Web.
O Microsoft oferece suporte para criar servios XML da Web, usando tecnologias projetado para
atender s necessidades de diferentes audincias. Especificamente, o Microsoft oferece aos
desenvolvedores a opo de criar os Servios XML da Web usando ASP.NET, ATL Server,
sistema de interao remota.NET, e o 2.0 Toolkit SOAP. Remotos ASP.NET e.NET fazer Criando
Servios XML da Web mais fcil, conforme eles so criados na parte superior do.NET Framework.
O 2.0 Toolkit SOAP fornece suporte servios XML da Web compatvel com a Microsoft Visual
Studio 6.0 e aplicativos herdados, permitindo que eles para fins de interoperabilidade com
servios da Web XML construdo sobre o .NET Framework.
Nesta seo
Viso geral do XML Web Services
Fornece uma viso geral neutra da plataforma dos XML Web Services.
XML Web Services Usando ASP.NET
Detalhes como criar servios XML da Web, usando o ASP.NET.
Criando clientes XML Web Services
Detalhes como criar um cliente para um servio XML da Web, independentemente da
plataforma ou tecnologia usada para criar do XML Web Service.
Tratamento e incluso de excees nos XML Web Services
Descreve como para lidar com excees de um servio XML da Web criados com clientes
servio XML da Web ASP.NET e criados com o.NET Framework.
Usando cabealhos SOAP
Visual C# Consolidado
871
Detalhes como cabealhos SOAP pode ser definido, processada, e manipulados para
clientes chamar servios XML da Web criados com ASP.NET.
Personalizando SOAP Message formatao
Descreve como para controlar o SOAP enviados para e do Servios XML da Web criados
com ASP.NET.
Modificao de mensagens SOAP usando extenses SOAP
Explica como criar extenses Modifique a mensagem SOAP enviada atravs da rede para
servios XML da Web criados com ASP.NET e seus clientes.
Passo-a-passo: Personalizando a Gerao de Descries de Servios e Classes Proxy
Descreve as etapas para criar um extenso do formato da descrio do servio (SDFE).
Como personalizar a gerao de descries de servio e classes proxy:
Fornece cdigo de exemplo que define um extenso do formato da descrio do servio.
Tipos de dados com suporte pelos servios XML da Web criados usando ASP.NET
Lista os tipos de dados suporte para servios XML da Web criados com ASP.NET.
Atributos para criados usando clientes do servio XML da Web ASP.NET e Servios da Web XML
Lista os atributos que podem ser aplicadas aos criados com clientes servio XML da Web
ASP.NET e Servios XML da Web.
Sees relacionadas
Programao de rede
Mostra como usar classes de acesso a Internet para implementar ambos os aplicativos
baseados na Web e na Internet.
Crie o aplicativo a partir do qual voc deseja acessar um XML Web Services. Este
aplicativo pode at ser outro XML Web Services.
Visual C# Consolidado
872
2.
Adicionar uma referncia da Web para o XML Web Services com o qual seu aplicativo ir
interagir. Para obter instrues, consulte Adicionando e Removendo Referncias da Web.
3.
Crie uma instncia do objeto do proxy em seu cdigo cliente onde voc deseja acessar o
XML Web Services.
4.
Acesse os mtodos do XML Web Services como voc faria com qualquer outro
componente.
No cdigo de exemplo abaixo, o aplicativo cliente (Application1) est acessando um XML
Web Services para o qual ele tem uma referncia da Web (Converter) que contm uma
classe proxy (Service1), que possui um mtodo (ConvertTemperature) para chamar o
XML Web Services. As duas linhas de cdigo em negrito representam o cdigo que
necessrio para acessar o XML Web Services.
C#
using System; namespace Application1 { class Class1 { static void Main() { Converter.Service1 cService
= new Converter.Service1(); Console.WriteLine("Temperature in degrees Fahrenheit: "); double
dFahrenheit = Convert.ToDouble(Console.ReadLine()); double dCelsius =
cService.ConvertTemperature(dFahrenheit); Console.Write("Temperature in degrees Celsius: ");
Console.WriteLine(dCelsius.ToString()); } } }
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
2.
Visual C# Consolidado
873
3.
Declare uma instncia da classe proxy de servio da Web, conforme mostrado abaixo:
private localhost.Service1 myWebService = new localhost.Service1 ();
Observao
O seu projeto deve conter uma referncia da Web para o servio da Web.
2.
4.
Visual C# Consolidado
874
Por padro, um servio da Web criados com ASP.NET capaz de oferecem suporte a vrios
protocolos, incluindo SOAP sobre HTTP e implementaes de HTTP-GET e HTTP-POST onde
SOAP XML no- retornado em resposta.
Para testar um servio da Web em um navegador usando HTTP-GET
1.
Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao.
2.
Acessar um navegador da Web e digite a URL para o servio da Web no endereo barra,
usando o seguinte formato:
http://servername/apppath/webservicename.asmx
Parte caminho
Value (Valor)
servername
Apppath
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.
Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao.
2.
Parmetro
Value (Valor)
servername
Apppath
Visual C# Consolidado
875
Methodname
O nome de um mtodo pblico que seja exposto pelo seu servio Web.
Se deixar em branco, a Web pgina Descrio do servio no mostrada,
listando cada mtodo pblico no arquivo.asmx disponveis. (Opcional)
Parmetro
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>
Implantar o servio da Web em um servidor Web. Para obter mais informaes, consulte
Publicao servio XML da Web e implantao. Este procedimento usa o seguinte servio
da Web implantado como um math.asmx arquivo que seja acessvel a partir da raiz virtual
de um http://www.contoso.com Site, como um exemplo:
C#
<%@ WebService Language="C#" Class="Math" %> using System.Web.Services; public class Math :
WebService { [ WebMethod ] public int Add(int num1, int num2) { return num1+num2; } [
WebMethod ] public int Subtract(int num1, int num2) { return num1-num2; } }
Visual Basic
<%@ WebService Language="VB" Class="Math" %> Imports System.Web.Services Public Class Math
Inherits WebService <WebMethod> _ Public Function Add(num1 As Integer, num2 As Integer) As
Integer Return num1 + num2 End Function <WebMethod> _ Public Function Subtract(num1 As
Integer, num2 As Integer) As Integer Return num1 - num2 End Function End Class
2.
Crie uma pgina HTML com um formulrio que tenha o method atributo definido como
POST. Use o seguinte formato:
<form method=POST action='http://www.contoso.com/math.asmx/Subtract'> <input type="text"
size="5" name='num1'\"></td> - <input type="text" size="5" name='num2'\"></td> = <input
type=submit value="Subtract"> </td> </form>
Visual C# Consolidado
876
Parmetro
Value (Valor)
Mtodo
POST Se voc desejar para testar seu servio da Web usando HTTP-POST, use
POST.
AO
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.
3.
Nome
='num1'
Tipo =
enviar
Adicionar um boto Enviar para voc pode enviar os dados de volta para o mtodo
servio Web.
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
Visual C# Consolidado
877
Na campo Endereo do navegador, digite o URL bsico para o XML Web Service usando
este formato:
http://servername/projectname/xmlwebservicename.asmx
Parmetro
Valor
servername
projectname
No campo Endereo do navegador, digite o URL bsico para o XML Web Service e
fornea a seqncia de caracteres de consulta WSDL utilizando este formato:
http://servername/projectname/xmlwebservicename.asmx?WSDL
Parmetro
Valor
servername
projectname
Visual C# Consolidado
878
Na campo Endereo do navegador, digite o URL bsico para o XML Web Service com o
nome e parmetros do mtodo na seqncia de caracteres de consulta, usando o seguinte
formato:
http://servername/projectname/xmlwebservicename.asmx/methodname?parametername0=value0&par
ametername1=value1&...¶meternamen=valuen
Parmetro
Valor
servername
projectname
parametername
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
Visual C# Consolidado
879
2.
Na caixa de dilogo New Web Site, selecione o cone ASP.NET Web Service.
3.
4.
Digite o endereo do servidor Web no qual voc ir desenvolver o XML Web Services. Por
exemplo, usar " http://MyServer/Application " ou " http://MyServer " simplesmente para
desenvolver o diretrio raiz. Voc tambm pode criar seu site no sistema de arquivos,
escolhendo um endereo arquivo, como " C:\Application "
Clique OK para criar o projeto.
O Visual Studio cria automaticamente os arquivos necessrios e referncias para suporte um XML
Web Services . Quando concludo, a IDE exibe o arquivo cdigo de servio no modo de exibio
de cdigo. Para obter mais informaes, consulte ASP.NET XML Web Service Basics.
Consulte tambm
Visual C# Consolidado
880
Se o XML Web Services no herdar desta classe, ele pode acessar os objetos intrnsecos
ASP.NET a partir da propriedade System.Web.HttpContext.Current. Isso pode ser o caso quando
seu XML Web Services necessitar herdar de uma classe base personalizada. A classe que
implementar o XML Web Services deve ser pblica e deve ter um construtor pblico padro (um
construtor sem parmetros). Isso torna possvel para o ASP.NET criar uma instncia da classe de
XML Web Service para processar solicitaes XML Web Services de entrada.
Para herdar a partir da classe System.Web.Services.WebService
Clique duas vezes no seu arquivo .vb ou .cs (por exemplo, Service1.vb ou Service1.cs)
no Solution Explorer para abrir o Editor de Cdigo.
2.
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.
BufferResponse
Visual C# Consolidado
881
CacheDuration
Description
EnableSession
MessageName
TransactionOption
BufferResponse
A propriedade BufferResponse do atributo WebMethod habilita o buffer de respostas para um
mtodo do XML Web Service. Quando definida como true, a configurao padro, o ASP.NET faz
um buffer inteiro da resposta antes de envi-la para para o cliente. O buffer muito eficiente e
ajuda a melhorar o desempenho, minimizando a comunicao entre o processo ativo e o processo
do IIS. Quando definida como false, o ASP.NET faz buffers da resposta em blocos de 16 KB.
Normalmente, voc deve definir essa propriedade para false somente se voc no quiser todo o
contedo da resposta na memria de uma s vez. Por exemplo, voc est mandando de volta
uma coleo que est transmitindo seus itens a partir de um banco de dados. A menos que seja
especificado em contrrio, o valor padro true. Para obter mais informaes, consulte
Propriedade WebMethodAttribute.BufferResponse.
C#
public class Service1 : System.Web.Services.WebService {
[System.Web.Services.WebMethod(BufferResponse=false)] public DataSet GetBigData() {
//implementation code } }
CacheDuration
A propriedadeCacheDuration do atributo WebMethod permite fazer um cache dos resultados
para um mtodo de XML Web Service. O ASP.NET far cache dos resultados para cada conjunto
nico de parmetros. O valor desta propriedade especifica o nmero de segundos que o ASP.NET
deve manter o cache dos resultados. Um valor de zero desativa o cache de resultados. A menos
que seja especificado em contrrio, o valor padro zero. Para obter mais informaes, consulte
Propriedade WebMethodAttribute.CacheDuration.
C#
public class Service1 : System.Web.Services.WebService {
[System.Web.Services.WebMethod(CacheDuration=60)] public double ConvertTemperature(double
dFahrenheit) { return ((dFahrenheit - 32) * 5) / 9; } }
Description
A propriedade Description do atributo WebMethod fornece uma descrio para um mtodo de
XML Web Service que ser exibido na pgina de ajuda do servio. A menos que seja especificado
em contrrio, o valor padro uma string vazia. Para obter mais informaes, consulte
Propriedade WebMethodAttribute.Description.
882
EnableSession
A propriedade EnableSession do atributo WebMethod habilita o estado da sesso para um
mtodo de XML Web Service. Uma vez ativada, o XML Web Service pode acessar a coleo de
estado da sesso diretamente do HttpContext.Current.Session ou com a propriedade
WebService.Session, se ela herda a partir da classe base WebService. A menos que seja
especificado em contrrio, o valor padro false. Para obter mais informaes, consulte
Propriedade WebMethodAttribute.EnableSession.
C#
public class Service1 : System.Web.Services.WebService {
[System.Web.Services.WebMethod(EnableSession=true)] public double ConvertTemperature(double
dFahrenheit) { Session["Conversions"] = (int) Session["Conversions"] + 1; return ((dFahrenheit - 32) * 5)
/ 9; } [System.Web.Services.WebMethod(EnableSession=true)] public int GetNumberOfConversions() {
return (int) Session["Conversions"]; } }
MessageName
A propriedade MessageName do atributo WebMethod permite o XML Web Service identificar
cada mtodo sobrecarregado usando um alias. A menos que seja especificado em contrrio, o
valor padro o nome do mtodo. Ao especificar a propriedade MessageName, as mensagens
SOAP resultantes refletiro esse nome em vez do nome original do mtodo. Para obter mais
informaes, consulte Propriedade WebMethodAttribute.MessageName.
Fornecendo um nome de mensagem para um mtodo de XML Web Service
Use a propriedade MessageName do atributo WebMethod , como mostrado abaixo:
C#
public class Service1 : System.Web.Services.WebService {
[System.Web.Services.WebMethod(MessageName="AddDoubles")] public double Add(double
dValueOne, double dValueTwo) { return dValueOne + dValueTwo; }
[System.Web.Services.WebMethod(MessageName="AddIntegers")] public int Add(int iValueOne, int
iValueTwo) { return iValueOne + iValueTwo; } }
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"
Visual C# Consolidado
883
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
A propriedade TransactionOption do atributo WebMethod permite o mtodo de XML Web
Service participar como o objeto raiz de uma transao. Apesar de voc poder definir a
propriedade TransactionOption para qualquer valor da enumerao TransactionOption, um
mtodo de XML Web service s possui dois comportamentos possveis; ele no participa de uma
transao (Disabled, NotSupported, Supported), ou ele cria uma nova transao (Required,
RequiresNew). A menos que seja especificado em contrrio, o valor padro
TransactionOption.Disabled. Para obter mais informaes, consulte Propriedade
WebMethodAttribute.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.
Criando uma nova transao com um mtodo de XML Web Service
1.
2.
3.
Visual C# Consolidado
884
Descrio
Com o
depurador
Sem o
depurador
Esse mtodo possibilita que voc possa executar seu cdigo como ele normalmente
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
navegador
Este mtodo compila o projeto e abre uma pgina da Web escolhida no Solution
Explorer. O Visual Studio compila e executa o projeto em um navegador padro
dentro do Visual Studio.
No Solution Explorer, clique com o boto direito do mouse no arquivo .asmx do XML Web
Service que voc deseja executar, e clique Set As Start Page no menu de atalho.
No menu Debug, clique em Start.
Este comando instrui o Visual Studio a executar o XML Web Service no depurador.
3.
No Solution Explorer, clique com o boto direito do mouse no arquivo.asmx do XML Web
Service que voc deseja executar, e clique Set As Start Page no menu de atalho.
No menu Debug, clique em Start Without Debugging.
O Visual Studio salva todos os arquivos no projeto e os compila. Uma vez compilados, o
Visual Studio inicia o navegador padro e navega para a pgina inicial do projeto.
3.
Para interromper a execuo do XML Web Service e retornar ao Code Editor, feche o
navegador.
No Solution Explorer, clique com o boto direito do mouse no arquivo.asmx do XML Web
Service que voc deseja executar, e clique em View in Browser no menu de atalho.
Visual C# Consolidado
885
O Visual Studio compila o XML Web Service e inicia a pgina inicial especificada dentro do
IDE.
2.
Para interromper a execuo do XML Web Service e retornar para o Code Editor, feche o
navegador.
O Visual Studio salva todos os arquivos no projeto que voc modificou desde a ltima
compilao.
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.
2.
Visual C# Consolidado
886
3.
4.
5.
6.
Clique no cone ao lado da caixa suspensa Connect to: para abrir a caixa de dilogo
Open Web Site.
Na caixa Open Web Site, selecione a localidade para a qual voc deseja copiar o projeto.
Usando os cones de seta, selecione arquivos do site da Web de origem para copi-los
para o site da Web remoto.
Clique em Copy Web Site para copiar o site da Web.
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.
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.
Visual C# Consolidado
887
acessvel para compilar a classe proxy em montagem para o aplicativo Console. Como
alternativa, a classe proxy podem ser compilado em um conjunto e implantado onde o aplicativo
Console possam acess-lo.
Para criar um aplicativo cliente console Servio da Web
1.
Para obter mais informaes, consulte Criando um proxy de servio da Web XML.
2.
3.
4.
Chame o mtodo da classe proxy que se comunica com o mtodo de servio da Web.
C#
UsageCount = counter.ServiceUsage();
5.
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."); } }
Visual C# Consolidado
888
2.
3.
4.
5.
6.
Dentro do funo callback, chame o mtodo final sobre o objeto estado obtidos na etapa
anterior.
Visual C# Consolidado
889
C#
long[] results = pf.EndFactorize(ar);
Exemplo
C#
using System; using System.Runtime.Remoting.Messaging; using MyFactorize; class TestCallback { public
static void Main(){ long factorizableNum = 12345; PrimeFactorizer pf = new PrimeFactorizer(); //Instantiate
an AsyncCallback delegate to use as a parameter //in the BeginFactorize method. AsyncCallback cb = new
AsyncCallback(TestCallback.FactorizeCallback); // Begin the Async call to Factorize, passing in our //
AsyncCalback delegate and a reference // to our instance of PrimeFactorizer. IAsyncResult ar =
pf.BeginFactorize(factorizableNum, cb, pf); // Keep track of the time it takes to complete the async call // as
the call proceeds. int start = DateTime.Now.Second; int currentSecond = start; while (!ar.IsCompleted){ if
(currentSecond < DateTime.Now.Second) { currentSecond = DateTime.Now.Second;
Console.WriteLine("Seconds Elapsed..." + (currentSecond - start).ToString() ); } } // Once the call has
completed, you need a method to ensure the // thread executing this Main function // doesn't complete prior
to the call-back function completing. Console.Write("Press Enter to quit"); int quitchar = Console.Read(); }
// Set up a call-back function that is invoked by the proxy class // when the asynchronous operation
completes. public static void FactorizeCallback(IAsyncResult ar) { // You passed in our instance of
PrimeFactorizer in the third // parameter to BeginFactorize, which is accessible in the // AsyncState
property. PrimeFactorizer pf = (PrimeFactorizer) ar.AsyncState; long[] results; // Get the completed results.
results = pf.EndFactorize(ar); //Output the results. Console.Write("12345 factors into: "); int j; for (j = 0;
j<results.Length;j++){ if (j == results.Length - 1) Console.WriteLine(results[j]); else Console.Write(results[j]
+ ", "); } } }
2.
Visual C# Consolidado
890
ar.AsyncWaitHandle.WaitOne();
3.
Quando o mtodo de espera retorna, o cliente chama o End mtodo para obter os
resultados.
C#
results = pf.EndFactorize(ar);
Exemplo
C#
// -----------------------------------------------------------------------// Async Variation 2. // Asynchronously
invoke the Factorize method, //without specifying a call back. using System; using
System.Runtime.Remoting.Messaging; // MyFactorize, is the name of the namespace in which the proxy
class is // a member of for this sample. using MyFactorize; class TestCallback { public static void Main(){
long factorizableNum = 12345; PrimeFactorizer pf = new PrimeFactorizer(); // Begin the Async call to
Factorize. IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null); // Wait for the asynchronous
operation to complete. ar.AsyncWaitHandle.WaitOne(); // Get the completed results. long[] results; results =
pf.EndFactorize(ar); //Output the results. Console.Write("12345 factors into: "); int j; for (j = 0;
j<results.Length;j++){ if (j == results.Length - 1) Console.WriteLine(results[j]); else Console.Write(results[j]
+ ", "); } } }
Crie um aplicativo da Web que tenha uma referncia da Web para um XML Web Services.
Uma referncia da Web para qualquer XML Web Services vlido bastar para esta explicao
passo a passo. Por exemplo, voc pode usar o aplicativo da Web descrito em Passo-a-Passo:
acessando um XML Web Services utilizando Visual Basic ou Visual C#
Adicionando uma classe Installer
Visual C# Consolidado
891
2.
Na caixa de dilogo Add New Project, no n Visual Basic, selecione Class Library.
3.
2.
Na caixa de dilogo Add New Item, selecione Installer Class e altere o Name para
WebServiceInstaller.vb.
Quando voc clicar em Add, a classe ser adicionado ao projeto, e o designer para a classe
Installer abrir.
3.
4.
Visual C# Consolidado
892
& "/" & SvcName & "/Service1.asmx" FoundIt = True End If End If Next Node If Not FoundIt Then
Throw New InstallException("Config file did not contain a ServerName section") End If ' Writes out
the new config file. XmlDocument.Save(FileInfo.FullName) Finally installlog.WriteLine("Ending edit
of config file") installlog.Close() End Try End Sub
O cdigo acima primeiro cria um arquivo de log de instalao que ir gravar o andamento
de uma ao personalizada. O namespace System.Reflection usado para localizar o
assembly que est sendo instalado e para localizar o arquivo .config associado. O modelo
de documento do XML usado para fazer uma iterao atravs do arquivo .config at a
seo appSettings ser localizada. Quando a chave servername.service for encontrada, seu
valor associado alterado para incluir os parmetros que foram passados, redirecionando o
aplicativo para usar o novo XML Web Services.
5.
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.
2.
Na caixa de dilogo Add New Project, no painel Project Types, expanda o n Other
Project Types, e selecione o n Setup and Deployment Projects.
No painel Templates, selecione Web Setup Project. Na caixa Name, nomeie o projeto
WebAppSetup.
Quando voc clicar em OK, o projeto ser adicionado a soluo e o File System Editor
ser aberto.
3.
4.
5.
6.
Aes personalizadas so usadas para executar cdigo no final de uma instalao para executar
aes que no podem ser tratadas durante a instalao. O cdigo para uma ao personalizada
pode estar contido em um arquivo .dll, .exe, script, ou assembly. Para mais informaes sobre
aes personalizadas, consulte Gerenciamento aes na implantao personalizada.
Visual C# Consolidado
893
2.
3.
4.
5.
6.
7.
Clique duas vezes no Web Application Folder, e selecione Primary output from
InstallerClassLibrary (Active).
Na janela Properties, verifique se a propriedade InstallerClass est definida como True.
Selecione a propriedade CustomActionData e digite o texto a seguir:
/ServerName=[EDITA1] /ServiceName=[EDITA2]
A propriedade CustomActionData fornece os dois parmetros que so passados para a
ao personalizada, separados por um espao.
Adicionando uma caixa de dilogo
2.
3.
4.
5.
Na caixa de dilogo Add Dialog, escolha a caixa de dilogo Textboxes (A) e clique em
OK.
6.
No menu Action, escolha Move Up, e repita at o dilogo Textboxes (A) estar localizado
acima do dilogo Installation Address.
7.
Edit1Label
Nome do servidor:
Edit1Value
LocalHost
Observao
Isso especifica um servidor padro. Voc pode inserir seu prprio nome de
servidor padro aqui.
Visual C# Consolidado
894
Edit2Label
Nome do servio:
Edit2Value
<nome do servio>
Edit3Visible False
Edit4Visible False
8.
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.
2.
2.
3.
No computador do servidor Web, clique duas vezes no arquivo Setup.exe para executar o
instalador.
Visual C# Consolidado
895
personalizado, como o uso de cabealhos SOAP. Alm disso, o ASP.NET oferece a capacidade,
conhecida como representao, para executar uma solicitao usando as credenciais do cliente.
Para obter mais informaes sobre como usar a representao, consulte Representao
ASP.NET.
Este tpico resume as opes disponveis para servios da Web criados com ASP.NET
autenticao e autorizao. Para obter mais informaes sobre opes de segurana disponveis
para aplicativos da Web ASP.NET, consulte Proteger Aplicativos da Web ASP.NET Como Criando
aplicativos ASP.NET seguros: autenticao, autorizao e comunicao seguraSegurana de
aplicativos da Web ASP.NET.
Para obter mais informaes sobre como acessar recursos remotos de aplicativos-baseado em
ASP.NET, consulte os tpicos " modelo Impersonation / Delegation " e confiveis modelo
subsistema " " no captulo 3 de Criando aplicativos ASP.NET Seguros.
Opes de autenticao para servios XML da Web
Servios da Web criados com ASP.NET tem vrias opes para autenticar clientes, portanto, a
pergunta grande: qual um for da direita para um servio da Web especfico? Para escolher a
opo Segurana direita, uma das coisas para escolher entre um desenvolvedor tem o nvel de
segurana e desempenho. Para alguns servios da Web, essencial que credenciais cliente so
enviados atravs da rede usando criptografia, portanto, um algoritmo que criptografa as
credenciais do cliente essencial. Por exemplo, um desenvolvedor gravar um servio da Web que
processa cartes de crdito provavelmente worries mais sobre as credenciais do cliente seja
roubado que a sobrecarga extra de criptografar os dados de carto de crdito.
A tabela a seguir um resumo das opes de autenticao disponveis para servios da Web
criado com o ASP.NET. Opes prefixo com o Windows so uma parte das opes de
autenticao Windows disponveis para servios da Web criados com ASP.NET.
Resumo das opes de autenticao
Opo de
autenticao
Windows-Basic
Descrio
Use para identificao no seguros de clientes, como o nome de usurio e
senha so enviados em Base seqncias codificado 64-em texto sem
formatao. Senhas e nomes de usurio so codificado, mas no
criptografados, neste tipo de autenticao. Um usurio determinado, malintencionado equipado com uma ferramenta monitoramento de rede-pode
interceptar nomes de usurio e senhas.
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-Digest
Visual C# Consolidado
896
WindowsIntegrada do
Windows
Usa NTLM ou Kerberos. Usa uma troca criptogrfica com navegador da Web
Microsoft Internet Explorer do usurio.
Windowscertificados de
cliente
Formulrios
SOAP cabealhos
personalizados
Para todas as opes listadas acima, exceto o uso de cabealhos SOAP, as configuraes de
segurana so especificadas usando uma combinao de arquivos de configurao e o IIS. Para
obter mais informaes sobre arquivos de configurao, consulte ASP.NET Configuration. A
opo cabealhos SOAP personalizados detalhado seguinte na seo Autorizao como essa
soluo envolve a autenticao e autorizao.
A autenticao do Windows
O IIS e ASP.NET fornecem suporte para autenticar aplicativos da Web, incluindo servios da Web,
usando segurana criado na para Windows. Windows fornece trs opes para autenticao:
BASIC, Digest e integrada do Windows. Alm disso, cada opo pode ser usada com SSL. Como
todos os Windows autenticao opes exceto Basic criptografar os dados em algum formulrio, o
nvel de criptografia oferecidos pelo SSL adicionais normalmente somente usada em juntamente
com Basic ou certificados de cliente.
Independentemente do que opo autenticao Windows usada, os procedimentos para
configurar o servio da Web e cliente servio Web so semelhantes. Para obter mais informaes,
consulte Como configurar um servio da Web XML para a autenticao do Windows:. Nenhum
cdigo precisa para ser adicionado ao um servio da Web para usar a autenticao do Windows,
como as opes de autenticao so definidas em um arquivo de configurao e do IIS. Cdigo
para passar o cliente credenciais para o servio da Web deve ser adicionado a um cliente de
servios da Web.
Se SSL for escolhido como parte do mecanismo de autenticao usado por um servio da Web,
SSL precisar ser configurado para o aplicativo da Web que hospeda o servio da Web ou para o
servio da Web propriamente dito, usando o IIS. O descrio do servio e, conseqentemente,
proxy classes gerado a partir do descrio do servio refletir que o servio da Web usa SSL (se o
descrio do servio e pgina Ajuda servio so acessados usando SSL). Ser a URL para o
servio da Web dentro do descrio do servio ser prefixados com HTTPS. Para obter mais
informaes sobre como configurar a SSL, consulte a documentao do IIS.
Visual C# Consolidado
897
Visual C# Consolidado
898
Um cliente de servios da Web para usar cabealhos SOAP para autenticao, deseja enviar suas
credenciais para o servio da Web, adicionando o cabealho SOAP esperado solicitao SOAP
e preenchendo-lo com as credenciais do cliente. Para usar autenticao cabealho SOAP, um
servio da Web deve seguir duas coisas: especificar que espera o cabealho SOAP que contm
as credenciais de autenticao e autorizar o acesso do cliente para o servio da Web.
Visual C# Consolidado
899
3.
4.
Na caixa File Download, escolha Save This File Now e clique em OK.
5.
Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
Para instalar os bancos de dados de exemplo Northwind e Pubs para o SQL Server
1.
2.
3.
4.
Na caixa File Download, escolha Save This File Now e clique em OK.
5.
Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
Para instalar os bancos de dados de exemplo Adventure Works para o SQL Server 2000
1.
2.
3.
4.
Na caixa File Download, escolha Save This File Now e clique em OK.
Visual C# Consolidado
900
5.
Depois de descarregar o arquivo, clique duas vezes no arquivo Nwind.exe para instalar o
banco de dados.
3.
4.
Clique em Go.
5.
Na pgina de resultados, siga o link para a pgina de download do SQL Server Express e
siga as instrues.
Segurana
Sempre verifique se h atualizaes do produto ao instalar um software adicional.
Visual C# Consolidado
901
Esta etapa cria um dataset com base nas tabelas Customers e Orders do banco de dados de
exemplo Northwind.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
2.
3.
Criando os controles para exibir os pedidos para cada cliente (registros filho)
Visual C# Consolidado
902
Pressione F5.
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.
Visual C# Consolidado
903
Em algumas situaes, talvez seja conveniente criar um objeto de conexo sem a assistncia de
qualquer ferramentas de design de dados. Para informaes sobre como criar conexes
programaticamente, consulte Connecting to Data Sources.
Observao
Para obter informaes sobre como conectar aplicativos da Web a dados, consulte Acessando
dados com o ASP.NET.
Criando conexes
Ao usar Visual Studio, conexes so configuradas usando o Add/Modify Connection Dialog Box
(General). A caixa de dilogoAdd Connection aparece quando voc est editando ou criando
conexes dentro de um dos assistentes de dados ou doServer Explorer / Database Explorer ou
quando voc estiver editando propriedades de conexo na janela Properties
Conexes de dados so automaticamente configuradas quando voc executa uma das seguintes
aes:
Ao
Descrio
Visual C# Consolidado
904
Execuo do Assistente de
Configurao para o
TableAdapter.
Execuo do Assistente de
configurao da consulta
TableAdapter.
Essa seqncia de caracteres de conexo particular especifica que a conexo deve usar a
segurana integrada do Windows. Em vez disso uma seqncia de caracteres de conexo pode
incluir um nome de usurio e senha, mas isso no recomendvel, pois esses atributos depois
sero compilados em seu aplicativo representando portanto uma possvel violao de segurana.
Observao de segurana
O armazenamento de detalhes em seqncias de caracteres de conexo (como uma senha)
podem afetar a segurana do seu aplicativo. Utilizar a segurana integrada do Windows uma
maneira mais segura para controlar o acesso a um banco de dados. Para obter mais informaes,
consulte Securing Connection Strings.
Os pares de atributo / valor mais comuns usados pelo OLE DB tambm so representados
separadamente por uma propriedade individual, como DataSourcee Database. Ao trabalhar com um
objeto de conexo, voc pode definir a propriedade ConnectionString como uma nica seqncia
de caracteres, ou voc pode definir propriedades de conexo individuais. (Se sua fonte de dados
exigir valores seqncia de caracteres de conexo que no so representados por propriedades
individuais, ento voc deve definir a propriedade ConnectionString.)
Visual C# Consolidado
905
Visual C# Consolidado
906
.NET Framework, incluindo ADO.NET. Para obter mais informaes, consulte Leveraging
System.Transactions.
Informaes e Segurana de Conexes
Uma vez que abrir uma conexo envolve obter acesso a um recurso importante um banco de
dados existem freqentemente questes de segurana envolvendo a configurao e o trabalho
com uma conexo.
Como voc protege o aplicativo e o seu acesso a fonte de dados depende da arquitetura do seu
sistema. Em um aplicativo baseado na Web, por exemplo, os usurios geralmente obtm acessos
annimos ao Servios de Informaes da Internet (IIS) e, portanto, no fornecem credenciais de
segurana. Nesse caso, seu aplicativo mantm a seu prprio informao de logon e a utiliza (em
vez de qualquer informao de usurio especfica) para abrir a conexo e acessar o banco de
dados.
Observao de segurana
Armazenando detalhes de seqncias de caracteres de conexo (como uma senha) podem afetar
a segurana do seu aplicativo. Usando segurana integrada do Windows uma maneira mais
segura para controlar o acesso a um banco de dados. Para obter mais informaes, consulte
Securing Connection Strings.
Na intranet ou em aplicativos de vrias camadas, voc pode se aproveitar da opo de segurana
integrada fornecida pelo Windows, pelo IIS, e pelo SQL Server. Neste modelo, credenciais de
autenticao de um usurio para a rede local tambm so usadas para acessar recursos de
banco de dados, e no so usados explicitamente nomes de usurio ou senhas na seqncia de
caracteres de conexo. (Normalmente, as permisses so estabelecidas no computador servidor
do banco de dados por meio de grupos, para que voc no precise estabelecer permisses
individuais para cada usurio que pode acessar o banco de dados.) Neste modelo, voc no
precisar armazenar, de modo algum, informaes de logon para a conexo, e no h etapas
adicionais necessrias para proteger as informaes da seqncia de caracteres de conexo.
Para obter mais informaes sobre segurana, consulte as seguintes pginas:
Visual C# Consolidado
907
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.
2.
Visual C# Consolidado
908
3.
4.
5.
Selecione New Connection para configurar uma nova conexo de dados. Para
obter mais informaes, consulte Como: Criar Conexes com Bancos de Dados do Access,
ou Como: Criar conexes com bancos de dados SQL Server.
6.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (include sensitive data), e clique em Next.
7.
Clique em Next na pgina Save connection string to the Application Configuration file.
8.
9.
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.
3.
Clique em OK.
4.
Clique em Next na pgina Save connection string to the Application Configuration file.
5.
6.
7.
Voc pode criar controles ligados a dados, arrastando itens da janela Data Sources para seu
formulrio.
Visual C# Consolidado
909
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.
Criando o Projeto
Visual C# Consolidado
910
2.
3.
4.
5.
6.
7.
8.
Clique em Finish.
9.
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.
Visual C# Consolidado
911
escolha Import and Export Settings no menu Tools. Para obter mais informaes, consulte
Visual Studio Settings.
As tarefas ilustradas nesta explicao passo-a-passo incluem:
Criando um novo projeto Windows Application.
2.
3.
4.
Na pgina Choose your Data Connection, selecione New Connection para configurar
uma nova conexo de dados.
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.
7.
Clique em Next.
8.
Clique Next na pgina Save connection string to the Application Configuration file.
9.
Visual C# Consolidado
912
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.
No menu Data, clique Add New Data Source para iniciar o Data Source Configuration
Wizard.
Selecione Database na pgina Choose a Data Source Type.
Conclua o assistente e um DataSet tipado adicionado ao seu projeto. Para obter mais
informaes, consulte Assistente para Configurao da Fonte de Dados.
2.
3.
4.
Clique em Add.
O DataSet adicionado ao projeto e abre no Dataset Designer.
Visual C# Consolidado
913
5.
Arraste itens da guia DataSet da Toolbox no designer. Para obter mais informaes,
consulte Como editar um DataSet:.
-ouArraste itens de uma conexo ativa em Server Explorer / Database Explorer para o
Dataset Designer.
Criar e configurar uma fonte de dados em seu aplicativo, criando um dataset com o
Dataset Designer.
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
Para concluir esta explicao passo a passo, voc precisa:
2.
3.
4.
914
1.
2.
3.
2.
3.
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
Expanda a conexo de dados que voc criou no Server Explorer, e em seguida, expanda
o n Tables.
Arraste a tabela Customers do Server Explorer para o Dataset Designer.
Uma tabela de dados Customers e CustomersTableAdapter so adicionadas ao dataset.
915
O dataset que voc acabou de criar agora est disponvel na janela Data Sources. Voc
pode selecionar itens na janela Data Sources e arrast-los para um formulrio. Para obter
mais informaes, consulte Viso Geral da Exibio dados.
Adicione mais consultas aos TableAdapters. Para obter mais informaes, consulte Como:
Criar Consultas TableAdapter:.
2.
3.
4.
2.
3.
Clique em Add.
O Visual Studio ir adicionar um arquivo chamado DataSet1.xsd ao projeto e o abrir no
Dataset Designer.
Adicionando um DataTable novo ao Dataset
Visual C# Consolidado
916
Observao
Para criar uma tabela de dados que inclui um TableAdapter, consulte Explicao passo a passo:
Criando um Adaptador de Tabela com Mltiplas Consultas.
2.
Clique com o boto direito do mouse na tabela Music. Aponte para Add, e clique Column.
2.
3.
4.
Todas as tabelas de dados devem ter uma chave primria. Uma chave primria identifica
exclusivamente um registro especfico em uma tabela de dados.
Agora que voc criou a tabela, voc pode desejar executar uma das seguintes aes:
Para
Consulte
Editar dados
Visual C# Consolidado
917
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.
Criando um novo aplicativo do Windows
2.
3.
Clique em Add.
O Visual Studio ir adicionar um arquivo chamado Dataset1.xsd ao projeto e abri-lo no
Dataset Designer.
Adicionando duas novas tabelas de dados ao dataset
Visual C# Consolidado
918
2.
3.
4.
2.
3.
4.
5.
Propriedade DataType
CompanyName
String
Contact
String
ContactTitle
String
2.
3.
4.
5.
Propriedade DataType
CustomerID
Int16
OrderDate
DateTime
ShippedDate
DateTime
Visual C# Consolidado
919
O relacionamento criado entre a coluna comum de cada tabela neste caso, a coluna
CustomerID.
2.
3.
4.
5.
6.
7.
Clique em OK para criar o relacionamento; uma linha de relao aparece no designer entre
as duas tabelas.
No menu Data, escolha Show Relation Labels.
Salvando seu projeto
Agora que voc criou as tabelas relacionadas, voc pode desejar executar uma das seguintes
aes:
Para
Consulte
Visual C# Consolidado
920
Editar dados
Visual C# Consolidado
921
Visual C# Consolidado
922
contiver uma tabela de clientes, voc pode criar uma consulta que preenche a tabela com cada
cliente cujo nome comea com uma certa letra, e outra consulta que preenche a tabela com todos
os clientes localizados no mesmo estado. Para preencher uma tabela Customers com clientes em
um estado determinado voc pode criar uma consulta FillByState que leva um parmetro para o
valor de estado: SELECT * FROM Customers WHERE State = @State. Voc executa a consulta
chamando o mtodo FillByState e passando o valor do parmetro como este:
CustomerTableAdapter.FillByState("WA"). Para obter mais informaes, consulte Como: Criar
Consultas 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
O TableAdapter adiciona uma propriedade no disponvel na classe base DataAdapter. Por
padro, sempre que voc executar uma consulta para preencher uma tabela de dados do
TableAdapter, os dados sero limpos e somente os resultados da consulta so carregados na
tabela. Defina a propriedade ClearBeforeFill do TableAdapter como false se voc deseja adicionar
ou mesclar os dados retornados de uma consulta com os dados existentes na tabela de dados.
Independentemente de voc limpar os dados, voc precisar explicitamente enviar as
atualizaes de volta ao banco de dados, se desejar. Portanto lembre-se de salvar quaisquer
alteraes feitas nos dados da tabela antes de executar outra consulta que preencha a tabela.
Para obter mais informaes, consulte Como: atualizar dados usando um TableAdapter.
Herana do TableAdapter
Os TableAdapters estendem a funcionalidade dos adaptadores padro de dados, encapsulando
um DataAdapter configurado. Por padro, o TableAdapter herda de Component e no pode ser
convertido (casting) para a classe DataAdapter. Converter um TableAdapter para um
DataAdapter resulta em uma InvalidCastException. Para alterar a classe base de um
TableAdapter, voc pode digitar uma classe que deriva do Component na propriedade Base
Class do TableAdapter no Dataset Designer.
Mtodos e propriedades 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.
Estes so os mtodos e propriedades mais usados de TableAdapters:
Membro
Descrio
TableAdapter.Fill
Visual C# Consolidado
923
TableAdapter.Update
TableAdapter.GetData
TableAdapter.Insert
Visual C# Consolidado
924
Os TableAdapters oferecem suporte a tipos anulveis Nullable(Of T) e T?. Para obter mais
informaes sobre tipos nullable no Visual Basic, consulte Value Types that Might Not Have a
Defined Value. Para obter mais informaes sobre tipos anulveis em C#, consulte Usando
Nullable tipos (C# programao guia).
Criando e configurando uma fonte de dados em seu aplicativo, criando um DataSet com o
Data Source Configuration Wizard.
Abrindo o novo DataSet no Dataset Designer.
2.
3.
4.
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.
2.
Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source
Configuration Wizard.
Visual C# Consolidado
925
3.
4.
Selecione New Connection para abrir a caixa Add/Modify Connection. Para obter
mais informaes, consulte Add/Modify Connection Dialog Box (General).
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
2.
2.
3.
4.
Adicione uma clusula WHERE consulta para que ela seja lida:
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region,
PostalCode, Country, Phone, Fax FROM Customers WHERE City = @City
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 = ?)
5.
Visual C# Consolidado
926
Observao
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.
6.
2.
3.
Altere para modo de exibio de cdigo, selecionando Code a partir do menu View.
4.
Executando o aplicativo
Pressione F5.
Adicione um controle TextBox e um controle Button e passar o valor na caixa de texto para
a consulta. (CustomersTableAdapter.FillByCity(NorthwindDataSet.Customers, TextBox1.Text)).
Visual C# Consolidado
927
aplicativo no usar DataSets, use objetos de comando para executar instrues SQL ou
procedimentos armazenados diretamente em um banco de dados.
Para obter mais informaes
Consulte
TableAdapters
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:
Como criar e executar uma instruo SQL que retorna um nico valor:
Como: criar e executar uma instruo SQL que no retorna nenhum valor
Objetos Command
Objetos de comando (command) lhe do a capacidade de executar instrues SQL e
procedimentos armazenados diretamente em um banco de dados, sem precisar de um DataSet,
TableAdapter, ou DataAdapter. (O termo objeto de comando refere-se ao comando especfico
.NET Framework Data Provider que o aplicativo est usando. Por exemplo, se seu aplicativo
estiver usando o .NET Framework Data Provider para SQL Server, o objeto de comando poderia
ser SqlCommand.)
Visual C# Consolidado
928
Voc configura comandos para consultar dados usando instrues SQL ou procedimentos
armazenados, configurando a propriedade CommandType do comando de dados para um dos
valores na enumerao CommandType. Defina o CommandType. para Text para executar
instrues SQL, ou defina-o para StoredProcedure para executar procedimentos armazenados.
Em seguida, defina a propriedade CommandText como um instruo SQL ou como o nome do
procedimento armazenado. Seguida, voc pode executar o comando de dados chamando um dos
mtodos de execuo (ExecuteReader, ExecuteScalar, ExecuteNonQuery).
Cada um dos .NET Framework Data Providers oferece um objeto comando otimizado para bancos
de dados especficos.
Usando comandos de dados, voc pode fazer o seguinte em seu aplicativo:
Executar comandos Select (selecionar) que retornam um resultado que voc pode ler
diretamente, em vez de carreg-lo no DataSet. Para ler os resultados, use uma leitora de
dados (objeto OleDbDataReader, SqlDataReader, OdbcDataReader ou OracleDataReader),
que funciona como um cursor somente para leitura, somente encaminhamento ao qual voc
pode vincular controles.. Esta uma estratgia til para reduzindo uso de memria e carregar
dados somente para leitura muito rapidamente.
Executar comandos de definio de banco de dados (DDL) para criar, editar e remover
tabelas, procedimentos armazenados e outras estruturas de banco de dados. (Voc deve ter
permisses para executar essas aes, claro.)
Executar comandos SQL dinmicos para atualizar, inserir ou excluir registros em vez de
atualizar tabelas DataSet e depois copiar alteraes para o banco de dados.
Executar comandos que retornam um valor escalar (isto , um valor nico), como os
resultados de uma funo agregada (SUM, COUNT, AVG, e assim por diante).
Executar comandos que retornam dados de um banco de dados do SQL Server (verso
7.0 ou posterior) no formato XML. Um uso tpico executar uma consulta e obter novamente
dados em formato XML, aplicar um transformao XSLT a ele (para converter os dados em
HTML), e enviar os resultados para um navegador.
Uma conexo
o banco de dados.
O nome ou texto de um comando O comando inclui o texto real de uma intruo SQL
ou o nome de um procedimento armazenado para executar.
Parmetros Um comando pode exigir que voc passe valores de parmetro junto com
ele (parmetros de entrada). O comando tambm pode retornar valores sob a forma de um
valor de retorno ou valores de parmetro de sada. Cada comando tem um conjunto de
parmetros que voc pode definir ou ler individualmente para passar ou receber valores. Para
obter mais informaes, consulte Como: Definir e Obter Parmetros para Objetos de
Comando.
Voc executa um comando usando um mtodo apropriado para os resultados que voc espera
que sejam retornados. Por exemplo, se voc espera linhas, voc chama o comando do mtodo
ExecuteReader, que retorna registros em uma leitora de dados. Se voc estiver executando um
comando UPDATE, INSERT, ou Delete, voc chama o mtodo do comando ExecuteNonQuery, que
retorna um valor indicando o nmero de linhas afetadas. Se voc estiver executando uma funo
agregada, como retornar a contagem de pedidos para um cliente, voc chamar o mtodo
ExecuteScalar.
Visual C# Consolidado
929
Criar um DataGridView ligado a dados arrastando a partir da janela Data Sources para um
formulrio.
Pr-requisitos
Visual C# Consolidado
930
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto DatasetWalkthrough criado e adicionado ao Solution Explorer.
Criando o NorthwindDataSet
Esta etapa cria um dataset usando o Data Source Configuration Wizard baseado na tabela
Customers no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco de dados de
exemplo Northwind para criar a conexo. Para informaes sobre como configurar o banco de
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
2.
Na janela Data Sources, clique em Add New Data Source para iniciar o Data Source
Configuration Wizard.
3.
4.
o
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (sensitive data), e clique em Next.
6.
Clique em Next na pgina Save connection string to the Application Configuration file.
7.
8.
Voc pode criar controles com dados vinculados, arrastando itens da janela Data Sources para
um formulrio no seu aplicativo do Windows.
931
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:
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).
Visual C# Consolidado
932
2.
3.
4.
5.
Adicionando cdigo para exibir o esquema XML baseado no arquivo XML em um controle
TextBox.
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.
Criar um novo projeto
Nesta etapa, voc criar um projeto Visual Basic, Visual C#, ou Visual J# que ir conter esta
explicao passo a passo.
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto ReadingXML criado e adicionado no Solution Explorer.
Gere o arquivo XML a ser lido para o DataSet
Porque esta explicao passo a passo enfoca leitura de dados XML em um DataSet, o contedo
de um arquivo XML fornecido.
2.
3.
Visual C# Consolidado
933
4.
o
o
2.
Um controle DataGridView
Um controle TextBox
3.
Propriedade
Configurao
TextBox1
Multiline
true
ScrollBars
Vertical
Name
ReadXmlButton
Text
Read XML
Name
ShowSchemaButton
Text
Show Schema
Button1
Button2
Visual C# Consolidado
934
No procedimento seguinte, voc cria um novo DataSet chamado authors. Para obter mais
informaes sobre DataSets, consulte DataSets no Visual Studio Overview.
Com o arquivo fonte para Form1 selecionado em Solution Explorer, clique no boto View
Designer na barra de ferramentas Solution Explorer.
No Data Tab, Toolbox, arraste um DataSet. para Form1
Selecione Untyped dataset no Caixa de Dilogo Add Dataset, e, em seguida clique em
OK.
DataSet1 adicionado bandeja do componente.
4.
O boto Read XML l o arquivo XML para o DataSet e define propriedades sobre o controle
DataGridView que acopla-o ao DataSet.
3.
4.
O boto Show Schema cria um objeto StringWriter que preenchido com o esquema e exibido
no TextBox.
2.
3.
Visual C# Consolidado
935
Testando
Agora voc pode testar o formulrio para certificar-se de que ele funciona comforme o esperado.
2.
3.
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.
Visual C# Consolidado
936
Web
Depois de ter criado um formulrio que exibe dados, voc pode desejar seguir uma das seguintes
tarefas:
Tarefa
Editar os dados na
fonte de dados
subjacentes
Validar alteraes
feitas nos dados
Validando dados
Salvar dados
Salvando dados
atualizados de volta no
banco de dados
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.
Janela de 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.
Visual C# Consolidado
937
Antes de arrastar itens da janela Data Sources, especifique os controles a serem criados pelo
clique na lista suspensa para cada tabela e coluna e selecione o controle desejado. Para obter
mais informaes, consulte Como: Definir o controle a ser criado quando arrastado da janela Data
Sources:.
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
Diferentemente de adaptadores de dados padres, TableAdapters tm a capacidade para conter
vrias consultas para preencher suas tabelas de dados associadas. Voc pode definir tantas
consultas para um TableAdapter quantas seu aplicativo requerer, contanto que cada consulta
retorne dados que estejam de acordo com o mesmo esquema que sua tabela de dados
associada. Para obter mais informaes, consulte Como: Criar Consultas TableAdapter:.
Marcas inteligentes de dados
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.
Para obter mais informaes sobre o componente BindingSource, consulte:
BindingSource Component
Visual C# Consolidado
938
Controle BindingNavigator
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).
Selecionando o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criando um controle vinculado a dados, arrastando itens da janela Data Sources para seu
formulrio.
Pr-requisitos
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o aplicativo Windows
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto DisplayingDataonaWindowsForm criado e adicionado Solution Explorer.
Criando a fonte de dados
Essa etapa cria uma fonte de dados usando o Data Source Configuration Wizard baseado na
tabela Customers no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco de
Visual C# Consolidado
939
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.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
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.)
2.
Altere o tipo subjacente da tabela Customers para Details selecionando Details na lista
drop-down no n Customers. Para obter mais informaes, consulte Como: Definir o
controle a ser criado quando arrastado da janela Data Sources:.
3.
Altere o tipo suspenso da coluna CustomerID para um rtulo selecionando Label na lista
de controles no n CustomerID.
Criando o formulrio
Crie os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
Visual C# Consolidado
940
Pressione F5.
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:
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).
Visual C# Consolidado
941
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto RelatedDataWalkthrough criado e adicionado ao Solution Explorer.
Criando o DataSet
Esta etapa cria um DataSet com base nas tabelas Customers e Orders do banco de dados de
exemplo Northwind.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Para criar controles para exibir os dados do cliente (customer) (registros pai)
1.
2.
3.
Visual C# Consolidado
942
Para criar controles para exibir os pedidos (orders) para cada cliente (registros filho)
Visual C# Consolidado
943
Prximas etapas
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 :
Definio do tipo subjacente dos itens na Janela de fontes de dados. Para obter mais
informaes, consulte Como: Definir o controle a ser criado quando arrastado da janela Data
Sources:.
Criao de controles que exibem dados, arrastando itens a partir da janela Data Sources
em um formulrio.
Visual C# Consolidado
944
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando o aplicativo Windows
A primeira etapa criar um Windows Application. Atribuir um nome para o projeto opcional
nesta etapa mas ns lhe daremos um nome porque planejamos salv-lo posteriormente.
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto WindowsSearchForm projeto criado e adicionado ao Solution Explorer.
Criando a Fonte de Dados
Essa etapa cria uma fonte de dados a partir de um banco de dados usando o Data Source
Configuration Wizard. Voc deve ter acesso ao banco de dados de exemplo Northwind para criar
a conexo. Para informaes sobre como configurar o banco de dados de exemplo Northwind,
consulte COMO: Instalar Bancos de Dados de Exemplo.
3.
Selecione Database na pgina Choose a Data Source Type, e em seguida clique Next.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e em seguida clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Voc pode criar os controles vinculados a dados arrastando itens da janela Data Sources para
seu formulrio.
945
1.
2.
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 = ?
4.
Executar o aplicativo abre o formulrio pronto para receber o parmetro como entrada.
2.
Dependendo dos seus requisitos de aplicativo, h vrias etapas que voc pode desejar executar
aps criar um formulrio parametrizado. Alguns aprimoramentos que voc pode fazer nesta
explicao passo a passo incluem:
Adio de controles que exibem dados relacionados. Para obter mais informaes,
consulte Como: exibir dados relacionados em um aplicativo Windows:.
Visual C# Consolidado
946
Edio do dataset para adicionar ou remover objetos de banco de dados. Para obter mais
informaes, consulte Como editar um DataSet:.
Consulte tambm
Selecionar o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criando controles com dados vinculados, arrastando itens da janela Data Sources em um
formulrio.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um novo aplicativo Windows
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto LookupTableWalkthrough criado e adicionado Solution Explorer.
Criando uma nova fonte de dados
Visual C# Consolidado
947
3.
4.
5.
Se o seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
2.
Altere o drop type da tabela Orders relacionada para Details selecionando Details na lista
de controles no n Orders. Para obter mais informaes, consulte Como: Definir o controle
a ser criado quando arrastado da janela Data Sources:.
3.
Expanda o n Orders relacionado e altere o drop type da coluna CustomerID para a uma
combo box selecionando ComboBox na lista de controles no n CustomerID.
4.
Arraste o n 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
DataSource
Visual C# Consolidado
948
O Visual Studio define essa propriedade como a primeira coluna aps a chave
primria que tem um tipo de dados string para a tabela que voc arrastar para
o controle.
Se voc precisar fazer um ajuste, defina essa propriedade como o nome da
coluna que voc deseja exibir.
ValueMember
SelectedValue
Executando o aplicativo
Pressione F5.
Navegue pelos pedidos e certifique-se de que a combo box CustomerID exibe o
CompanyName da tabela Customers para cada pedido (em vez da coluna CustomerID da
tabela Orders).
Prximas etapas
Dependendo dos requisitos do seu aplicativo, h vrias etapas que voc pode querer executar
aps criar um formulrio vinculado a dados. Alguns aprimoramentos que voc pode fazer nesse
passo a passo incluem:
Adicionar funcionalidade para enviar atualizaes de volta para o banco de dados. Para
obter mais informaes, consulte Passo-a-Passo: Salvando Dados para um Banco de Dados
(Tabela Simples).
Adicionar a tabela Orders para o dataset selecionando Configure DataSet with Wizard de
dentro da janela Data Sources. Em seguida, voc pode adicionar controles que exibem dados
relacionados arrastando o n Orders relacionado (aquele abaixo da coluna Fax dentro da
tabela Customers) para o formulrio. Para obter mais informaes, consulte Como: exibir
dados relacionados em um aplicativo Windows:.
Passo a passo: Criando um Controle de Usurio que Suporta Ligao de Dados Simples
Ao exibir dados em formulrios em aplicativos Windows, voc pode escolher controles existentes
da Toolbox ou voc pode criar controles personalizados se seu aplicativo requer funcionalidade
que no est disponvel nos controles padro. Este explicao passo a passo mostra como criar
um controle que implementa o DefaultBindingPropertyAttribute. Controles que implementam o
DefaultBindingPropertyAttribute podem conter uma propriedade que pode ser vinculada a
dados. Esses controles so semelhantes aos de um TextBox ou CheckBox
Visual C# Consolidado
949
Para obter mais informaes sobre criao de controle, consulte Developing Windows Forms
Controls at Design Time.
Ao criar controles para uso em cenrios de vinculao de dados, voc precisa implementar um
dos seguintes atributos de vinculao de dados:
Uso atributo DataBinding
Implementar o DefaultBindingPropertyAttribute em controles simples, como a TextBox, que
exibe uma nica coluna (ou propriedade) de dados. (Esse processo descrito nesta pgina de
explicao passo a passo.)
Implementar o ComplexBindingPropertiesAttribute nos controles, como o DataGridView, que exibe
listas (ou tabelas) de dados Para obter mais informaes, consulte Passo a passo: Criando um
Controle de Usurio que Suporta Ligao de Dados Complexa.
Implementar o LookupBindingPropertiesAttribute nos controles, como a ComboBox, que exibe
listas (ou tabelas) de dados, mas tambm precisa apresentar uma nica coluna ou propriedade.
Para obter mais informaes, consulte Passo a passo: Criando um Controle de Usurio que
Suporta Pesquisa de Ligao de Dados.
Esta explicao passo a passo cria um controle simples que exibe dados de uma nica coluna em
uma tabela. Este exemplo usa a coluna Phone da tabela Customers do banco de dados de exemplo
Northwind. O controle de usurio simples ir exibir nmeros de telefone do cliente em um padro
de formato nmero telefnico usando uma MaskedTextBox e configurando a mscara para um
nmero de telefone
Durante esta explicao passo a passo, voc aprender como:
Definir a coluna Phone na janela Data Sources para usar o novo controle.
Acessar o banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo do Windows
2.
Visual C# Consolidado
950
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto SimpleControlWalkthrough criado e adicionado ao Solution Explorer.
Adicionar um Controle de Usurio ao Projeto
Esta explicao passo a passo cria um simples controle de dados-ligveis de um User Control
para adicionar um item User Control ao projeto SimpleControlWalkthrough.
2.
Esta explicao passo a passo expande na existncia de MaskedTextBox para criar o controle
PhoneNumberBox.
2.
3.
Selecione Phone number na caixa de dilogo Input Mask e clique em OK para definir a
mscara.
Adicionando o Atributo de Vinculao de Dados Requerido
Alterne o controle PhoneNumberBox para modo de exibio do cdigo. (No menu View,
escolha Code.)
Substitua o cdigo no PhoneNumberBox com o seguinte:
C#
using System.Windows.Forms; namespace CS {
[System.ComponentModel.DefaultBindingProperty("PhoneNumber")] public partial class
PhoneNumberBox : UserControl { public string PhoneNumber { get{ return maskedTextBox1.Text; }
set{ maskedTextBox1.Text = value; } } public PhoneNumberBox() { InitializeComponent(); } } }
J#
package JSL; /**@attribute System.ComponentModel.DefaultBindingProperty("Text") */ public class
PhoneNumberBox extends System.Windows.Forms.UserControl { /**@property */ public String
get_Text() { return maskedTextBox1.get_Text(); } /**@property */ public void set_Text(String value)
{ this.maskedTextBox1.set_Text(value); } public PhoneNumberBox() { InitializeComponent(); }
private System.Windows.Forms.MaskedTextBox maskedTextBox1; private
System.ComponentModel.IContainer components; #region Component Designer generated code
Visual C# Consolidado
951
3.
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.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Dentro da janela Data Sources voc pode definir o controle a ser criado antes de arrastar itens
para seu formulrio.
Visual C# Consolidado
952
2.
3.
4.
5.
6.
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:
Criar controles que suportam o mais complexo cenrios de vinculao de dados. Para
obter mais informaes, consulte Passo a passo: Criando um Controle de Usurio que Suporta
Ligao de Dados Complexa e Passo a passo: Criando um Controle de Usurio que Suporta
Pesquisa de Ligao de Dados.
Consulte tambm
Passo a passo: Criando um Controle de Usurio que Suporta Ligao de Dados Complexa
Ao exibir dados em formulrios em aplicativos Windows, voc pode escolher os controles
existentes do Toolbox, ou voc pode criar controles personalizados se seu aplicativo requer
funcionalidade que no esto disponveis nos controles padro. Esta explicao passo a passo
mostra como criar um controle que implementa o ComplexBindingPropertiesAttribute. Os controles
que so implementados do ComplexBindingPropertiesAttribute contm o DataSource e que a
Visual C# Consolidado
953
propriedade DataMember pode ser vinculada aos dados. Esses controles so semelhantes aos um
DataGridView ou ListBox.
Para obter mais informaes sobre controle de criao, consulte Developing Windows Forms
Controls at Design Time.
Ao criar controles para uso em cenrios de ligao de dados ser preciso implementar um dos
seguintes atributos de vinculao de dados:
Uso do atributo DataBinding
Implementar os simples controles DefaultBindingPropertyAttribute, como TextBox, que exibir uma
nica coluna (ou propriedade) de dados. Para obter mais informaes, consulte Passo a passo:
Criando um Controle de Usurio que Suporta Ligao de Dados Simples.
Implementar os controle ComplexBindingPropertiesAttribute, como DataGridView, que exibem
listas (ou tabelas) de dados. (Esse processo descrito nesta pgina de explicao passo a
passo.)
Implementar os controles LookupBindingPropertiesAttribute, como ComboBox, que exibir listas (ou
tabelas) de dados, mas tambm precisa apresentar uma nica coluna ou propriedade. Para obter
mais informaes, consulte Passo a passo: Criando um Controle de Usurio que Suporta
Pesquisa de Ligao de Dados.
Esta explicao passo a passo cria um controle que exibe linhas de dados de uma tabela
complexa. Este exemplo usa a tabela Customers do banco de dados de exemplo Northwind. O
complexo controle de usurio exibir a tabela Clientes no controle personalizado DataGridView.
Durante esta explicao passo a passo, voc aprender como:
Definir a tabela Customers no Janela de fontes de dados para usar os novos controle
complexos.
Adicionar o novo controle, arrastando o Data Sources Window no Form1.
Pr-requisitos
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
954
1.
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto ComplexControlWalkthrough criado e adicionado Solution Explorer.
Adicionar um controle de usurio ao projeto
Devido esta explicao passo a passo criar um controle de ligao de dados complexa do User
Control, voc deve adicionar um item User Control no projeto
2.
J#
package JSL; /**@attribute System.ComponentModel.ComplexBindingProperties("DataSource",
"DataMember") */ public class ComplexDataGridView extends System.Windows.Forms.UserControl {
/**@property */ public Object get_DataSource() { return dataGridView1.get_DataSource(); }
/**@property */ public void set_DataSource(Object value) { dataGridView1.set_DataSource(value); }
/**@property */ public String get_DataMember() { return dataGridView1.get_DataMember(); }
/**@property */ public void set_DataMember(String value) {
Visual C# Consolidado
955
3.
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.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Visual C# Consolidado
956
2.
3.
4.
5.
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:
Criando controles que suportam cenrios de pesquisa. Para obter mais informaes,
consulte Passo a passo: Criando um Controle de Usurio que Suporta Pesquisa de Ligao de
Dados.
Consulte tambm
Passo a passo: Criando um Controle de Usurio que Suporta Pesquisa de Ligao de Dados
Ao exibir dados no Windows Forms, voc pode escolher os controles existentes a partir da caixa
de ferramentas, ou voc pode criar controles personalizados se seu aplicativo requer uma
funcionalidade no disponvel nos controles padro. Esta explicao passo a passo mostra como
criar um controle que implementa o LookupBindingPropertiesAttribute. Os controles que
Visual C# Consolidado
957
Definir a coluna CustomerID na tabela Orders na janela Data Sources para usar o novo
controle.
Criar um formulrio para exibir dados no novo controle.
Pr-requisitos
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um aplicativo Windows
958
1.
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto LookupControlWalkthrough criado e adicionado Solution Explorer.
Adicionar um controle de usurio ao projeto
Esta explicao passo a passo cria um controle de pesquisa User Control, para adicionar um
item User Control ao projeto LookupControlWalkthrough
2.
Alternar o controle LookupBox para modo de exibio do cdigo. (No menu View, escolha
Code).
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#
package JSL; /**@attribute System.ComponentModel.LookupBindingProperties("DataSource",
"DisplayMember", "ValueMember", "LookupMember") */ public class LookupBox extends
System.Windows.Forms.UserControl { /**@property */ public Object get_DataSource() { return
comboBox1.get_DataSource(); } /**@property */ public void set_DataSource(Object value) {
comboBox1.set_DataSource(value); } /**@property */ public String get_DisplayMember() { return
Visual C# Consolidado
959
3.
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.
Visual C# Consolidado
960
4.
o
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Dentro da janela Data Sources voc pode definir o controle a ser criado antes de arrastar itens
para seu formulrio.
2.
3.
4.
5.
6.
7.
Clique em OK.
8.
Voc pode criar os controles com dados vinculados, arrastando itens da janela Data Sources
para Form1.
Visual C# Consolidado
961
Consulte tambm
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.
Carregando dados em objetos
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.
Visual C# Consolidado
962
O mtodo TableAdapter.GetData retorna uma nova tabela dados preenchida com dados.
A maneira mais fcil de carregar os objetos personalizados com dados chamar o mtodo
TableAdapter.GetData, efetuar um loop atravs da coleo de linhas na tabela de dados retornados,
e preencher cada objeto com os valores em cada linha. Voc pode criar um mtodo GetData que
retorna uma tabela de dados preenchida para qualquer consulta adicionada a um TableAdapter.
Observao
Visual Studio nomeia as consultas TableAdapter Fill e GetData por padro, mas esses nomes
podem ser alterados para qualquer nome de mtodo vlido.
O exemplo a seguir mostra como percorrer as linhas de uma tabela de dados e preencher um
objeto com dados:
Para obter um exemplo de cdigo completo, consulte Passo-a-Passo: Conectando a dados em
Objetos.
C#
private void LoadCustomers() { NorthwindDataSet.CustomersDataTable customerData =
customersTableAdapter1.GetTop5Customers(); foreach (NorthwindDataSet.CustomersRow customerRow in
customerData) { Customer currentCustomer = new Customer(); currentCustomer.CustomerID =
customerRow.CustomerID; currentCustomer.CompanyName = customerRow.CompanyName; if
(customerRow.IsAddressNull() == false) { currentCustomer.Address = customerRow.Address; } if
(customerRow.IsCityNull() == false) { currentCustomer.City = customerRow.City; } if
(customerRow.IsContactNameNull() == false) { currentCustomer.ContactName =
customerRow.ContactName; } if (customerRow.IsContactTitleNull() == false) {
currentCustomer.ContactTitle = customerRow.ContactTitle; } if (customerRow.IsCountryNull() == false) {
currentCustomer.Country = customerRow.Country; } if (customerRow.IsFaxNull() == false) {
currentCustomer.Fax = customerRow.Fax; } if (customerRow.IsPhoneNull() == false) {
currentCustomer.Phone = customerRow.Phone; } if (customerRow.IsPostalCodeNull() == false) {
currentCustomer.PostalCode = customerRow.PostalCode; } if (customerRow.IsRegionNull() == false) {
currentCustomer.Region = customerRow.Region; } LoadOrders(currentCustomer);
customerBindingSource.Add(currentCustomer); } }
Visual C# Consolidado
963
coleo dentro do BindingSource. Para obter mais informaes, consulte a propriedade List da
classe BindingSource.
Observao
Se sua coleo exigir funcionalidade no fornecida pela implementao base do BindingList,
ento voc deve criar uma coleo personalizada para que voc possa adicionar classe,
conforme o necessrio.
O cdigo a seguir mostra como criar a classe de uma coleo fortemente tipada de objetos Order:
C#
/// <summary> /// A collection of Orders /// </summary> public class Orders:
System.ComponentModel.BindingList<Order> { // Add any additional functionality required by your
collection. }
O cdigo a seguir mostra como adicionar objetos a uma coleo tipada que herda do BindingList:
Observao
Neste exemplo a coleo Orders uma propriedade do objeto Customer.
C#
Order currentOrder = new Order(); currentCustomer.Orders.Add(currentOrder);
Visual C# Consolidado
964
Voc remove objetos de uma coleo, chamando o mtodo Remove ou RemoveAt de sua classe de
coleo personalizada ou do BindingSource.
Observao
Os mtodos Remove e RemoveAt so fornecidos automaticamente para sua coleo personalizada
quando voc herda do BindingList.
O cdigo a seguir mostra como localizar e remover objetos da coleo tipada em um
BindingSource com o mtodo RemoveAt:
C#
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Descrio
Adiciona novos registros a um banco de dados, permitindo que voc
passe valores individuais de coluna como parmetros do mtodo.
Visual C# Consolidado
965
TableAdapter.Update
TableAdapter.Delete
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); }
Descrio
Atualizar registros
existentes em uma tabela
de dados.
Visual C# Consolidado
966
Localize os registros
alterados em uma tabela
de 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:.
Visual C# Consolidado
967
H vrios eventos que so gerados pelo objeto DataTable quando uma alterao est ocorrendo
em um registro:
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 mtodo da linha de dados BeginEdit desliga os eventos RowChanging e RowChanged aps
cada alterao de colunas individuais. Nesse caso, o evento no gerado at que o mtodo
EndEdit tenha sido chamado, quando os eventos RowChanging. e RowChanged eventos so
gerados apenas uma vez Para obter mais informaes, consulte Como: desativar restries ao
preencher um DataSet.
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.
Eventos de atualizao de dados
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
Visual C# Consolidado
968
Uma linha foi alterada. O evento passa a linha para voc e um valor indicando
o tipo de ao (alterar, inserir, e assim por diante) que est sendo executada.
RowDeleting
Uma linha est sendo excluda. O evento passa a linha para voc e um valor
indicando o tipo de ao (Excluir) que est sendo executada.
RowDeleted
Uma linha foi excluda. O evento passa a linha para voc e um valor
indicando o tipo de ao (Excluir) que est sendo executada.
Visual C# Consolidado
969
A seleo do controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
OrderDetails.
A adio de validao para confirmar se a coluna Quantity contm valores maiores que 0.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criar um Novo Windows Application
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto ValidationWalkthrough criado e adicionado ao Solution Explorer.
Criando uma Nova Fonte de Dados a partir de seu Banco de Dados
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais (include sensitive data), e clique em Next.
6.
Clique em Next na pgina Save connection string to the Application Configuration file.
7.
8.
Visual C# Consolidado
970
2.
3.
2.
Clique duas vezes na coluna Quantity da tabela OrderDetails para criar o manipulador de
eventos OrderDetailsDataTable_ColumnChanging. (Em C# somente classe parcial da tabela de
dados ser criada.)
Observao
Um clique duplo no nome da tabela (Order Details na barra de ttulo.) cria um manipulador de
eventos para o evento RowChanging.
3.
Adicione cdigo para verificar se e.ProposedValue contem valores maiores que 0. Se o valor
proposto for 0 ou menos, marque a coluna para indicar que ela contm um erro.
Cole o cdigo a seguir no manipulador de eventos de alterao da coluna (columnchanging) 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
971
1.
2.
3.
4.
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:.
Visual C# Consolidado
972
possa usar adaptadores diferentes, por exemplo, para mover dados de uma fonte de dados para
outra ou para atualizar vrias fontes de dados.
Processo de atualizao de dois estgios e a funo do DataRowVersion em uma
atualizao bem sucedida
Visual C# Consolidado
973
DataSet destino
DataSet origem
Original
James Wilson
James C. Wilson
Atual
Jim Wilson
James C. Wilson
DataSet destino
DataSet origem
Original
James C. Wilson
James C. Wilson
Atual
James C. Wilson
James C. Wilson
DataSet destino
DataSet origem
Original
James C. Wilson
James C. Wilson
Atual
Jim Wilson
James C. Wilson
Cuidado
No cenrio preserveChanges = true, se o mtodo RejectChanges for chamado em um registro no
dataset destino, ento ele reverter para os dados originais do dataset origem. Isso significa que
se voc tentar atualizar a fonte de dados original com o dataset destino, ele pode no ser capaz
de localizar a linha original para atualizar. Entretanto, voc pode impedir uma violao simultnea
preenchendo outro dataset com os registros atualizados a partir da fonte de dados e, ento,
executar uma mesclagem impedindo uma violao simultnea. (Uma violao simultnea ocorre
quando outro usurio modifica um registro na fonte de dados aps o dataset ter sido preenchido).
Para obter mais informaes, consulte Controle de concorrncia no ADO.NET.
Restries de Atualizao
Para fazer alteraes em um linha de dados existente, voc adiciona ou atualiza dados nas
colunas individuais. Se o dataset contiver restries (como chaves externas ou restries noanulveis), possvel que voc atualize um registro aps voc ter terminado de atualizar uma
coluna, mas antes que voc obtenha a prxima o registro pode temporariamente estar em um
estado de erro.
Visual C# Consolidado
974
Ela impede que um erro seja jogado quando voc atualiza uma coluna antes de obter a
outra coluna.
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.
Restries so automaticamente desativadas quando o mtodo Merge chamado em um
dataset. Quando a mesclagem estiver concluda, se houver qualquer restrio sobre o dataset que
no possa ser ativado, ento uma ConstraintException ser lanada. Nesta situao, a
propriedade EnforceConstraints definida para false e todas as violaes de restrio devem ser
resolvidas antes de redefinir a propriedade EnforceConstraints para true.
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.
Erros de Atualizao de DataSet
Quando voc atualiza um registro em um dataset, h a possibilidade de um erro. Por exemplo,
voc pode inadvertidamente gravar dados em uma coluna que do tipo de dados errado ou muito
longo ou que tenha algum outro problema de integridade. Alm disso, voc pode ter verificaes
de validao especficas do aplicativo que podem elevar a erros personalizados durante qualquer
estgio de um evento de atualizao. Para obter mais informaes, consulte Viso geral sobre
validao de dados.
Manter Informaes Sobre Alteraes
As informaes sobre as alteraes em um dataset so mantidas de duas maneiras: por sinalizar
a linha que indica se ele foi alterado (RowState) e por manter vrias cpias de um registro
(DataRowVersion). Usando essas informaes, processos podem determinar o que foi alterado no
dataset e podem enviar atualizaes apropriadas para a fonte de dados.
Propriedade RowState
A propriedade RowState de um objeto DataRow um valor que fornece informaes sobre o
status de uma linha especfica de dados.
A tabela a seguir detalha os possveis valores da enumerao DataRowState:
Valor de
Descrio
Visual C# Consolidado
975
DataRowState
Added
Deleted
Detached
Modified
Unchanged
A linha no foi alterada desde que AcceptChanges foi chamado pela ltima
vez.
Enumerao DataRowVersion
Datasets mantm vrias verses de registros. A enumerao DataRowVersion de um objeto
DataRow um valor que pode ser usado para retornar uma verso especfica de um objeto
DataRow.
A tabela a seguir detalha os possveis valores da enumerao DataRowVersion:
Valor de
DataRowVersion
Descrio
Current
Default
Original
Proposed
Visual C# Consolidado
976
Visual C# Consolidado
977
Se as alteraes refletem o estado atual da fonte de dados, voc no mais precisa manter essas
informaes. Normalmente, existem duas vezes quando o dataset e sua fonte esto em
sincronizao:
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
Confirmar a alterao dessa maneira apaga qualquer mudana da informao. No confirmar
alteraes at depois que voc tiver efetuado quaisquer operaes no qual seu aplicativo
depende em saber quais alteraes foram feitas no dataset.
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
Visual C# Consolidado
978
DataRow.AcceptChanges
DataTable.AcceptChanges
DataSet.AcceptChanges
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.
Voc pode validar dados de vrias maneiras:
Na camada comercial, adicionando o cdigo a seu aplicativo para validar dados. O dataset
um local que voc pode fazer isso. O dataset fornece algumas das vantagens de validao
back-end como a capacidade para validar alteraes como valores de coluna e linha
alteradas. Para obter mais informaes, consulte Viso geral sobre validao de dados.
No back-end de dados, enviando dados para a fonte de dados por exemplo, o banco de
dados e permitindo que ele aceite ou rejeite os dados. Se voc estiver trabalhando com um
banco de dados que tem recursos sofisticados para validao de dados e fornecimento de
informaes de erro, isso pode ser uma abordagem prtica porque voc pode validar os dados
no importando de onde ele vem. Entretanto, ele pode no acomodar requisitos especficos de
aplicativo de validao. Alm disso, tendo a fonte de dados validada, dados podem resultar em
vrias viagens fonte de dados, dependendo de como seu aplicativo facilita em resolver erros
de validao elevados pelo back-end.
Observao de segurana
Ao usar comandos de dados com uma propriedade CommandType definida como Text,
cuidadosamente verifique informaes que so enviadas de um cliente antes de pass-la para
seu banco de dados. Usurios mal intencionados podem tentar para enviar (inserir) instrues
SQL modificadas ou adicionais em um esforo para obter acesso no autorizado ou danificar o
Visual C# Consolidado
979
banco de dados. Antes de voc transferir a entrada do usurio a um banco de dados, voc deve
verificar se as informaes so vlidas; a melhor prtica para sempre usar consultas
parametrizadas ou procedimentos armazenados quando possvel. Para obter mais informaes,
consulte Viso Geral Sobre Scripts Maliciosos.
Aps terem sido feitas alteraes em um dataset, voc pode transmitir as alteraes em uma
fonte de dados. Mais comumente, faa isso chamando o mtodo Update de um TableAdapter (ou
adaptador de dados). O mtodo loops a cada registro em uma tabela de dados, determina que
tipo de atualizao necessria (atualizar, inserir ou excluir), se houver, e, ento, executa o
comando apropriado.
Como Uma Atualizao Transmitida Fonte de Dados
Como uma ilustrao da como atualizaes so feitas, suponha que o seu aplicativo utilize um
dataset contendo uma nica tabela de dados. O aplicativo busca duas linhas do banco de dados.
Aps a recuperao, a tabela de dados na memria tem esta aparncia:
(RowState) CustomerID Name Status (Unchanged) c200 Robert Lyon Good (Unchanged) c400 Nancy
Buchanan Pending
Seu aplicativo altera o status de Nancy Buchanan para " Preferred ". Como resultado desta
alterao, o valor da propriedade RowState para aquela linha altera de Unchanged para
Modified. O valor da propriedade RowState para a primeira linha permanece Unchanged. A
tabela de dados agora tem esta aparncia:
(RowState) CustomerID Name Status (Unchanged) c200 Robert Lyon Good (Modified) c400 Nancy
Buchanan Preferred
Seu aplicativo agora chama o mtodo Update para transmitir o dataset para o banco de dados. O
mtodo inspeciona cada linha por vez. Para a primeira linha, o mtodo no transmite Instruo
SQL para o banco de dados, porque essa linha no foi alterada desde que foi originalmente
procurada no banco de dados.
Para a segunda linha, no entanto, o mtodo Update automaticamente chama o comando de dados
adequado e o transmite para o banco de dados. A sintaxe especfica da instruo SQL depende
do dialeto do SQL suportado para o armazenamento de dados subjacente. Mas os seguintes
traos gerais de instruo do SQL transmitidos so os que valem a pena observar:
A instruo SQL transmitida uma declarao UPDATE. O adaptador sabe usar uma
propriedade UPDATE, porque o valor da propriedade RowState Modified.
A instruo SQL transmitida inclui uma clusula WHERE indicando que o destino da
declarao UPDATE a linha cujo CustomerID = 'c400'. Esta parte da declarao SELECT
distingue a linha de destino de todas as outras porque CustomerID a chave primria da tabela
de destino. As informaes para a clusula WHERE so derivadas da verso original do
registro (DataRowVersion.Original), no caso de os valores necessitarem identificar a linha que foi
alterada.
A instruo SQL transmitida inclui a clusula SET, para definir os novos valores das
colunas modificadas.
Observao
Se a propriedade UpdateCommand do TableAdapter tiver sido definida com o nome de um
Visual C# Consolidado
980
procedimento armazenado, o adaptador no constri uma instruo SQL. Em vez disso, ele
chama o procedimento armazenado com os parmetros apropriados passados.
Passando Parmetros
Valores de registros a serem atualizados no banco de dados so passados usando parmetros.
Quando o mtodo Update do TableAdapter executa uma declarao UPDATE, ele precisa
preencher os valores de parmetro. Ele obtm esses valores da coleo Parameters para o
comando de dados apropriados neste caso, o objeto UpdateCommand na TableAdapter.
Se voc tiver usado ferramentas do Visual Studio para gerar um adaptador de dados, o objeto
UpdateCommand conter um conjunto de parmetros que corresponde a cada espao reservado
do parmetro na declarao.
A propriedade SqlParameter.SourceColumn de cada parmetro aponta para uma coluna na tabela
de dados. Por exemplo, a propriedade SourceColumn para os parmetros au_id e Original_au_id
estiverem definidos como qualquer coluna na tabela de dados contm o autor do ID. Quando o
adaptador do mtodo Update executa, ele l o autor coluna ID do registro sendo atualizado e
preenche os valores na declarao
Em uma declarao UPDATE, voc precisa especificar os dois novos valores (aqueles que sero
gravados para o registro), bem como os antigos valores (para que o registro a ser atualizado
possa estar localizado no banco de dados). H, portanto, dois parmetros para cada valor: um
para a clusula SET e um cone diferente para a clusula WHERE. Os dois parmetros lem
dados do registro sendo atualizado, mas eles obtm verses diferentes do valor da coluna com
base no parmetro da propriedade SqlParameter.SourceVersion. O parmetro para a clusula
SET obtm a verso atual e o parmetro para a clusula WHERE obtm a verso original.
Observao
Voc tambm pode definir valores na coleo Parameters no cdigo, que normalmente voc deseja
fazer em um manipulador de eventos para o adaptador de dados do evento RowChanging. Para
obter mais informaes, consulte Parmetros de comandos Adapter Data-.
Atualizando Tabelas Relacionadas
Se o dataset contiver vrias tabelas, voc precisa atualiz-las individualmente chamando o
mtodo Update de cada adaptador de dados separadamente. Se as tabelas tm uma relao paifilho, provvel que voc ter que enviar atualizaes para o banco de dados em uma ordem
especfica. Um cenrio comum que voc adicionou pai e o filho relacionado gravados para um
dataset por exemplo, um novo registro do cliente e um ou mais registros relacionados. Se o
prprio banco de dados est impondo regras de integridade relacional, ele aumentar erros se
voc enviar o novo registro filho para o banco de dados antes que o registro pai tiver sido criado.
Inversamente, se voc excluir registros relacionados no dataset, geralmente voc ter para que
atualizaes na ordem inversa: tabela filho primeiro, depois tabela pai. Caso contrrio, provvel
que o banco de dados que gere um erro porque as regras de integridade referencial impediro
voc de excluir um registro pai enquanto ainda existem registros filho relacionados.
de concorrncia no
ADO.NET
Visual C# Consolidado
981
Controle concorrente o processo usado para identificar e resolver atualizaes dos dados que
so feitas por vrios usurios simultaneamente. Os tpicos a seguir explicam mtodos comuns
para controle concorrente, bem como recursos ADO.NET especficos para manipular erros
concorrentes.
as relacionadas a seguir nesta ordem:
1.
2.
3.
4.
Controle de Concorrncia
Como datasets so desconectados da fonte de dados, no mantenha bloqueios em registros na
fonte de dados. Portanto, se voc deseja atualizar o banco de dados, e se ele for importante para
seu aplicativo para manter controle de simultaneidade, voc deve reconciliar registros no dataset
com aqueles no banco de dados. Por exemplo, voc pode localizar registros no banco de dados
que foram alterados desde o ltimo preenchimento do dataset. Nesse caso, voc deve executar
aplicao-apropriada lgica para especificar o que acontece com o registro de banco de dados ou
com o registro alterado que voc tem em sua dataset. Para obter mais informaes, consulte
Controle de concorrncia no ADO.NET.
" ltima no WINS " Linha indisponvel para outros usurios somente enquanto os dados
est realmente sendo atualizados. No entanto, nenhum esforo feita para comparar
atualizaes contra o registro original; o registro simplesmente gravado out, potencialmente
sobrescrever qualquer alterao feita por outros usurios desde voc atualizou os registros
pela ltima vez.
CONCURRENCY pessimista
Simultaneidade pessimista normalmente usado para dois motivos. Primeiro, em algumas
situaes, no alta conteno dos mesmos registros. O custo de colocando bloqueios sobre os
dados menor que o custo de reverter alteraes quando ocorrerem conflitos simultaneidade.
Visual C# Consolidado
982
Simultaneidade pessimista tambm til para situaes onde ela seja detrimental para o Registro
para alterar durante o curso de uma transao. Um bom exemplo um aplicativo de estoque.
Considere um representante empresa verificao estoque de um cliente potencial. Normalmente
voc deseja bloquear o registro at que um pedido seja gerada, que deseja sinalizar o item com
um status de ordenada e remov-lo do estoque disponvel Geralmente. Se nenhuma ordem
gerado, o bloqueio seria ser liberado para que outros usurios verificando estoque comear uma
contagem do estoque disponvel precisas.
No entanto, controle de simultaneidade pessimista possvel em uma arquitetura desconectado.
As conexes so abrir somente longo o suficiente para ler os dados ou para atualiz-lo, portanto
bloqueios no pode ser sustained por longos perodos. Alm disso, um aplicativo que contm at
bloqueios por longos perodos no escalonveis.
Observao
Se sua fonte de dados subjacente suportar transaes, voc pode simular simultaneidade
pessimista por atualizar dados em uma transao. For more information, see Features Provided
by System.Transactions.
CONCURRENCY otimista
Em concorrncia otimista, bloqueios so conjunto e mantidos somente enquanto o banco de
dados est sendo acessado. Os bloqueios impede os outros usurios de tentativa de atualizar
registros no mesmo instantneas. Os dados esto sempre disponveis exceto para o momento em
que uma atualizao for local Taking exata. For more information, see Using Optimistic
Concurrency.
Quando uma atualizao tentada, a verso original de uma linha alterada comparado contra a
linha existente no banco de dados. Se as duas forem diferentes, a atualizao falhar com um
erro de simultaneidade. Ele backup a voc nesse ponto para reconciliar as linhas dois, usando
lgica corporativa que voc criar.
ltima no WINS
Com " ltima no WINS, " feita nenhuma verificao dos dados originais e a atualizao
simplesmente gravada no banco de dados. Ele compreendido que o cenrio a seguir podem
ocorrer:
No cenrio acima, as alteraes feitas Usurio B nunca foram vistas pelo usurio a. Certifique-se
que esta situao aceitvel se voc quiser usar a abordagem " ltima no WINS " do controle de
simultaneidade.
Controle de simultaneidade em ADO.NET e Visual Studio
ADO.NET e Visual Studio usar concorrncia otimista, porque a arquitetura de dados for baseada
em dados desconectado. Portanto, voc precisar adicionar lgica corporativa para resolver
problemas com simultaneidade otimista.
Visual C# Consolidado
983
Se voc optar por usar concorrncia otimista, existem duas maneiras geral para determinar se
ocorreram alteraes: a abordagem verso (nmeros de verso True ou carimbos de data e hora)
e a abordagem valores-economia-todos os.
A abordagem nmero verso
Na abordagem nmero verso, o registro a ser atualizado deve ter uma coluna que contm um
carimbo de data e hora ou nmero de verso. O carimbo de data e hora ou um nmero de verso
salva no cliente quando o registro leitura. Esse valor depois feita parte da atualizao.
Uma maneira para manipular simultaneidade para atualizar somente se Valor na clusula
WHERE corresponde ao valor no Registro. A representao SQL dessa abordagem :
UPDATE Table1 SET Column1 = @newvalue1, Column2 = @newvalue2 WHERE DateTimeStamp =
@origDateTimeStamp
A abordagem valores-Saving-tudo
Uma alternativa para usando um nmero ou verso carimbo de data e hora ser para obter cpias
de todos os campos quando o registro leitura. O DataSet objeto no ADO.NET mantm duas
verses de cada registro modificado: uma verso original (que foi ler a partir da fonte de dados)
originalmente e uma verso modificada, que representa as atualizaes de usurio. Ao tentar para
gravar o Registro de volta para a fonte de dados, os valores originais na linha de dados so
comparados com o registro na fonte de dados. Se eles coincidirem, significa registro de banco de
dados que no foi alterado desde que ela foi lida. Nesse caso, os valores alterados a partir do
DataSet com xito so gravados para o banco de dados.
Cada comando adaptador de dados tem uma coleo parmetros para cada um dos seus
comandos quatro (DELETE, INSERT, SELECT, e UPDATE). Cada comando tem parmetros para
tanto os valores originais,, bem como os valores atual (ou modificado).
Observao
Somente a adio de novos registros (o comando INSERT) requer os valores atuais pois nenhum
registro original existe e remover registros (o comando delete) somente requer os valores
originais, para localizar o registro para excluir.
Visual C# Consolidado
984
O exemplo a seguir mostra o texto de comando para um comando DataSet que atualiza uma
tabela comum Customers. O comando foi especificado para SQL Dinmico e simultaneidade
otimista.
UPDATE Customers SET CustomerID = @currCustomerID, CompanyName = @currCompanyName,
ContactName = @currContactName, ContactTitle = currContactTitle, Address = @currAddress, City =
@currCity, PostalCode = @currPostalCode, Phone = @currPhone, Fax = @currFax WHERE (CustomerID =
@origCustomerID) AND (Address = @origAddress OR @origAddress IS NULL AND Address IS NULL) AND
(City = @origCity OR @origCity IS NULL AND City IS NULL) AND (CompanyName = @origCompanyName
OR @origCompanyName IS NULL AND CompanyName IS NULL) AND (ContactName =
@origContactName OR @origContactName IS NULL AND ContactName IS NULL) AND (ContactTitle =
@origContactTitle OR @origContactTitle IS NULL AND ContactTitle IS NULL) AND (Fax = @origFax OR
@origFax IS NULL AND Fax IS NULL) AND (Phone = @origPhone OR @origPhone IS NULL AND Phone IS
NULL) AND (PostalCode = @origPostalCode OR @origPostalCode IS NULL AND PostalCode IS NULL);
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, PostalCode, Phone, Fax
FROM Customers WHERE (CustomerID = @currCustomerID)
Observe que os parmetros instruo SET nove representam os valores atuais que vai ser
gravados para o banco de dados, enquanto a nove WHERE parmetros instruo representam o
original valores que so usados para localizar o registro original.
Os parmetros nove primeiros na instruo SET correspondem aos parmetros nove primeiros na
coleo parmetros. Esses parmetros seria ter sua SourceVersion propriedade definida para
Current.
Os parmetros prxima nove na instruo WHERE so usadas para simultaneidade otimista.
Esses espaos reservados seria correspondem com os parmetros prxima nove na coleo
parmetros, e cada um desses parmetros deve ter sua SourceVersion propriedade definida como
Original.
A instruo SELECT usado para atualizar o DataSet aps a atualizao ter ocorrido. Ele
gerado quando voc definir a Refresh the DataSet opo na caixa Advanced SQL Generations
Options de dilogo.
Observao
A instruo SQL acima usa parmetros nomeados, enquanto OleDbDataAdapter comandos usar
pontos de interrogao (?) como espaos reservados parmetro.
Por padro Visual Studio cria esses parmetros para voc se voc selecionar a Optimistic
Concurrency opo na DataAdapter Configuration Wizard. Ele backup a voc para adicionar
um cdigo para manipular os erros com base em seus prprios requisitos de negcios. Fornece
um DBConcurrencyException objeto que retorna a linha que viola as regras de simultaneidade
ADO.NET. For more information, see Como: identificador erros concorrentes.
Visual C# Consolidado
985
2.
3.
Adicione cdigo para resolver o erro com base nas regras de negcio do aplicativo.
O cdigo a seguir usa o CustomersTableAdapter e o NorthwindDataSet, como exemplos do
adaptador e do dataset em seu aplicativo.
C#
try { customersTableAdapter.Update(northwindDataSet); } catch (DBConcurrencyException ex) {
string customErrorMessage; customErrorMessage = "Concurrency violation\n"; customErrorMessage
+= ex.Row[0].ToString(); // Add business logic code to resolve the concurrency violation... }
2.
3.
4.
5.
Aps preencher o dataset, use o Visual Database Tools no Visual Studio para acessar a
tabela de dados Customers e alterar diretamente um registro.
6.
Ento no formulrio, altere o mesmo registro com um valor diferente, atualize o dataset, e
tente gravar as alteraes no banco de dados, que resulta na gerao de um erro
concorrente.
7.
Visual C# Consolidado
986
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.
Criar um novo projeto
Voc comear com a explicao passo a passo de como criar um novo aplicativo do Windows.
2.
3.
4.
2.
3.
4.
5.
6.
Clique Next na pgina Save connection string to the application configuration file.
Expanda o n Tables e selecione a tabela Customers. O nome padro para o dataset deve
ser NorthwindDataSet.
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
Visual C# Consolidado
987
No menu Data, escolha Show Data Sources para abrir o Data Sources Window.
2.
3.
4.
Agora voc pode testar o formulrio para certificar-se que ele funciona como esperado at este
ponto.
2.
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 aplicativo apresentar ao usurio trs verses do registro:
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.
2.
3.
4.
Visual C# Consolidado
988
Nesta seo voc ir adicionar cdigo que tentar atualizar o banco de dados, e tratar qualquer
DBConcurrencyException gerado, bem como qualquer outra exceo.
Observao
Os mtodos CreateMessage e ProcessDialogResults sero adicionadas posteriormente nesta
explicao passo a passo.
Para adicionar o tratamento de erro para o erro de concorrncia
1.
2.
Crie a mensagem, adicionando o seguinte cdigo para o Code Editor. Digite este cdigo
abaixo para o mtodo UpdateDatabase.
C#
private string CreateMessage(NorthwindDataSet.CustomersRow cr) { return "Database: " +
GetRowData(GetCurrentRowInDB(cr), DataRowVersion.Default) + "\n" + "Original: " + GetRowData(cr,
DataRowVersion.Original) + "\n" + "Proposed: " + GetRowData(cr, DataRowVersion.Current) + "\n" +
"Do you still want to update the database with the proposed value?"; } //------------------------------------------------------------------------- // This method loads a temporary table with current records from the
database // and returns the current values from the row that caused the exception. //------------------------------------------------------------------------- private NorthwindDataSet.CustomersDataTable
tempCustomersDataTable = new NorthwindDataSet.CustomersDataTable(); private
NorthwindDataSet.CustomersRow GetCurrentRowInDB(NorthwindDataSet.CustomersRow
RowWithError) { this.customersTableAdapter.Fill(tempCustomersDataTable);
Visual C# Consolidado
989
NorthwindDataSet.CustomersRow currentRowInDb =
tempCustomersDataTable.FindByCustomerID(RowWithError.CustomerID); return currentRowInDb; }
//-------------------------------------------------------------------------- // This method takes a CustomersRow
and RowVersion // and returns a string of column values to display to the user. //------------------------------------------------------------------------- private string GetRowData(NorthwindDataSet.CustomersRow
custRow, DataRowVersion RowVersion) { string rowData = ""; for (int i = 0; i <
custRow.ItemArray.Length ; i++ ) { rowData = rowData + custRow.Item(i, RowVersion).ToString() + " ";
} return rowData; }
C#
// This method takes the DialogResult selected by the user and updates the database // with the new
values or cancels the update and resets the Customers table // (in the dataset) with the values currently in
the database. private void ProcessDialogResult(DialogResult response) { switch (response) { case
DialogResult.Yes: UpdateDatabase(); break; case DialogResult.No:
northwindDataSet.Merge(tempCustomersDataTable); MessageBox.Show("Update cancelled"); break; } }
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.
2.
Aps o formulrio aparecer, deixe-lo funcionando e alterne para a IDE do Visual Studio.
3.
4.
No Server Explorer, expanda a conexo que seu aplicativo est usando e expanda o n
Tables.
5.
Clique com o boto direito do mouse na tabela Customers e selecione Show Table Data.
6.
7.
Visual C# Consolidado
990
8.
9.
10. Clicar em No cancela a atualizao e atualiza o dataset com os valores correntes no banco
de dados, enquanto clicar em Yes grava o valor proposto para o banco de dados.
Consulte tambm
Selecione o controle a ser criado no formulrio ao arrastar itens a partir da janela Data
Sources. Para obter mais informaes, consulte Como: Definir o controle a ser criado quando
arrastado da janela Data Sources:.
Criar um formulrio vinculado a dados, arrastando itens da janela Data Sources para o
formulrio.
Acesso ao banco de dados de exemplo Northwind. Para obter mais informaes, consulte
COMO: Instalar Bancos de Dados de Exemplo.
Criando um Aplicativo Windows
2.
3.
Selecione Windows Application e clique em OK. Para obter mais informaes, consulte
Creating Windows-based Applications.
O projeto TableAdapterDbDirectMethodsWalkthrough criado e adicionado ao Solution
Explorer.
Criar uma fonte de dados do seu banco de dados
Visual C# Consolidado
991
Os passos usados no Data Source Configuration Wizard para criar uma fonte de dados com
base na tabela Region, no banco de dados de exemplo Northwind. Voc deve ter acesso ao banco
de dados de exemplo Northwind para criar a conexo. Para informaes sobre como configurar
dados de exemplo Northwind, consulte COMO: Instalar Bancos de Dados de Exemplo.
3.
4.
5.
Se seu banco de dados exigir uma senha, selecione a opo para incluir dados
confidenciais, e clique Next.
6.
Clique Next na pgina Save connection string to the Application Configuration file.
7.
8.
Criar os controles com dados vinculados, arrastando itens da janela Data Sources para seu
formulrio.
2.
Texto
InsertButton
Inserir
UpdateButton
Atualizao
DeleteButton
Excluir
Visual C# Consolidado
992
Clique duas vezes em InsertButton para criar um manipulador de eventos para o evento
Click e abrir o seu formulrio no Editor de Cdigo.
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); }
Clique duas vezes em UpdateButton para criar um manipulador de eventos para o evento
Click e abrir o formulrio no Editor de Cdigo.
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(); }
Clique duas vezes em DeleteButton para criar um manipulador de eventos para o evento
Click e abrir o formulrio no Editor de Cdigo.
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:
Visual C# Consolidado
993
Visual C# Consolidado
994
Editores de Coleo
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.
Caixa de Dilogo Data Adapter Configuration Error
Exibe um ou mais erros que ocorreram enquanto o Visual Studio tentava criar uma
instncia de um adaptador de dados e definir suas propriedades.
Data Adapter Configuration Wizard
Configura comandos SQL ou procedimentos armazenados que um adaptador de dados
usa para ler dados de um banco de dados para um dataset e para gravar no banco de
dados de volta. O tpico descreve como executar o assistente e o que fazer aps a
concluso do assistente.
Caixa de Dilogo Data Adapter Preview
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.
Caixa de Dilogo Data Source Login
Permite a voc solicitar acesso a uma fonte de dados (normalmente um banco de dados)
para o qual voc ainda no tenha sido autenticado.
Guia, caixa de ferramentas DataSet
Exibe os objetos voc pode adicionar a um dataset tipado.
Voc deseja incluir a senha na caixa de dilogo a seqncia de conexo
Permite que voc tenha controle se uma senha est incorporada na seqncia de
conexo.
Caixa de dilogo Edit Key
Permite a voc definir e editar chaves.
Caixa de Dilogo Foreign Key Constraint
Permite a voc colocar uma restrio de chave externa em uma ou mais colunas em uma
tabela dataset que est relacionada a outra tabela.
Caixa de Dilogo Generate Dataset
Visual C# Consolidado
995
Permite a voc gerar um novo dataset tipado a partir informaes fornecidas por um ou
mais adaptadores dados e adicionar tabelas a um dataset existente.
Vrias Caixas de Dilogo BindingSources
Permite a voc selecionar qual BindingSource a ser usado quando mais de um
BindingSource est disponvel.
Caixa de dilogo Preview Data
Permite a voc revisar os dados retornados por consultas no seu projeto.
Caixa de Dilogo Preview SQL Script
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.
Caixa de Dilogo Relation
Permite a voc criar um relacionamento (um objeto DataRelation) que mantm informao
sobre registros pai-filho em duas tabelas de dados em um dataset.
Caixa de Dilogo Construtora de Critrios de Pesquisa
Permite a voc criar uma consulta parametrizada em um Windows Form vinculado a
dados, e adicionar automaticamente os controles necessrios para executar a consulta.
Caixa de Dilogo Table Mappings
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.
Caixa de Dilogo Unique Constraint
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#.
Referncia(Ferramentas de Banco de Dados Visual)
Fornece links para tpicos de referncia sobre como trabalhar com Ferramentas de Banco
de Dados Visual.
Visual C# Consolidado
996
Visual C# Consolidado
997
Fornece uma introduo geral dos conceitos de acesso a dados no Visual Studio.
DataSets no Visual Studio Overview
Fornece informaes bsicas sobre a estrutura e o uso de DataSets.
Populating a DataSet from a DataAdapter
Apresenta uma srie de tpicos de cdigo exemplo especfico para preencher DataSets
com adaptadores de dados.
Viso Geral do Adaptador de Tabela
Explica o que so TableAdapters e ferramentas disponveis para cri-los.
Como: Criar TableAdapters
Fornece as etapas para criar um novo TableAdapter.
Como: Editar consultas do TableAdapter
Fornece as etapas para adicionar uma consulta a um TableAdapter existente.
Consulte tambm
Conceitos
Visual C# Consolidado
998
Aps criar o novo projeto SQL Server, a Add Database Reference Dialog Box exibida. Use esta
caixa de dilogo para adicionar uma referncia do banco de dados, ou conexo, para o projeto.
Voc pode selecionar um referncia do banco de dados que est disponvel no momento no
Server Explorer/Database Explorer ou definir uma nova conexo. Somente uma referncia do
banco de dados pode ser adicionada ao projeto.
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.
Adicionando itens ao projeto
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.
Item
Mais informaes
Procedimento armazenado
Disparador
Agregado
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.
2.
2.
2.
1000
1.
2.
2.
3.
Na janela Output, na lista Show output from, escolha Database Output para visualizar
os resultados.
Consulte tambm
Tarefas
1001
1.
2.
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.
2.
3.
4.
Clique em Add.
5.
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.
1002
1.
2.
3.
Visual C# Consolidado
1003
Class
Enumerao
Interface
Classe abstrata
Estrutura
Delegado
Para exibir tipos existentes em um projeto, consulte COMO: Exibir tipos existentes.
Para criar um tipo em um diagrama de classe
1.
Visual C# Consolidado
1004
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.
o
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.
Class
Visual C# Consolidado
1005
Enum
Membro
Struct
Interface
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.
2.
Se a janela Detalhes classe no for exibida, exiba-o. (Consulte COMO: Abrir a janela Class
Details.)
3.
Edite os valores nos campos da grade da janela Detalhes classe. Aps cada edio,
pressione enter, ou caso contrrio mover foco fora do campo editado, tais como
pressionando TAB. Suas edies refletem imediatamente no cdigo.
Observe que se voc desejar modificar o nome de um membro, somente poder fazer to in
loco no diagrama.. to in loco no diagrama
Visual C# Consolidado
1006
Na superfcie do diagrama, clique no tipo contendo o mtodo ao qual voc deseja adicionar
um parmetro.
O tipo obtm foco e exibir seu contedo na janela Detalhes classe.
2.
Na janela Detalhes classe, expanda a linha do mtodo ao qual voc deseja adicionar um
parmetro.
Uma linha de parmetro recuado aparece, contendo apenas um par de parnteses e as
palavras <add parameter>.
3.
4.
Como opo, especificar outros detalhes sobre o parmetro, como seu tipo.
Clique com o boto direito do mouse a superfcie de um diagrama de classe para exibir um
menu de contexto.
No menu de contexto, clique em Class Details Window.
ou
Consulte tambm
Visual C# Consolidado
1007
Clicar em qualquer clula editvel permite que voc editar o contedo da clula. Suas
alteraes so refletidas em todos os locais que dados so armazenados ou exibido, incluindo
na janela Propriedades do e no cdigo fonte.
Clicar em qualquer clula de uma linha faz a janela Propriedades para exibir as
propriedades para o elemento representados por aquela linha.
Para alterar a largura de uma coluna, arraste o limite no lado direito do cabealho da
coluna at que a coluna esteja da largura desejada.
A janela Detalhes de classe oferece vrios botes para criar novos membros da classe
atual e para navegar entre os membros dos compartimentos na grade da janela Detalhes
classe. Para obter mais informaes, consulte botes janela Detalhes classe.
Usando o teclado
Observao
Os acoplamentos de teclas a seguir foram escolhidos para especificamente para imitar a
experincia de digitar cdigo.
Use estas teclas para navegar a janela Detalhes classe:
Chave
Resultado
(vrgula)
(ponto-evrgula)
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.
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
ESC (ESCAPE) Se voc tiver comeado digitar texto em um campo, pressionando ESC atua
Visual C# Consolidado
1008
Seta direita
O tipo inteiro somente leitura, quando, por exemplo, ele reside em um conjunto de
referncia (consulte Exibio de informaes somente leitura.) Quando voc seleciona a forma
no Class Designer, a janela Detalhes classe exibe seus detalhes em um estado somente
leitura.
Todos os generics ter parmetros somente leitura na janela Detalhes classe. Para alterar
um parmetro genrico, edite o cdigo fonte.
Quando cdigo Um do tipo interrompido (no analisvel), janela Detalhes classe exibe
contedo do tipo como somente leitura.
Voc pode exibir cdigo fonte clicando com o boto direito do mouse uma forma na janela
Detalhes classe (ou o Class Designer) e, em seguida, clicando em Exibir cdigo. O arquivo de
cdigo de fonte abre e rola para o elemento selecionado.
Quando cdigo Um do tipo interrompido (no analisvel), janela Detalhes classe exibe
contedo do tipo como somente leitura.
Visual C# Consolidado
1009
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.
Controle Code origemComo um diagrama de classe salvo como um arquivo em um projeto, voc precisa fazer checkout 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.
Projetos somente leitura
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.
Tipos somente leitura
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.
Indexadores so de leitura-gravao em cdigo e janela Detalhes classe, mas o indexador nome
somente leitura.
Visual C# Consolidado
1010
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.
Cada linha membro exibe os seguintes elementos:
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.
Visual C# Consolidado
1011
A janela Detalhes classe exibe um subconjunto das propriedades membro que so exibidos na
janela Propriedades. Alterar uma propriedade em um local atualiza o valor da propriedade
globalmente, incluindo a exibio de seu valor em outro local.
Summary
A Summary clula expe um resumo das informaes sobre o membro. Clicando na elipse na
clula Summary permite que voc se exibir ou editar informaes sobre o Summary, Return
Type., e Remarks para o membro
Hide
Quando a caixa de seleo Ocultar marcada, o membro no exibido no tipo.
Linhas de parmetro
Parmetros de um membro so agrupados juntos nas linhas imediatamente sob o membro ao
qual eles se aplicam. Linhas parmetro conter os seguintes itens:
Parameter Icon
Trs tipos de cones aparecem esquerda de linhas de parmetro:
Um parntese de fechamento ') '. indica a linha aps o ltimo parmetro do membro
Esta linha contm as palavras <add parameter>.
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.
Visual C# Consolidado
1012
Observao
Usando Class Designer, voc pode visualizar existentes tipos genricos, mas voc pode criar
novos tipos genricos. Voc tambm no pode modificar parmetros tipo em existentes tipos
genricos.
Para herdar de um tipo genrico
1.
2.
2.
3.
4.
No diagrama de classe, arraste uma linha a partir da forma que representa o tipo derivado
para a forma que representa o tipo base.
Dica
O cursor de herana mudar para um cursor conectado quando voc pode criar uma relao de
herana. O cursor de herana mudar para um cursor soltar no-quando voc no pode criar uma
relao de herana.
5.
Uma linha de herana com uma seta apontando para o tipo base do tipo derivado aparece
entre as duas formas no diagrama. A forma a tipo do tipo derivado tambm exibe o nome do
tipo base.
6.
Observe que se a classe pai uma classe abstrata e contm pelo menos um membro
abstract, esses participantes ser automaticamente implementadas em classes abstratas
no-inheriting. Para obter mais informaes, consulte COMO: Implementar uma classe
abstrata.
Visual C# Consolidado
1013
ou campo de outra classe no projeto. Linhas de associao geralmente so usadas para ilustrar
os relacionamentos entre classes no seu projeto mais importantes.
Enquanto voc poderia exibir todos os campos e propriedades como associaes, faz mais
sentido para mostrar somente os membros importantes como associaes, dependendo do que
voc pretende enfatizar no diagrama. (Voc pode mostrar membros menos importantes membros
como normais ou ocult-las totalmente.)
Observao
Class Designer oferece suporte somente associaes unidirecionais.
Para definir um linha de associao no diagrama de classe
1.
2.
Desenhar uma linha entre as duas formas voc deseja vincular com uma associao.
Uma nova propriedade criada na primeira classe. Essa propriedade exibe como um linha
de associao (no como uma propriedade em um compartimento na forma) com um nome
padro. Seu tipo a forma para o qual a linha de associao aponta.
- 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.
2.
Visual C# Consolidado
1014
2.
3.
Clique no nome do membro na forma seu do tipo em um diagrama de classe, ou sua linha
na janela Detalhes classe.
2.
3.
Sobre o diagrama de classe, selecione o tipo para que voc deseja exibir a classe base ou
interface.
2.
No menu Class Diagram, escolha Show Base Class ou Show Base Interfaces como
apropriado.
O tipo na classe base ou interface aparecer selecionado no diagrama. Todas as linhas
ocultas de herana agora aparecem entre as duas formas.
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.
Para exibir os tipos derivados
1.
Sobre o diagrama de classe, selecione o tipo para o qual voc deseja exibir a classes
derivadas e interfaces.
Visual C# Consolidado
1015
2.
No menu Class Diagram, escolha Show Derived Classes ou Show Derived Interfaces
como apropriado.
O tipo derivado classes ou interfaces aparecem no diagrama. Todas as linhas ocultas de
herana agora aparecem entre as formas.
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.
Sobre o diagrama de classe, selecione o tipo para que voc deseja exibir seus tipos
derivados.
2.
No menu Class Diagram, Show Derived Classes ou Show Derived Interfaces conforme
apropriado.
As formas que representam a classes derivadas ou interfaces aparea selecionadas no
diagrama. Todas as linhas ocultas de herana aparecero no diagrama.
Voc pode tambm clique com o boto direito do mouse o tipo e escolha Show Derived Classes
ou Show Derived Interfaces como apropriado.
Visual C# Consolidado
1016
2.
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.
2.
3.
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.
Para ocultar um compartimento
1.
Visual C# Consolidado
1017
2.
3.
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.
Para mostrar um compartimento
1.
2.
2.
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.
Visual C# Consolidado
1018
3.
Visual C# Consolidado
1019
O diagrama de classe exibe membros em compartimentos por padro. Quando todos os membros
em um compartimento estiverem ocultas, o compartimento ficar ocultos. Ocultando ou mostrando
compartimentos e seus membros no afeta o cdigo. Para obter mais informaes, consulte
COMO: Exibir compartimentos em formas de tipo.
Para mostrar membros ocultos em uma forma tipo
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.
Para ocultar um membro de uma forma tipo
No diagrama de classe, clique com o boto direito do mouse no nome membro e escolha
Hide.
Deixa o membro visvel no compartimento.
Voc tambm pode ocultar um membro usando a Class Details janela, marcando a Hide caixa de
seleo para o membro. Para obter mais informaes, consulte COMO: Abrir a janela Class
Details.
No Solution Explorer, clique com o boto direito do mouse no nome do projeto e execute
uma das opes a seguir:
2.
No painel Modelos da caixa Add New Item de dilogo, execute uma das opes a seguir:
Para criar um diagrama de classe com o nome padro, clique duas vezes Class
Diagram.
Para criar um diagrama de classe com outro nome, clique em Class Diagram,
alterar o nome na caixa Name, e clique em Add.
O diagrama de classe aberta no Class Designer e aparece como um arquivo com uma
extenso.CD no Solution Explorer dentro da hierarquia do projeto. Caixa de ferramentas
Class Designer aparece e contm formas e linhas voc pode arrastar para o diagrama.
3.
Visual C# Consolidado
1020
2.
Tambm pode exibir tipos no projeto, arrastando um ou mais tipos do n de projeto em Class View
para o diagrama de classe.
Dica
Se no estiver aberto, Exibir Classe Abrir exibir classe no menu View. Para obter mais
informaes sobre modo classe, consulte Exibir classes e seus membros.
Para exibir tipos nos locais padro no diagrama, selecione um ou mais tipos no modo de classe,
clique com o boto direito do mouse os tipos selecionados, e escolha View Class Diagram.
Observao
Se um diagrama de classe fechado contendo o tipo j existe no projeto, o diagrama de classe
abrir para exibir a forma tipo. No entanto, se nenhum diagrama de classe contendo o tipo existir
no projeto, Class Designer cria um novo diagrama de classe no projeto e abre o arquivo para
exibir o tipo.
Visual C# Consolidado
1021
Quando voc primeiro exibir um tipo no diagrama, sua forma aparece recolhida por padro. Voc
pode expandir a forma para ver o respectivo contedo. Para obter mais informaes, consulte
COMO: Exibir compartimentos em formas de tipo.
Para exibir um projeto ou espao para nome em um diagrama de classe
No Solution Explorer (para projetos) ou exibio classe (para espaos para nome) clique
com o boto direito do mouse no projeto ou espao para nome e escolha Exibir no diagrama.
Um diagrama classe populated auto- criado.
2.
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.
Visual C# Consolidado
1022
2.
Roteamento de linha manual. Primeiro, clique em um linha de associao para selecionlo. Em seguida, voc pode mover a linha, ou segmentos de linha, esquerda, direita, para cima,
ou para baixo. Pontos de extremidade da linha permanecem ancorados nas formas se
conecta.
Ocultar linha de associao. Com o boto direito do mouse uma linha de associao exibe
um menu de contexto. Em seguida, se voc clicar em Show as Property, a linha removida
do diagrama, mas a associao aparecer como uma propriedade em uma forma. Consulte
COMO: Alternar entre notao de membro e notao de associao.
Mostrar e ocultar formas. Para ocultar forma um tipo, clique com o boto direito do
mouse em sua rea de cabealho e clique em Remove from Diagram. Para mostr-la
novamente, arraste-a para o diagrama de Class View.
Mostrar e ocultar membros tipo. Usando o Class Designer ou janela Detalhes classe, voc
pode mostrar membros um tipo ou ocult-las Para obter mais informaes, consulte COMO:
Exibir membros de tipo.
Expandir e recolher formas. Para recolher uma forma, clique com boto direito mouse sua
rea de cabealho e clique em Collapse. Isso oculta todos os compartimentos a forma. Para
expandir a forma, clique com o boto direito do mouse e clique em Expand.
Agrupar e classificar membros. Voc pode agrupar membros um tipo de vrias maneiras.
Para obter mais informaes, consulte COMO: Agrupar membros de tipo.
Visual C# Consolidado
1023
Na superfcie do diagrama, arraste o ponteiro para selecionar as formas que voc deseja
copiar.
Clique com boto direito mouse uma das formas selecionadas e escolha Copy as Image.
Todas as formas selecionadas so colocadas na rea de transferncia.
Clique com o boto direito do mouse a superfcie de diagrama e escolha Select All.
Clique no Copy cone na barra de ferramentas Padro, ou selecione Copy as image no
menu Editar.
Formas do todo o diagrama so colocadas na rea de transferncia.
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.
Exibir o diagrama de classe. (Se necessrio, selecione a guia diagrama de classe para
exibi-la.)
Clique Impresso no menu Arquivo.
O diagrama de classe inteira ser impressa. Observe que voc pode precisa ajustar as
configuraes na caixa de dilogo Instalao pgina a fim de imprimir em um tamanho
adequado.
Visual C# Consolidado
1024
O mtodo base seja substitudo deve ser virtual, abstract, ou substituir. (Ele no pode ser
no-virtual ou esttico.)
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.
2.
Para exibir a janela Detalhes classe, clique com o boto direito do mouse no tipo ou
membro Tipo e escolha Class Details.
A janela Detalhes classe aparece.
2.
3.
Para mover o foco fora da clula, pressione a tecla Enter ou clique na clula fora do.
Observao
Na janela Detalhes classe, voc pode editar o nome do membro mas no um tipo.
No diagrama de classe ou na janela Detalhes classe, clique com o boto direito do mouse
no tipo ou membro e escolha Properties.
A janela Propriedades aparece e exibe propriedades para o tipo ou membro tipo.
2.
Visual C# Consolidado
1025
Em um tipo que esteja visvel na superfcie de design, clique com o boto direito do mouse
no membro voc deseja mova para outro tipo, e clique Cut.
2.
2.
Para obter mais informaes, consulte COMO: Definir herana entre tipos.
Para implementar uma interface a partir da janela Exibir Classe
1.
Na diagrama de classe, exibir a classe que voc deseja que implementam a interface.
2.
3.
Visual C# Consolidado
1026
A classe abstrata a classe base em uma relao de herana com outra classe. (A classe
derivada no precisa ser uma classe abstrata.)
Clique com o boto direito a classe derivada em seguida, escolha Intellisense, escolha
Implement Abstract Class. Todos os membros da classe base abstratos so implementados
na classe derivada.
Na Class Designer, clique com o boto direito do mouse o tipo que contm o membro ou
membros voc deseja extrair, aponte para Refactor, e clique em Extract Interface.
A caixa de dilogo extrair interface exibe valores padro para o nome da interface e o nome
do arquivo de cdigo no qual ela vai ser declarada. Aceite os valores padro ou alter-las.
2.
3.
Na caixa Reorder Parameters de dilogo, mova os parmetros para a ordem voc deseja,
e clique em OK.
As alteraes ordem de parmetro no cdigo e na forma no diagrama de classe.
Projeto de Classes
Visual C# Consolidado
1027
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.
Para criar um membro usando Class Designer
1.
Clique com o boto direito do mouse o tipo ao qual voc deseja adicionar um membro,
aponte para Add, e clique em Add <member>.
A nova assinatura membro criado e adicionado ao tipo. fornecido um nome padro que
voc pode alterar, na Class Designer janela Detalhes classe, ou na janela Propriedades.
2.
Como opo, especificar outros detalhes sobre o membro, tais como seu tipo.
2.
Na barra de ferramentas Janela detalhes classe, clique no cone superior e selecione New
<member> na lista drop-o.
O cursor vai para o Name campo em uma linha para o tipo de membro que voc deseja
adicionar. Por exemplo, se voc clicou em New Property, em uma nova linha na seo
Properties da janela Detalhes classe mover o cursor.
3.
Digite o nome do membro voc deseja criar e pressione ENTER (ou caso contrrio mover
o foco, como pressionando TAB).
A nova assinatura membro criado e adicionado ao tipo. O membro agora existe no cdigo
e exibido no Class Designer, a janela Detalhes classe, e a janela Propriedades.
4.
Como opo, especificar outros detalhes sobre o membro, tais como seu tipo.
2.
3.
Na janela Detalhes classe, na seo que contm o tipo de membro voc deseja adicionar,
clique em <add member>. Por exemplo, se voc deseja adicionar um campo, clique em
<add field>.
Digite o nome do membro voc deseja criar e pressione ENTER.
A nova assinatura membro criado e adicionado ao tipo. O membro agora existe no cdigo
e exibido na janela Detalhes classe, a Class Designer, o e a janela Propriedades.
4.
Como opo, especificar outros detalhes sobre o membro, tais como seu tipo.
Voc Note: pode usar atalhos de teclado para criar membros. Para obter mais informaes,
consulte Atalhos de teclado para a janela Detalhes de classe.
Visual C# Consolidado
1028
Exemplo
O exemplo de cdigo a seguir contm o cdigo para o designer.
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 =
Visual C# Consolidado
1029
Inicializa uma instncia da classe DemoControl quando ele criado pelo Toolbox.
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using
System.Drawing.Design; using System.Data; using System.Reflection; using System.Runtime.Serialization;
using System.Text; using System.Windows.Forms; using System.Windows.Forms.Design; using
System.Windows.Forms.Design.Behavior; public class Form1 : Form { private DemoControl demoControl1;
private System.ComponentModel.IContainer components = null; public Form1() { InitializeComponent(); }
Visual C# Consolidado
1030
Visual C# Consolidado
1031
Visual C# Consolidado
1032
Visual C# Consolidado
1033
Visual C# Consolidado
1034
Visual C# Consolidado
1035
Compilando o cdigo
Quando voc faz alteraes aos aspectos em tempo de criao de um componente, voc
precisar recriar o projeto de controle. Alm disso, se no houver outro projeto Windows Forms
que aberto e usa esse componente, voc provavelmente precisar atualizar o projeto para ver
as alteraes. Normalmente, voc precisar fechar e reabrir a janela de design que contm o
componente.
Visual C# Consolidado
1036
Para acessar o suporte em tempo de criao fornecido pelo .NET Framework, voc precisa
concluir as etapas a seguir.
Para acessar suporte Design-time
1.
2.
C#
using System.Drawing.Design;
1.
C#
using System.ComponentModel.Design;
1.
C#
using System.Windows.Forms.Design;
Consulte tambm
Visual C# Consolidado
1037
tem HelpLabel um mtodo denominado GetHelpText que obtm a propriedade que HelpLabel
torna disponvel para outros controles. O SetHelpText mtodo define o valor da propriedade.
Exemplo
A HostApp classe usa o HelpLabel controle em um formulrio.
C#
namespace Microsoft.Samples.WinForms.Cs.HelpLabel { using System; using System.Collections; using
System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using
System.Windows.Forms; using System.Windows.Forms.Design; // // <doc> // <desc> // Help Label offers
an extender property called // "HelpText". It monitors the active control // and displays the help text for the
active control. // </desc> // </doc> // [ ProvideProperty("HelpText",typeof(Control)),
Designer(typeof(HelpLabel.HelpLabelDesigner)) ] public class HelpLabel : Control,
System.ComponentModel.IExtenderProvider { /// <summary> /// Required designer variable. ///
</summary> private System.ComponentModel.Container components; private Hashtable helpTexts; private
System.Windows.Forms.Control activeControl; // // <doc> // <desc> // Creates a new help label object. //
</desc> // </doc> // public HelpLabel() { // // Required for Windows Form Designer support //
InitializeComponent(); helpTexts = new Hashtable(); } /// <summary> /// Clean up any resources being
used. /// </summary> protected override void Dispose(bool disposing) { if (disposing) {
components.Dispose(); } base.Dispose(disposing); } /// <summary> /// Required method for Designer
support - do not modify /// the contents of this method with the code editor. /// </summary> private void
InitializeComponent() { this.components = new System.ComponentModel.Container (); this.BackColor =
System.Drawing.SystemColors.Info; this.ForeColor = System.Drawing.SystemColors.InfoText; this.TabStop
= false; } // // <doc> // <desc> // Overrides the text property of Control. This label ignores // the text
property, so we add additional attributes here so the // property does not show up in the properties window
and is not // persisted. // </desc> // </doc> // [ Browsable(false),
EditorBrowsable(EditorBrowsableState.Never),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public override string Text { get {
return base.Text; } set { base.Text = value; } } // // <doc> // <desc> // This implements the
IExtenderProvider.CanExtend method. The // help label provides an extender property, and the design time
// framework will call this method once for each component to determine // if we are interested in providing
our extended properties for the // component. We return true here if the object is a control and is // not a
HelpLabel (since it would be silly to add this property to // ourselves). // </desc> // </doc> // bool
IExtenderProvider.CanExtend(object target) { if (target is Control && !(target is HelpLabel)) { return true; }
return false; } // // <doc> // <desc> // This is the extended property for the HelpText property. Extended //
properties are actual methods because they take an additional parameter // that is the object or control to
provide the property for. // </desc> // </doc> // [ DefaultValue(""), ] public string GetHelpText(Control
control) { string text = (string)helpTexts[control]; if (text == null) { text = string.Empty; } return text; } // //
<doc> // <desc> // This is an event handler that responds to the OnControlEnter // event. We attach this to
each control we are providing help // text for. // </desc> // </doc> // private void OnControlEnter(object
sender, EventArgs e) { activeControl = (Control)sender; Invalidate(); } // // <doc> // <desc> // This is an
event handler that responds to the OnControlLeave // event. We attach this to each control we are providing
help // text for. // </desc> // </doc> // private void OnControlLeave(object sender, EventArgs e) { if
(sender == activeControl) { activeControl = null; Invalidate(); } } // // <doc> // <desc> // This is the
extended property for the HelpText property. // </desc> // </doc> // public void SetHelpText(Control
control, string value) { if (value == null) { value = string.Empty; } if (value.Length == 0) {
Visual C# Consolidado
1038
Visual C# Consolidado
1039
MessageBox.Show("You have just invoked a sample verb. Normally, this would do something interesting."); }
// // <doc> // <desc> // Our handler for the selection change event. Here we update the active control
within // the help label. // </desc> // </doc> // private void OnSelectionChanged(object sender, EventArgs
e) { if (trackSelection) { ISelectionService ss = (ISelectionService)sender; UpdateHelpLabelSelection(ss); } }
protected override void PreFilterProperties(IDictionary properties) { // Always call base first in PreFilter*
methods, and last in PostFilter* // methods. base.PreFilterProperties(properties); // We add a design-time
property called "TrackSelection" that is used to track // the active selection. If the user sets this to true (the
default), then // we will listen to selection change events and update the control's active // control to point to
the current primary selection. properties["TrackSelection"] = TypeDescriptor.CreateProperty(
this.GetType(), // the type this property is defined on "TrackSelection", // the name of the property
typeof(bool), // the type of the property new Attribute[] {CategoryAttribute.Design}); // attributes } ///
<summary> /// This is a helper method that, given a selection service, will update the active control /// of
our help label with the currently active selection. /// </summary> /// <param name="ss"></param>
private void UpdateHelpLabelSelection(ISelectionService ss) { Control c = ss.PrimarySelection as Control;
HelpLabel helpLabel = (HelpLabel)Control; if (c != null) { helpLabel.activeControl = c;
helpLabel.Invalidate(); } else { if (helpLabel.activeControl != null) { helpLabel.activeControl = null;
helpLabel.Invalidate(); } } } } } }
C#
namespace Microsoft.Samples.WinForms.Cs.HostApp { using System; using System.ComponentModel;
using System.Drawing; using System.Windows.Forms; using Microsoft.Samples.WinForms.Cs.HelpLabel;
public class HostApp : System.Windows.Forms.Form { /// <summary> /// Required designer variable. ///
</summary> private System.ComponentModel.Container components; private
System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; private
System.Windows.Forms.Button button1; private Microsoft.Samples.WinForms.Cs.HelpLabel.HelpLabel
helpLabel1; public HostApp() { // // Required for Windows Form Designer support //
InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected
override void Dispose(bool disposing) { if (disposing) { components.Dispose(); } base.Dispose(disposing); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method
with the code editor. /// </summary> private void InitializeComponent() { this.components = new
System.ComponentModel.Container(); this.label1 = new System.Windows.Forms.Label(); this.button1 = new
System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.helpLabel1 =
new Microsoft.Samples.WinForms.Cs.HelpLabel.HelpLabel(); label1.Location = new
System.Drawing.Point(16, 16); label1.Text = "Name:"; label1.Size = new System.Drawing.Size(56, 24);
label1.TabIndex = 3; helpLabel1.Dock = System.Windows.Forms.DockStyle.Bottom; helpLabel1.Size = new
System.Drawing.Size(448, 40); helpLabel1.TabIndex = 0; helpLabel1.Location = new
System.Drawing.Point(0, 117); button1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; button1.Size =
new System.Drawing.Size(104, 40); button1.TabIndex = 1; helpLabel1.SetHelpText(button1, "This is the Save
Button. Press the Save Button to save your work."); button1.Text = "&Save"; button1.Location = new
System.Drawing.Point(336, 56); this.Text = "Control Example"; this.ClientSize = new
System.Drawing.Size(448, 157); textBox1.Anchor = AnchorStyles.Left| AnchorStyles.Right |
AnchorStyles.Top; textBox1.Location = new System.Drawing.Point(80, 16); textBox1.Text = "<Name>";
helpLabel1.SetHelpText(textBox1, "This is the name field. Please enter your name here."); textBox1.TabIndex
= 2; textBox1.Size = new System.Drawing.Size(360, 20); this.Controls.Add(label1);
this.Controls.Add(textBox1); this.Controls.Add(button1); this.Controls.Add(helpLabel1); } /// <summary>
Visual C# Consolidado
1040
/// The main entry point for the application. /// </summary> [STAThread] public static void Main(string[]
args) { Application.Run(new HostApp()); } } }
Do Code Editor usa o ShowCode mtodo para iniciar e exibir um manipulador de eventos
que criado quando o Timer componente criado.
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using
System.Drawing.Design; using System.Data; using System.Reflection; using System.Runtime.Serialization;
using System.Text; using System.Windows.Forms; using System.Windows.Forms.Design; using
System.Windows.Forms.Design.Behavior; public class Form1 : Form { private DemoControl demoControl1;
private System.ComponentModel.IContainer components = null; public Form1() { InitializeComponent(); }
protected override void Dispose(bool disposing) { if (disposing && (components != null)) {
components.Dispose(); } base.Dispose(disposing); } [STAThread] static void Main() {
Application.EnableVisualStyles(); Application.Run(new Form1()); } #region Windows Form Designer
generated code private void InitializeComponent() { this.demoControl1 = new DemoControl();
this.SuspendLayout(); // // demoControl1 // this.demoControl1.AutoSize = true;
this.demoControl1.BackColor = System.Drawing.Color.Chartreuse; this.demoControl1.Location = new
System.Drawing.Point(0, 0); this.demoControl1.Name = "demoControl1"; this.demoControl1.Size = new
Visual C# Consolidado
1041
Visual C# Consolidado
1042
Visual C# Consolidado
1043
Visual C# Consolidado
1044
Visual C# Consolidado
1045
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.
A conexo com servios
A DemoControl classe adquire referncias a vrios servios em seu InitializeServices mtodo.
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(
Visual C# Consolidado
1046
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"); }
Visual C# Consolidado
1047
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.
Visual C# Consolidado
1048
Visual C# Consolidado
1049
Visual C# Consolidado
1050
2.
Substituir o CanConvertFrom mtodo que especifica o tipo o conversor pode converter do.
Este mtodo est sobrecarregado.
3.
4.
Substituir o CanConvertTo mtodo que especifica o tipo o conversor pode converter para.
No necessrio para substituir esse mtodo para converso para um tipo de seqncia.
Este mtodo est sobrecarregado.
5.
6.
Substituir o IsValid mtodo que realiza validao. Este mtodo est sobrecarregado.
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.
2.
3.
Visual C# Consolidado
1051
4.
5.
6.
Aplicar uma TypeConverterAttribute que indica o tipo de seu conversor tipo para o tipo
que voc est fornecendo um conjunto de valores padro para.
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#
using System; using System.ComponentModel; using System.Collections; using System.Drawing; using
System.Windows.Forms; namespace StandardValuesTest { public class StandardValuesIntConverter :
System.ComponentModel.TypeConverter { private ArrayList values; public StandardValuesIntConverter() {
// Initializes the standard values list with defaults. values = new ArrayList(new int[] { 1, 2, 3, 4, 5 }); } //
Indicates this converter provides a list of standard values. public override bool
GetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContext context) { return true; } //
Returns a StandardValuesCollection of standard value objects. public override
System.ComponentModel.TypeConverter.StandardValuesCollection
GetStandardValues(System.ComponentModel.ITypeDescriptorContext context) { // Passes the local integer
array. StandardValuesCollection svc = new StandardValuesCollection(values); return svc; } // Returns true
for a sourceType of string to indicate that // conversions from string to integer are supported. (The //
GetStandardValues method requires a string to native type // conversion because the items in the drop-down
list are // translated to string.) public override bool
CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Type sourceType) { if(
sourceType == typeof(string) ) return true; else return base.CanConvertFrom(context, sourceType); } // If
the type of the value to convert is string, parses the string // and returns the integer to set the value of the
property to. // This example first extends the integer array that supplies the // standard values collection if
the user-entered value is not // already in the array. public override object
ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo
culture, object value) { if( value.GetType() == typeof(string) ) { // Parses the string to get the integer to set to
the property. int newVal = int.Parse((string)value); // Tests whether new integer is already in the list. if(
!values.Contains(newVal) ) { // If the integer is not in list, adds it in order. values.Add(newVal);
values.Sort(); } // Returns the integer value to assign to the property. return newVal; } else return
base.ConvertFrom(context, culture, value); } } // Provides a test control with an integer property associated
with // the StandardValuesIntConverter type converter. public class IntStandardValuesControl :
System.Windows.Forms.UserControl { [TypeConverter(typeof(StandardValuesIntConverter))] public int
TestInt { get { return this.integer_field; } set { if(value.GetType() == typeof(int)) this.integer_field = value; }
} private int integer_field = 0; public IntStandardValuesControl() { this.BackColor = Color.White; this.Size =
Visual C# Consolidado
1052
new Size(472, 80); } // OnPaint override displays instructions for the example. protected override void
OnPaint(System.Windows.Forms.PaintEventArgs e) { if(this.DesignMode) {
e.Graphics.DrawString("TypeConverter.GetStandardValues Example Control", new
Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Blue), 5, 5); e.Graphics.DrawString("The
type converter for the TestInt property of this", new Font(FontFamily.GenericMonospace, 10), new
SolidBrush(Color.Black), 5, 20); e.Graphics.DrawString("component provides a list of standard values to
the", new Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Black), 5, 30);
e.Graphics.DrawString("Properties window. Setting a value through a property", new
Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Black), 5, 40); e.Graphics.DrawString("grid
adds it to the list of standard values.", new Font(FontFamily.GenericMonospace, 10), new
SolidBrush(Color.Black), 5, 50); } else { e.Graphics.DrawString("TypeConverter.GetStandardValues Example
Control", new Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Blue), 5, 5);
e.Graphics.DrawString("This control was intended for use in design mode.", new
Font(FontFamily.GenericMonospace, 10), new SolidBrush(Color.Black), 5, 20); } } } }
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.
Os desenvolvedores podem criar cdigo de inicializao baseado no construtor-que produz um
conversor tipo. Esses conversores tipo podem gerar cdigos de construtor dinamicamente usando
valores definidos em tempo de design a fim de configurar propriedades de um tipo em tempo de
execuo. O conversor tipo implementa a lgica para configurar o tipo e valores de um construtor
para a propriedade.
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.
Para criar um inicializador-baseado no Construtor de propriedades personalizadas, voc deve
associar um conversor tipo com o tipo da propriedade Ao inicializar, e o conversor tipo deve ser
capaz para converter em uma InstanceDescriptor.
Para implementar um conversor tipo que produz Propriedade baseado no construtorcdigo de inicializao
1.
2.
3.
Visual C# Consolidado
1053
O exemplo a seguir implementa um conversor tipo que pode gerar cdigo de inicializao
Propriedade-baseado no Construtor de propriedades do tipo Point.
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
2.
3.
Visual C# Consolidado
1054
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using
System.Windows.Forms; using System.Windows.Forms.Design; using
System.Windows.Forms.Design.Behavior; public class Form1 : Form { private DemoControl demoControl1;
private DemoControl demoControl2; private System.ComponentModel.IContainer components = null;
public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing &&
(components != null)) { components.Dispose(); } base.Dispose(disposing); } [STAThread] static void Main()
{ Application.EnableVisualStyles(); Application.Run(new Form1()); } private void InitializeComponent() {
this.demoControl2 = new DemoControl(); this.demoControl1 = new DemoControl(); this.SuspendLayout();
// // demoControl2 // this.demoControl2.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) |
System.Windows.Forms.AnchorStyles.Right))); this.demoControl2.BackColor =
System.Drawing.Color.LightBlue; this.demoControl2.Location = new System.Drawing.Point(40, 40);
this.demoControl2.Margin = new System.Windows.Forms.Padding(20); this.demoControl2.Name =
"demoControl2"; this.demoControl2.Padding = new System.Windows.Forms.Padding(20);
this.demoControl2.Size = new System.Drawing.Size(284, 177); this.demoControl2.TabIndex = 1; // //
demoControl1 // this.demoControl1.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left)));
this.demoControl1.BackColor = System.Drawing.Color.LightBlue; this.demoControl1.Location = new
System.Drawing.Point(354, 21); this.demoControl1.Margin = new System.Windows.Forms.Padding(10);
this.demoControl1.Name = "demoControl1"; this.demoControl1.Padding = new
System.Windows.Forms.Padding(10); this.demoControl1.Size = new System.Drawing.Size(184, 207);
this.demoControl1.TabIndex = 0; // // Form1 // this.ClientSize = new System.Drawing.Size(594, 352);
this.Controls.Add(this.demoControl2); this.Controls.Add(this.demoControl1); this.Name = "Form1";
this.Padding = new System.Windows.Forms.Padding(20); this.Text = "a"; this.ResumeLayout(false); } } //
This control demonstrates the use of a custom designer. [DesignerAttribute(typeof(DemoControlDesigner))]
Visual C# Consolidado
1055
Visual C# Consolidado
1056
this.behaviorSvc.Adorners.Add(this.marginAndPaddingAdorner);
this.marginAndPaddingAdorner.Glyphs.Add(new MarginAndPaddingGlyph( this.behaviorSvc,
this.changeService, this.selectionService, this, this.marginAndPaddingAdorner)); } // This utility method
connects the designer to various services. // These references are cached for convenience. private void
InitializeServices() { // Acquire a reference to IComponentChangeService. this.changeService =
GetService(typeof(IComponentChangeService)) as IComponentChangeService; // Acquire a reference to
ISelectionService. this.selectionService = GetService(typeof(ISelectionService)) as ISelectionService; //
Acquire a reference to BehaviorService. this.behaviorSvc = GetService(typeof(BehaviorService)) as
BehaviorService; } // This method creates the DesignerActionList on demand, causing // smart tags to
appear on the control being designed. public override DesignerActionListCollection ActionLists { get { if (null
== actionLists) { actionLists = new DesignerActionListCollection(); actionLists.Add( new
AnchorActionList(this.Component)); } return actionLists; } } // This class defines the smart tags that appear
on the control // being designed. In this case, the Anchor property appears // on the smart tag and its value
can be changed through a // UI Type Editor created automatically by the // DesignerActionService. public
class AnchorActionList : System.ComponentModel.Design.DesignerActionList { // Cache a reference to the
control. private DemoControl relatedControl; //The constructor associates the control //with the smart tag
list. public AnchorActionList(IComponent component): base(component) { this.relatedControl = component
as DemoControl; } // Properties that are targets of DesignerActionPropertyItem entries. public AnchorStyles
Anchor { get { return this.relatedControl.Anchor; } set { PropertyDescriptor pdAnchor =
TypeDescriptor.GetProperties(this.relatedControl)["Anchor"]; pdAnchor.SetValue(this.relatedControl,
value); } } // This method creates and populates the // DesignerActionItemCollection which is used to //
display smart tag items. public override DesignerActionItemCollection GetSortedActionItems() {
DesignerActionItemCollection items = new DesignerActionItemCollection(); // Add a descriptive header.
items.Add(new DesignerActionHeaderItem("Anchor Styles")); // Add a DesignerActionPropertyItem for the
Anchor // property. This will be displayed in a panel using // the AnchorStyles UI Type Editor.
items.Add(new DesignerActionPropertyItem( "Anchor", "Anchor Style") ); return items; } } #region Glyph
Implementations // 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
Visual C# Consolidado
1057
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 =
this.behaviorService.ControlRectInAdornerWindow(this.relatedControl); Rectangle boundsVal = new
Rectangle( controlRect.Left + c.Padding.Left, controlRect.Top + c.Padding.Top, controlRect.Width c.Padding.Right * 2, controlRect.Height - c.Padding.Bottom * 2); return boundsVal; } } // There are no
keyboard or mouse behaviors associated with // this glyph, but you could add them to this class. internal
class MarginAndPaddingBehavior : Behavior { } } // 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. // Doubleclicking 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; // This is the cursor returned if hit test is positive.
protected Cursor hitTestCursor = Cursors.Hand; // Cache references to services that will be needed. private
BehaviorService behaviorService = null; private IComponentChangeService changeService = null; private
ISelectionService selectionService = null; // Keep a reference to the designer for convenience. private
IDesigner relatedDesigner = null; // Keep a reference to the adorner for convenience. private Adorner
anchorAdorner = null; // Keep a reference to the control being designed. private Control relatedControl =
null; // This defines the AnchorStyle which this glyph represents. private AnchorStyles anchorStyle; 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); } #region Overrides public
override Rectangle Bounds { get { return this.boundsValue; } } // This method renders the AnchorGlyph as a
filled rectangle // if the glyph is enabled, or as an open rectangle if the // glyph is disabled. public override
void Paint(PaintEventArgs e) { if (this.IsEnabled) { using (Brush b = new SolidBrush(Color.Tomato)) {
e.Graphics.FillRectangle(b, this.Bounds); } } else { using (Pen p = new Pen(Color.Tomato)) {
e.Graphics.DrawRectangle(p, this.Bounds); } } } // An AnchorGlyph has keyboard and mouse interaction, so
it's // important to return a cursor when the mouse is located in // the glyph's hit region. When this occurs,
the // AnchorBehavior becomes active. public override Cursor GetHitTest(Point p) { if
(hitBoundsValue.Contains(p)) { return hitTestCursor; } return null; } #endregion #region Event Handlers //
The AnchorGlyph objects should mimic the resize glyphs; // they should only be visible when the control is
the // primary selection. The adorner is enabled when the // control is the primary selection and disabled
when // it is not. void selectionService_SelectionChanged(object sender, EventArgs e) { if
Visual C# Consolidado
1058
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.
Visual C# Consolidado
1059
Visual C# Consolidado
1060
Estender o comportamento
Voc estender o comportamento do seu projeto personalizado UI, implementar uma Behavior
classe. A Behavior classe subordinado Glyph Classe.
Cuidado
O ambiente de desenvolvimento no permite Behavior objetos que no esto conectados a um
Glyph objeto.
Voc anexar um Behavior objeto a um Glyph objeto no construtor seu Glyph do tipo.
O exemplo de cdigo a seguir mostra como implementar o AnchorGlyph Construtor.
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); }
Visual C# Consolidado
1061
This is the cursor returned if hit test is positive. protected Cursor hitTestCursor = Cursors.Hand; // Cache
references to services that will be needed. private BehaviorService behaviorService = null; private
IComponentChangeService changeService = null; private ISelectionService selectionService = null; // Keep a
reference to the designer for convenience. private IDesigner relatedDesigner = null; // Keep a reference to
the adorner for convenience. private Adorner anchorAdorner = null; // Keep a reference to the control being
designed. private Control relatedControl = null; // This defines the AnchorStyle which this glyph represents.
private AnchorStyles anchorStyle; 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); } #region Overrides public
override Rectangle Bounds { get { return this.boundsValue; } } // This method renders the AnchorGlyph as a
filled rectangle // if the glyph is enabled, or as an open rectangle if the // glyph is disabled. public override
void Paint(PaintEventArgs e) { if (this.IsEnabled) { using (Brush b = new SolidBrush(Color.Tomato)) {
e.Graphics.FillRectangle(b, this.Bounds); } } else { using (Pen p = new Pen(Color.Tomato)) {
e.Graphics.DrawRectangle(p, this.Bounds); } } } // An AnchorGlyph has keyboard and mouse interaction, so
it's // important to return a cursor when the mouse is located in // the glyph's hit region. When this occurs,
the // AnchorBehavior becomes active. public override Cursor GetHitTest(Point p) { if
(hitBoundsValue.Contains(p)) { return hitTestCursor; } return null; } #endregion #region Event Handlers //
The AnchorGlyph objects should mimic the resize glyphs; // they should only be visible when the control is
the // primary selection. The adorner is enabled when the // control is the primary selection and disabled
when // it is not. void selectionService_SelectionChanged(object sender, EventArgs e) { if
(object.ReferenceEquals( this.selectionService.PrimarySelection, this.relatedControl)) {
this.ComputeBounds(); this.anchorAdorner.Enabled = true; } else { this.anchorAdorner.Enabled = false; } }
// If any of several properties change, the bounds of the // AnchorGlyph must be computed again. void
changeService_ComponentChanged( object sender, ComponentChangedEventArgs e) { if
(object.ReferenceEquals( e.Component, this.relatedControl)) { if (e.Member.Name == "Anchor" ||
e.Member.Name == "Size" || e.Member.Name == "Height" || e.Member.Name == "Width" ||
e.Member.Name == "Location") { // Compute the bounds of this glyph. this.ComputeBounds(); // Tell the
adorner to repaint itself. this.anchorAdorner.Invalidate(); } } } #endregion #region Implementation // This
utility method computes the position and size of // the AnchorGlyph in the Adorner window's coordinates. //
It also computes the hit test bounds, which are // slightly larger than the glyph's bounds. private void
ComputeBounds() { Rectangle translatedBounds = new Rectangle(
this.behaviorService.ControlToAdornerWindow(this.relatedControl), this.relatedControl.Size); if
((this.anchorStyle & AnchorStyles.Top) == AnchorStyles.Top) { this.boundsValue = new Rectangle(
translatedBounds.X + (translatedBounds.Width / 2) - (glyphSize / 2), translatedBounds.Y + glyphSize,
glyphSize, glyphSize); } if ((this.anchorStyle & AnchorStyles.Bottom) == AnchorStyles.Bottom) {
this.boundsValue = new Rectangle( translatedBounds.X + (translatedBounds.Width / 2) - (glyphSize / 2),
translatedBounds.Bottom - 2*glyphSize, glyphSize, glyphSize); } if ((this.anchorStyle & AnchorStyles.Left)
== AnchorStyles.Left) { this.boundsValue = new Rectangle( translatedBounds.X + glyphSize,
Visual C# Consolidado
1062
C#
Visual C# Consolidado
1063
// This utility method creates an adorner for the anchor glyphs. // It then creates four AnchorGlyph objects
and adds them to // the adorner's Glyphs collection. private void InitializeAnchorAdorner() {
this.anchorAdorner = new Adorner(); this.behaviorSvc.Adorners.Add(this.anchorAdorner);
this.anchorAdorner.Glyphs.Add(new AnchorGlyph( AnchorStyles.Left, this.behaviorSvc, this.changeService,
this.selectionService, this, this.anchorAdorner) ); this.anchorAdorner.Glyphs.Add(new AnchorGlyph(
AnchorStyles.Top, this.behaviorSvc, this.changeService, this.selectionService, this, this.anchorAdorner) );
this.anchorAdorner.Glyphs.Add(new AnchorGlyph( AnchorStyles.Right, this.behaviorSvc,
this.changeService, this.selectionService, this, this.anchorAdorner) ); this.anchorAdorner.Glyphs.Add(new
AnchorGlyph( AnchorStyles.Bottom, this.behaviorSvc, this.changeService, this.selectionService, this,
this.anchorAdorner) ); }
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.
C#
Visual C# Consolidado
1064
Visual C# Consolidado
1065
method is the recommended test for // equality between Color structs. if (this.lightColorValue.ToArgb() !=
value.ToArgb()) { this.lightColorValue = value; this.lightBrush = new SolidBrush(value); } } }
[Category("Marquee")] [Browsable(true)] public Color DarkColor { get { return this.darkColorValue; } set {
// The DarkColor property is only changed if the // client provides a different value. Comparing values //
from the ToArgb method is the recommended test for // equality between Color structs. if
(this.darkColorValue.ToArgb() != value.ToArgb()) { this.darkColorValue = value; this.darkBrush = new
SolidBrush(value); } } } [Category("Marquee")] [Browsable(true)] public int LightSpacing { get { return
this.lightSpacingValue; } set { if (value >= 0) { this.lightSpacingValue = value; } else { throw new
ArgumentOutOfRangeException("LightSpacing", "must be >= 0"); } } } [Category("Marquee")]
[Browsable(true)] [EditorAttribute(typeof(LightShapeEditor),
typeof(System.Drawing.Design.UITypeEditor))] public MarqueeLightShape LightShape { get { return
this.lightShapeValue; } set { this.lightShapeValue = value; } } [Category("Marquee")] [Browsable(true)]
public MarqueeSpinDirection SpinDirection { get { return this.spinDirectionValue; } set {
this.spinDirectionValue = value; } } #endregion
/////////////////////////////////////////////////////////////////////// #region Implementation
protected override void OnLayout(LayoutEventArgs levent) { base.OnLayout(levent); // Repaint when the
layout has changed. this.Refresh(); } // This method paints the lights around the border of the // control. It
paints the top row first, followed by the // right side, the bottom row, and the left side. The color // of each
light is determined by the IsLit method and // depends on the light's position relative to the value // of
currentOffset. protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics;
g.Clear(this.BackColor); base.OnPaint(e); // If the control is large enough, draw some lights. if (this.Width >
MaxLightSize && this.Height > MaxLightSize) { // The position of the next light will be incremented // by
this value, which is equal to the sum of the // light size and the space between two lights. int increment =
this.lightSizeValue + this.lightSpacingValue; // Compute the number of lights to be drawn along the //
horizontal edges of the control. int horizontalLights = (this.Width - increment) / increment; // Compute the
number of lights to be drawn along the // vertical edges of the control. int verticalLights = (this.Height increment) / increment; // These local variables will be used to position and // paint each light. int xPos = 0;
int yPos = 0; int lightCounter = 0; Brush brush; // Draw the top row of lights. for (int i = 0; i <
horizontalLights; i++) { brush = IsLit(lightCounter) ? this.lightBrush : this.darkBrush; DrawLight(g, brush,
xPos, yPos); xPos += increment; lightCounter++; } // Draw the lights flush with the right edge of the control.
xPos = this.Width - this.lightSizeValue; // Draw the right column of lights. for (int i = 0; i < verticalLights;
i++) { brush = IsLit(lightCounter) ? this.lightBrush : this.darkBrush; DrawLight(g, brush, xPos, yPos); yPos
+= increment; lightCounter++; } // Draw the lights flush with the bottom edge of the control. yPos =
this.Height - this.lightSizeValue; // Draw the bottom row of lights. for (int i = 0; i < horizontalLights; i++) {
brush = IsLit(lightCounter) ? this.lightBrush : this.darkBrush; DrawLight(g, brush, xPos, yPos); xPos -=
increment; lightCounter++; } // Draw the lights flush with the left edge of the control. xPos = 0; // Draw the
left column of lights. for (int i = 0; i < verticalLights; i++) { brush = IsLit(lightCounter) ? this.lightBrush :
this.darkBrush; DrawLight(g, brush, xPos, yPos); yPos -= increment; lightCounter++; } } } // This method
determines if the marquee light at lightIndex // should be lit. The currentOffset field specifies where // the
"first" light is located, and the "position" of the // light given by lightIndex is computed relative to this //
offset. If this position modulo lightPeriodValue is zero, // the light is considered to be on, and it will be
painted // with the control's lightBrush. protected virtual bool IsLit(int lightIndex) { int directionFactor =
(this.spinDirectionValue == MarqueeSpinDirection.CW ? -1 : 1); return ( (lightIndex + directionFactor *
this.currentOffset) % this.lightPeriodValue == 0 ); } protected virtual void DrawLight( Graphics g, Brush
brush, int xPos, int yPos) { switch (this.lightShapeValue) { case MarqueeLightShape.Square: {
g.FillRectangle(brush, xPos, yPos, this.lightSizeValue, this.lightSizeValue); break; } case
Visual C# Consolidado
1066
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
Visual C# Consolidado
1067
isLit is false, the text is painted in the dark color. // This value changes whenever the BackgroundWorker
component // raises the ProgressChanged event. private bool isLit = true; // These fields back the public
properties. private int updatePeriodValue = 50; private Color lightColorValue; private Color darkColorValue;
// These brushes are used to paint the light and dark // colors of the text. private Brush lightBrush; private
Brush darkBrush; // This component updates the control asynchronously. private BackgroundWorker
backgroundWorker1; public MarqueeText() { // This call is required by the Windows.Forms Form Designer.
InitializeComponent(); // Initialize light and dark colors // to the control's default values.
this.lightColorValue = this.ForeColor; this.darkColorValue = this.BackColor; this.lightBrush = new
SolidBrush(this.lightColorValue); this.darkBrush = new SolidBrush(this.darkColorValue); }
/////////////////////////////////////////////////////////////////////// #region IMarqueeWidget
implementation public virtual void StartMarquee() { // Start the updating thread and pass it the
UpdatePeriod. this.backgroundWorker1.RunWorkerAsync(this.UpdatePeriod); } public virtual void
StopMarquee() { // Stop the updating thread. this.backgroundWorker1.CancelAsync(); }
[Category("Marquee")] [Browsable(true)] public int UpdatePeriod { get { return this.updatePeriodValue; }
set { if (value > 0) { this.updatePeriodValue = value; } else { throw new
ArgumentOutOfRangeException("UpdatePeriod", "must be > 0"); } } } #endregion
/////////////////////////////////////////////////////////////////////// #region Public Properties
[Category("Marquee")] [Browsable(true)] public Color LightColor { get { return this.lightColorValue; } set {
// The LightColor property is only changed if the // client provides a different value. Comparing values //
from the ToArgb method is the recommended test for // equality between Color structs. if
(this.lightColorValue.ToArgb() != value.ToArgb()) { this.lightColorValue = value; this.lightBrush = new
SolidBrush(value); } } } [Category("Marquee")] [Browsable(true)] public Color DarkColor { get { return
this.darkColorValue; } set { // The DarkColor property is only changed if the // client provides a different
value. Comparing values // from the ToArgb method is the recommended test for // equality between Color
structs. if (this.darkColorValue.ToArgb() != value.ToArgb()) { this.darkColorValue = value; this.darkBrush =
new SolidBrush(value); } } } #endregion
/////////////////////////////////////////////////////////////////////// #region Implementation
protected override void OnPaint(PaintEventArgs e) { // The text is painted in the light or dark color, //
depending on the current value of isLit. this.ForeColor = this.isLit ? this.lightColorValue :
this.darkColorValue; base.OnPaint(e); } // This method is called in the worker thread's context, // so it must
not make any calls into the MarqueeText control. // Instead, it communicates to the control using the //
ProgressChanged event. // // The only work done in this event handler is // to sleep for the number of
milliseconds specified // by UpdatePeriod, then raise the ProgressChanged event. private void
backgroundWorker1_DoWork( object sender, System.ComponentModel.DoWorkEventArgs e) {
BackgroundWorker worker = sender as BackgroundWorker; // This event handler will run until the client
cancels // the background task by calling CancelAsync. while (!worker.CancellationPending) { // The
Argument property of the DoWorkEventArgs // object holds the value of UpdatePeriod, which // was passed
as the argument to the RunWorkerAsync // method. Thread.Sleep((int)e.Argument); // The DoWork
eventhandler does not actually report // progress; the ReportProgress event is used to // periodically alert
the control to update its state. worker.ReportProgress(0); } } // The ProgressChanged event is raised by the
DoWork method. // This event handler does work that is internal to the // control. In this case, the text is
toggled between its // light and dark state, and the control is told to // repaint itself. private void
backgroundWorker1_ProgressChanged(object sender,
System.ComponentModel.ProgressChangedEventArgs e) { this.isLit = !this.isLit; this.Refresh(); } private
void InitializeComponent() { this.backgroundWorker1 = new
System.ComponentModel.BackgroundWorker(); // // backgroundWorker1 //
Visual C# Consolidado
1068
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true; this.backgroundWorker1.ProgressChanged +=
new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); } #endregion } }
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
Visual C# Consolidado
1069
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(
Visual C# Consolidado
1070
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
Visual C# Consolidado
1071
Visual C# Consolidado
1072
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.
C#
using System; using System.Collections; using System.ComponentModel; using
System.ComponentModel.Design; using System.Diagnostics; using System.Drawing; using
System.Drawing.Design; using System.Data; using System.Reflection; using System.Runtime.Serialization;
using System.Text; using System.Windows.Forms; using System.Windows.Forms.Design; using
System.Windows.Forms.Design.Behavior; public class Form1 : Form { private DemoControl demoControl1;
private System.ComponentModel.IContainer components = null; public Form1() { InitializeComponent(); }
protected override void Dispose(bool disposing) { if (disposing && (components != null)) {
Visual C# Consolidado
1073
Visual C# Consolidado
1074
Visual C# Consolidado
1075
Visual C# Consolidado
1076
// This method creates and populates the // DesignerActionItemCollection which is used to // display smart
tag items. public override DesignerActionItemCollection GetSortedActionItems() {
DesignerActionItemCollection items = new DesignerActionItemCollection(); // If the Timer component has
not been created, show the // "Create Timer" DesignerAction item. // // If the Timer component exists, show
the timer-related // options. if (this.relatedDesigner.createdTimer == null) { items.Add(new
DesignerActionMethodItem( this, "CreateTimer", "Create Timer", true)); } else { items.Add(new
DesignerActionMethodItem( this, "ShowEventHandlerCode", "Show Event Handler Code", true));
items.Add(new DesignerActionMethodItem( this, "RemoveTimer", "Remove Timer", true)); } items.Add(new
DesignerActionMethodItem( this, "GetExtenderProviders", "Get Extender Providers", true)); items.Add(new
DesignerActionMethodItem( this, "GetDemoControlReferences", "Get DemoControl References", true));
items.Add(new DesignerActionMethodItem( this, "GetPathOfAssembly", "Get Path of Executing Assembly",
true)); items.Add(new DesignerActionMethodItem( this, "GetComponentTypes", "Get ScrollableControl
Types", true)); items.Add(new DesignerActionMethodItem( this, "GetToolboxCategories", "Get Toolbox
Categories", true)); items.Add(new DesignerActionMethodItem( this, "SetBackColor", "Set Back Color",
true)); return items; } // This method creates a Timer component using the //
IDesignerHost.CreateComponent method. It also // creates an event handler for the Timer component's //
tick event. private void CreateTimer() { if (this.host != null) { if (this.relatedDesigner.createdTimer == null) {
// Create and configure the Timer object. this.relatedDesigner.createdTimer =
this.host.CreateComponent(typeof(Timer)) as Timer; Timer t = this.relatedDesigner.createdTimer; t.Interval
= 1000; t.Enabled = true; EventDescriptorCollection eventColl = TypeDescriptor.GetEvents(t, new
Attribute[0]); if (eventColl != null) { EventDescriptor ed = eventColl["Tick"] as EventDescriptor; if (ed !=
null) { PropertyDescriptor epd = this.relatedDesigner.eventBindingService.GetEventProperty(ed);
epd.SetValue(t, "timer_Tick"); } } this.relatedDesigner.actionUiService.Refresh(this.relatedControl); } } } //
This method uses the IEventBindingService.ShowCode // method to start the Code Editor. It places the caret
// in the timer_tick method created by the CreateTimer method. private void ShowEventHandlerCode() {
Timer t = this.relatedDesigner.createdTimer; if (t != null) { EventDescriptorCollection eventColl =
TypeDescriptor.GetEvents(t, new Attribute[0]); if (eventColl != null) { EventDescriptor ed =
eventColl["Tick"] as EventDescriptor; if (ed != null) { this.relatedDesigner.eventBindingService.ShowCode(t,
ed); } } } } // This method uses the IDesignerHost.DestroyComponent method // to remove the Timer
component from the design environment. private void RemoveTimer() { if (this.host != null) { if
(this.relatedDesigner.createdTimer != null) { this.host.DestroyComponent(
this.relatedDesigner.createdTimer); this.relatedDesigner.createdTimer = null;
this.relatedDesigner.actionUiService.Refresh( this.relatedControl); } } } // This method uses
IExtenderListService.GetExtenderProviders // to enumerate all the extender providers and display them //
in a MessageBox. private void GetExtenderProviders() { if (this.relatedDesigner.listService != null) {
StringBuilder sb = new StringBuilder(); IExtenderProvider[] providers =
this.relatedDesigner.listService.GetExtenderProviders(); for (int i = 0; i < providers.Length; i++) {
sb.Append(providers[i].ToString()); sb.Append("\r\n"); } MessageBox.Show( sb.ToString(), "Extender
Providers"); } } // This method uses the IReferenceService.GetReferences method // to enumerate all the
instances of DemoControl on the // design surface. private void GetDemoControlReferences() { if
(this.relatedDesigner.referenceService != null) { StringBuilder sb = new StringBuilder(); object[] refs =
this.relatedDesigner.referenceService.GetReferences(typeof(DemoControl)); for (int i = 0; i < refs.Length;
i++) { sb.Append(refs[i].ToString()); sb.Append("\r\n"); } MessageBox.Show( sb.ToString(), "DemoControl
References"); } } // This method uses the ITypeResolutionService.GetPathOfAssembly // method to display
the path of the executing assembly. private void GetPathOfAssembly() { if
(this.relatedDesigner.typeResService != null) { System.Reflection.AssemblyName name =
Visual C# Consolidado
1077
System.Reflection.Assembly.GetExecutingAssembly().GetName(); MessageBox.Show(
this.relatedDesigner.typeResService.GetPathOfAssembly(name), "Path of executing assembly"); } } // This
method uses the IComponentDiscoveryService.GetComponentTypes // method to find all the types that
derive from // ScrollableControl. private void GetComponentTypes() { if
(this.relatedDesigner.componentDiscoveryService != null) { ICollection components =
this.relatedDesigner.componentDiscoveryService.GetComponentTypes(host, typeof(ScrollableControl)); if
(components != null) { if (components.Count > 0) { StringBuilder sb = new StringBuilder(); IEnumerator e =
components.GetEnumerator(); while (e.MoveNext()) { sb.Append(e.Current.ToString()); sb.Append("\r\n");
} MessageBox.Show( sb.ToString(), "Controls derived from ScrollableControl"); } } } } // This method uses
the IToolboxService.CategoryNames // method to enumerate all the categories that appear // in the Toolbox.
private void GetToolboxCategories() { if (this.relatedDesigner.toolboxService != null) { StringBuilder sb =
new StringBuilder(); CategoryNameCollection names = this.relatedDesigner.toolboxService.CategoryNames;
foreach (string name in names) { sb.Append(name.ToString()); sb.Append("\r\n"); }
MessageBox.Show(sb.ToString(), "Toolbox Categories"); } } // This method sets the shadowed BackColor
property on the // designer. This is the value that is serialized by the // design environment. private void
SetBackColor() { ColorDialog d = new ColorDialog(); if (d.ShowDialog() == DialogResult.OK) {
this.relatedDesigner.BackColor = d.Color; } } } }
PreFilterAttributes
PostFilterAttributes
PreFilterEvents
PostFilterEvents
PreFilterProperties
PostFilterProperties
C#
Visual C# Consolidado
1078
// The PostFilterProperties method is where you modify existing // properties. You must only use this
method to modify existing // items. Do not add or remove items here. Also, be sure to // call
base.PostFilterProperties(properties) after your filtering // logic. // // In this implementation, the Enabled
property is hidden from // any PropertyGrid or Properties window. This is done by // creating a copy of the
existing PropertyDescriptor and // attaching two new Attributes: Browsable and EditorBrowsable. protected
override void PostFilterProperties(IDictionary properties) { PropertyDescriptor pd = properties["Enabled"]
as PropertyDescriptor; pd = TypeDescriptor.CreateProperty( pd.ComponentType, pd, new Attribute[2] { new
BrowsableAttribute(false), new EditorBrowsableAttribute(EditorBrowsableState.Never)});
properties[pd.Name] = pd; // Always call the base PostFilterProperties implementation // after you modify
the properties collection. base.PostFilterProperties(properties); }
Compilando o cdigo
Quando voc faz alteraes aos aspectos em tempo de criao de um componente, voc
precisar recriar o projeto de controle. Alm disso, se no houver outro projeto Windows Forms
que aberto e usa esse componente, voc provavelmente precisar atualizar o projeto para ver
as alteraes. Normalmente, voc precisar fechar e reabrir a janela de design que contm o
componente.
Visual C# Consolidado
1079
Visual C# Consolidado
1080
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Excel
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Criando um novo projeto
Nesta etapa, voc ir criar um projeto de aplicativos do Excel.
Para criar um novo projeto
Criar um projeto de pasta de trabalho do Excel com o nome WinFormInput. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o
WinFormInput projeto para Solution Explorer.
Adicionar um controle NamedRange para a planilha
5.
6.
Pressione ENTER.
Visual C# Consolidado
1081
7.
8.
9.
10. Selecione o boto, localizar a propriedade Text na janela Properties, e alterar o texto OK.
Em seguida, adicione cdigo para ThisWorkbook.vb ou ThisWorkbook.cs para coletar informaes
do usurio.
Exibindo o formulrio do Windows e coletando informaes
Criar uma instncia do formulrio GetInputString Windows e exibi-lo, e em seguida, escrever as
informaes do usurio em uma clula na planilha.
Para exibir o formulrio e coletar informaes
4.
5.
6.
C#
7.
Prxima adicionar cdigo ao formulrio para lidar com clique o boto na evento.
Visual C# Consolidado
1082
5.
Clique duas vezes no boto para abrir o arquivo de cdigo com manipulador de eventos do
boto Click adicionado.
6.
Adicione cdigo ao manipulador de eventos para levar a entrada da caixa de texto, envi-lo
para a funo WriteStringToCell, e depois feche o formulrio.
C#
Globals.ThisWorkbook.WriteStringToCell(this.textBox1.Text); this.Dispose();
Testando
Agora voc pode testar sua pasta de trabalho para certificar-se de que o formulrio Windows
aparecer, e se a entrada aparece nesta planilha.
Para testar sua pasta de trabalho
5.
6.
7.
8.
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.
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Visual C# Consolidado
1083
Nesta etapa, voc ir criar um projeto usando Visual Studio Tools for Office pasta de trabalho do
Excel.
Para criar um novo projeto
Para essa explicao passo a passo, voc precisar trs CheckBox controles e algum texto em
um NamedRange controle.
Para adicionar trs caixas de seleo
9.
Verifique se a pasta de trabalho est abra no designer visual studio e que Sheet1 est
aberto.
10. Na guia Common Controls da Toolbox, arraste um CheckBox controle para ou prxima
clula B2 na Sheet1.
11. No menu View, selecione Properties Janela.
12. Certifique-se de que que Checkbox1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e altere as propriedades a seguir:
Propriedade
Value (Valor)
Name
applyBoldFont
Text
Negrito
13. Arraste uma segunda caixa de seleo ou prxima clula B4 e alterar as seguintes
propriedades:
Propriedade
Value (Valor)
Name
applyItalicFont
Text
Itlico
14. Arraste uma caixa de seleo terceira ou prxima clula B6 e alterar as seguintes
propriedades:
Propriedade
Value (Valor)
Name
applyUnderlineFont
Visual C# Consolidado
1084
Text
Sublinhado
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.
Para adicionar texto a um controle NamedRange
6.
7.
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.
8.
Clique em OK.
9.
10. Certifique-se de que que NamedRange1 esteja visvel na caixa de listagem Nome de
objeto da janela Properties, e altere as propriedades a seguir:
Propriedade
Value (Valor)
Name
textFont
Value2
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.
Clique com o boto direito do mouse Sheet1 e clique View Code no menu de atalho
7.
8.
Visual C# Consolidado
1085
9.
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.
5.
6.
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:.
Visual C# Consolidado
1086
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:
Excel.
Criando o projeto
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.
7.
8.
9.
Value (Valor)
Name
insertText
Visual C# Consolidado
1087
Text
Inserir texto
Na Solution Explorer, clique com o boto direito do mouse Sheet1 e, em seguida clique
View Code no menu de atalho.
5.
6.
Em C#, adicione um manipulador de eventos para o Startup evento como mostrado abaixo.
Para obter informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.insertText.Click += new EventHandler(insertText_Click);
Testar o aplicativo
Agora voc pode testar sua pasta de trabalho para certificar-se que a mensagem Hello World!
aparece na caixa de texto quando voc clica no boto.
Para testar sua pasta de trabalho
4.
5.
Clique no boto.
6.
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:.
Visual C# Consolidado
1088
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:
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,
9.
Visual C# Consolidado
1089
10. Verificar que $A$1 aparece na caixa de texto editvel, e essa clula A1 estiver
selecionada. Se no estiver, clique em Clula A1 para selecion-lo.
11. Clique em OK.
Clula A1 se torna um intervalo nomeado namedRange1. No h nenhuma indicao visvel
na planilha, mas namedRange1 aparece na caixa Name (localizada logo acima da planilha no
lado esquerdo). Quando Clula A1 estiver selecionada
12. Adicionar um outro NamedRange controle a clula B3.
13. Verificar que $B$3 aparece na caixa de texto editvel, e essa clula B3 estiver
selecionada. Se no estiver, clique em Clula B3 para selecion-lo.
14. Clique em OK.
Clula B3 se torna um intervalo nomeado namedRange2.
4.
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
5.
6.
Em C#, voc deve adicionar manipuladores de eventos para o intervalo nomeado como
mostrado no Startup evento abaixo. Para obter informaes sobre como criar
manipuladores de eventos, consulte Como criar manipuladores de eventos em Ferramentas
do Visual Studio do Office:.
C#
this.namedRange1.BeforeDoubleClick += new Microsoft.Office.Interop.Excel.
DocEvents_BeforeDoubleClickEventHandler(namedRange1_BeforeDoubleClick);
this.namedRange1.Change += new Microsoft.Office.Interop.Excel.
DocEvents_ChangeEventHandler(namedRange1_Change); this.namedRange1.SelectionChange
+=new Microsoft.Office.Interop.Excel.
DocEvents_SelectionChangeEventHandler(namedRange1_SelectionChange);
Visual C# Consolidado
1090
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.
Adicionar cdigo para responder ao evento SelectionChange
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.
8.
9.
Visual C# Consolidado
1091
10. 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.
11. Alterar o texto dentro namedRange1.
12. 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:.
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Visual C# Consolidado
1092
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
Visual C# Consolidado
1093
14. Voltar para Visual Studio, e pressione F5 para executar o projeto meu teste de segurana.
Ser exibida informando a atual poltica de segurana .NET permite que no no que a
personalizao para executar uma mensagem de erro.
15. Clique em OK.
16. Feche o Excel.
O conjunto no pode ser executado se ele no tiver permisso explcita na Diretiva de Segurana
Microsoft .NET.
Em seguida, conceda permisso para o conjunto usando um nome forte em vez de uma URL para
prova.
Dando um nome de alta segurana para o conjunto
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Visual C# Consolidado
1094
4.
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
Visual C# Consolidado
1095
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.
Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources clique dentro a pasta de trabalho do Excel e depois verificar novamente.
no estiver disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Aps uma conexo foi selecionado ou criado, clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado da Customers tabela.
17. Clique em Finish.
O assistente adicionar a Customers tabela para a Data Sources janela. Ele tambm adiciona
um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Adicionar controles a planilha
Para essa explicao passo a passo, voc precisa de dois intervalos nomeados e quatro botes
na primeira planilha. Primeiro, adicione os dois intervalos nomeados a partir da Data Sources
janela para que automaticamente eles so vinculados fonte de dados. Em seguida, adicione os
botes da Toolbox.
Visual C# Consolidado
1096
4.
Adicionar mais trs botes s seguintes clulas nesta ordem, para que os nomes so
conforme mostrado:
Clula
(Nome)
B3
Button2
C3
Button3
D3
Button4
5.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para cada
boto.
C#
this.button1.Text = "|<"; this.button2.Text = "<"; this.button3.Text = ">"; this.button4.Text = ">|";
6.
C#
this.button1.Click += new EventHandler(button1_Click); this.button2.Click += new
EventHandler(button2_Click); this.button3.Click += new EventHandler(button3_Click);
this.button4.Click += new EventHandler(button4_Click);
Visual C# Consolidado
1097
Agora, adicione cdigo para manipular os Click eventos dos botes para que o usurio pode
procurar pelos registros.
Adicionar cdigo para ativar rolagem atravs dos registros
Adicione cdigo ao manipulador Click de eventos de cada boto para percorrer os registros.
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.
6.
7.
Clique em e B1. (Button3) boto e confirme se o registro seguinte aparece na clula A1 a >
Visual C# Consolidado
1098
8.
Clique nos outros botes de rolagem para confirmar que o registro muda conforme o
esperado.
Prximas etapas
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.
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
1099
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.
Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources clique dentro a pasta de trabalho do Excel e depois verificar novamente.
no estiver disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Aps uma conexo foi selecionado ou criado, clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado da Employees tabela.
17. Clique em Finish.
O assistente adicionar a Employees tabela para a Data Sources janela. Ele tambm adiciona
um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Adicionar controles a planilha
Para essa explicao passo a passo, voc precisa um ListObject controle e um Button controle na
primeira planilha. Primeiro, adicione o ListObject controle a partir da Data Sources janela para
que ela est vinculada automaticamente fonte de dados. Em seguida, adicione o Button
controle da Toolbox.
6.
7.
8.
Visual C# Consolidado
1100
so adicionados ao projeto. um BindingSource O controle acoplado que por sua vez est
vinculado a DataSet instncia. o BindingSource,
Ao inicializar o controle
4.
5.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para o b utton.
C#
this.button1.Text = "Save";
6.
C#
this.button1.Click += new EventHandler(button1_Click);
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.
1101
Pressione F5.
Verifique que quando abrir a pasta de trabalho, o objeto lista preenchido com dados da
tabela Employees.
4.
4.
Digitar Last Name, incluindo um espao entre as duas palavras, e pressione ENTER.
6.
7.
8.
Observe que o nome na clula B7 ainda Anderson, que a alterao de dados que
voc feitas e salvas volta para o banco de dados. No cabealho LastName da coluna foi
alterado para seu formato original sem nenhum espao, porque no cabealho da coluna
no est vinculado ao banco de dados e voc no foi salvar as alteraes feitas para a
planilha.
4.
Sobrenome
FirstName
Ttulo
10
ITO
Shu
Gerenciador de vendas
Selecionar linha 16, que deve conter a nova linha que voc adicionou, clicando no nmero
16 no lado esquerdo da planilha.
No menu Edit, clique em Delete.
5.
Visual C# Consolidado
1102
6.
7.
8.
9.
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:.
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 C# Consolidado
1103
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Acesso ao exemplo de SQL Server do Northwind. O banco de dados pode ser no seu
computador de desenvolvimento ou em um servidor.
Permisses para ler e gravar no banco de dados do SQL Server.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My MasterDetail projeto para Solution Explorer.
Criando o DataSet
Use a Data Sources janela para adicionar um DataSet digitado ao seu projeto.
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.
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.
Visual C# Consolidado
1104
4.
5.
6.
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.
5.
Adicione o seguinte cdigo para o Sheet1_Startup mtodo para definir o texto para os
botes.
C#
Visual C# Consolidado
1105
6.
C#
this.button1.Click += new EventHandler(button1_Click); this.button2.Click += new
EventHandler(button2_Click);
4.
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
9.
Pressione F5.
10. Verifique que o intervalo nomeado e o objeto lista so preenchidos com dados da fonte de
dados.
11. Rolar pelos alguns dos registros clicando nos botes.
12. Pasta de trabalho, salve e feche a pasta de trabalho e Visual Studio.
13. 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.
14. Abra o Excel, e abra My Master-Detail.xls a partir do diretrio \bin (\My Detail\bin mestreno Visual Basic) ou \My Detail\bin\debug mestre-em C#.
15. Rolar pelos alguns dos registros para ver que a planilha opera normalmente quando
desconectado.
16. 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:
Visual C# Consolidado
1106
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:.
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
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
5.
6.
7.
8.
Clique com o boto direito do mouse na Sheet3 guia e, em seguida clique Rename no
menu de atalho.
Renomear a planilha para Data for Chart.
Adicionar dados Data for Chart Os seguir com clula A4 sendo a parte superior esquerda
E8 Canto, e o canto inferior direito:
Q1
Q2
Visual C# Consolidado
Q3
Q4
1107
Oeste
500
550
550
600
Leste
600
625
675
700
Norte
450
470
490
510
Sul
800
750
775
790
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:.
5.
Clique no Browse boto e v para a pasta de trabalho que voc criou anteriormente nessa
explicao passo a passo.
6.
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
Visual C# Consolidado
1108
Value (Valor)
Name
dataChart
HasLegend
False
5.
6.
Na caixa Add New Item de dilogo, clique User Control, nome do controle ChartOptions,
e clique em Add
7.
8.
9.
Propriedade
Value (Valor)
Name
columnChart
Text
Grfico de coluna
Value (Valor)
Name
barChart
Text
Grfico de barras
Value (Valor)
Name
lineChart
Text
Grfico de linha
Visual C# Consolidado
1109
10. Adicionar um boto de opo quarto para o controle de usurio, e alterar as propriedades a
seguir:
Propriedade
Value (Valor)
Name
areaBlockChart
Text
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
3.
4.
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; } }
7.
8.
Visual C# Consolidado
1110
9.
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); }
5.
6.
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
3.
Visual C# Consolidado
1111
4.
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
4.
5.
6.
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
1112
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
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
Visual C# Consolidado
1113
5.
6.
Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl e clique em Add
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes
4.
Das Common Controls guias da Toolbox, arraste um ComboBox controle para o controle
painel Aes.
5.
6.
Neste seo, voc ser definir a fonte de dados de mesma fonte de dados como o
NamedRange controle em uma planilha.. com a mesma fonte de dados que o NamedRange
controle em uma planilha o ComboBox o ComboBox
Visual C# Consolidado
1114
Clique com o boto direito do mouse no controle painel Aes e selecione View Code a
partir do menu de atalho
Adicione o seguinte cdigo ao evento Load do controle painel Aes:
C#
private void ActionsControl_Load(object sender, EventArgs e) { this.comboBox1.DataSource =
Globals.Sheet1.suppliersBindingSource; this.comboBox1.DisplayMember = "CompanyName"; }
6.
Em C#, voc deve criar um manipulador de eventos para o ActionsControl. Voc pode
colocar este cdigo no construtor ActionsControl como mostrado abaixo. Para obter mais
informaes sobre como criar manipuladores de eventos, consulte Como criar
manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
public ActionsControl() { InitializeComponent(); this.Load += new
EventHandler(ActionsControl_Load); }
4.
5.
Testar o aplicativo
Agora voc pode testar seu documento para verificar o painel Aes que aberto quando o
documento for aberto. Voc testar para a relao mestre / detalhes entre os controles no painel
de aes e os controles da planilha.
Para testar seu documento
5.
6.
7.
Selecione uma empresa na caixa Lista. Verifique se o nome da empresa est listado no
controle NamedRange e se os detalhes do produto esto listados no ListObject controle.
8.
Selecione vrias empresas para verificar o nome da empresa e Detalhes do Produto altere
conforme apropriado.
Prximas etapas
Visual C# Consolidado
1115
Essa explicao passo a passo mostra as noes bsicas de vinculao de dados a controles em
um painel Aes no Excel. Aqui esto algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Word. Para obter mais informaes, consulte Vinculao
de Dados para controles em um painel Aes do Word Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Visual C# Consolidado
1116
projeto do Word com o nome do seu projeto do Excel em todos os cdigos e exemplos XML.
7.
8.
9.
7.
Visual C# Consolidado
1117
8.
9.
Clique em Finish.
O documento de Soluo e manifesto de implantao so copiados para C:\TestDeploy. O
conjunto de soluo, atualizado manifesto do aplicativo, e cpias do documento de Soluo
e manifesto de implantao so copiadas para C:\TestDeploy\WordDeployment_1.0.0.0.
Para obter mais informaes, consulte Implantando o Word e Excel Solutions.
7.
8.
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#
Visual C# Consolidado
1118
5.
6.
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.
Para atualizar o manifesto do aplicativo externo
5.
6.
7.
8.
Visual C# Consolidado
1119
5.
6.
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:.
Para conceder confiana total para a pasta de rede
Digite o seguinte comando no prompt de comando Studio visual:
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.
Para testar a implantao
3.
4.
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:.
Visual C# Consolidado
1120
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 prrequisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual C# Consolidado
1121
Criando o projeto
Nesta etapa, voc ir criar um projeto de pasta de trabalho do Excel.
Para criar um novo projeto
7.
8.
9.
8.
9.
No painel Project types, expanda Other Project types e selecione Setup and
Deployment.
Visual C# Consolidado
1122
O projeto instalao aparece no Solution Explorer. Por padro, o arquivo que voc ir criar
usando este projeto instalao Windows Installer inclui uma caixa de dilogo que permite ao
usurio final que especifique o local de instalao da soluo. Para obter mais informaes,
consulte Caixa de dilogo interface do usurio da pasta de instalao.
Adicionar o pasta de trabalho e assembly da soluo para o Project da instalao
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.
Para adicionar o documento e conjunto ao projeto de instalao
10. Clique com o boto direito do mouse no ExcelSetup project n em Solution Explorer.
11. Selecione View no menu de atalho, e depois clique em File System.
12. Clique com o boto direito do mouse Application Folder no painel esquerdo.
13. Aponte para Add no menu de atalho, e clique em Project Output.
14. Selecione ExcelDeployment na caixa Project.
15. Selecione Primary output na lista de tipos de sada.
16. Clique em OK.
A sada do projeto e dependncias aparecem no painel direito.
17. No Solution Explorer, expanda Detected Dependencies sob o ExcelSetup n de
projeto.
18. Clique com boto direito mouse cada dependncia, exceto para Microsoft .NET
Framework, e clique Exclude no menu de atalho.
Criar um projeto de ao personalizada
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.
Para criar um projeto ao personalizada
8.
9.
Visual C# Consolidado
1123
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.
Para criar uma ao personalizada que edita o manifesto do aplicativo
9.
Visual C# Consolidado
1124
6.
7.
8.
Visual C# Consolidado
1125
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Para adicionar uma caixa de mensagem a um evento de inicializao
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
Visual C# Consolidado
1126
Visual C# Consolidado
1127
Um nome forte geralmente mais seguro que uma URL como prova. Ser criar e atribuir um
nome forte o conjunto nas prximas etapas.
Para criar um nome forte
9.
4.
Visual C# Consolidado
1128
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:
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
Visual C# Consolidado
1129
Para essa explicao passo a passo, voc precisar trs caixas de seleo e algum texto em um
Bookmark controle no documento do Word.
Para adicionar trs caixas de seleo
10. Verifique se o documento est aberto no designer visual studio.
11. Na Common Controls guia e arraste-o para o documento. da Toolbox, arraste um
CheckBox
12. No menu View, selecione Properties Window.
13. Certifique-se de que que Checkbox1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e altere as propriedades a seguir:
Propriedade
Value (Valor)
Name
applyBoldFont
Text
Negrito
14. Pressione Enter para mover o ponto de insero abaixo da primeira caixa de seleo.
15. Adicionar uma segunda caixa de seleo para o documento abaixo da ApplyBoldFont caixa
de seleo e alterar as propriedades a seguir:
Propriedade
Value (Valor)
Name
applyItalicFont
Text
Itlico
16. Pressione Enter para mover o ponto de insero abaixo da segunda caixa de seleo.
17. Adicionar uma caixa de seleo terceira para o documento abaixo da ApplyItalicFont caixa
de seleo e alterar as propriedades a seguir:
Propriedade
Value (Valor)
Name
applyUnderlineFont
Text
Sublinhado
Mover o ponto de insero abaixo os controles caixa de seleo e digite o seguinte texto
no documento:
Visual C# Consolidado
1130
7.
8.
Certifique-se de que que Bookmark1 esteja visvel na caixa de listagem Nome de objeto
da janela Properties, e alterar a propriedade Nome para fontText.
Em seguida, escreva o cdigo para formatar o texto quando uma caixa de seleo marcada ou
desmarcada.
Formatao a caixa de texto quando a verificao checked ou Cleared
Quando o usurio seleciona uma opo de formatao, alterar o formato do texto no documento.
Para alterar a formatao quando uma caixa de seleo marcada
7.
8.
9.
12. Em C#, adicione manipuladores de eventos para as caixas de texto para o Startup evento
como mostrado abaixo. Para obter informaes sobre como criar manipuladores de
Visual C# Consolidado
1131
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que o texto est formatado corretamente
quando voc marca ou desmarca uma caixa de seleo.
Para testar seu documento
4.
5.
6.
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:.
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 C# Consolidado
1132
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
6.
7.
8.
9.
Value (Valor)
Name
insertText
Text
Inserir texto
Visual C# Consolidado
1133
6.
Em C#, adicione um manipulador de eventos para o boto para o Startup evento como
mostrado abaixo. Para obter informaes sobre como criar manipuladores de eventos,
consulte Como criar manipuladores de eventos em Ferramentas do Visual Studio do Office:.
C#
this.insertText.Click += new EventHandler(insertText_Click);
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que a mensagem Hello World! aparece
na caixa de texto quando voc clica no boto.
Para testar seu documento
4.
5.
Clique no boto.
6.
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.
Escrever cdigo para responder a com o boto direito do mouse texto em um indicador.
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
Visual C# Consolidado
1134
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
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
4.
5.
Selecione as palavras creating a shortcut menu when you right-click the text no seu
documento e clique em OK.
bookmark1 adicionado ao documento.
6.
Adicionar outro Bookmark controle com as palavras right-click the text in a bookmark.
bookmark2 adicionado ao documento.
Observao
As palavras right-click the text aparecero no bookmark1 e bookmark2.
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
5.
6.
Visual C# Consolidado
1135
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;
7.
8.
5.
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 =
Visual C# Consolidado
1136
6.
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
6.
7.
Clique com o boto direito do mouse dentro do indicador e selecione Bold primeiro.
8.
9.
Clique com o boto direito do mouse dentro do texto dos indicadores sobrepostos e
selecione Italic.
10. 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.
Visual C# Consolidado
1137
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:
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
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.
9.
Feche a Datasheet janela para aceite os valores padro no grfico e clique dentro do
documento para mover foco fora do grfico.
Clique com o boto direito do mouse no grfico e selecione Format Object.
10. Na guia Layout da caixa de dilogo, selecione Square e Format Object Clique em OK.
Visual C# Consolidado
1138
5.
6.
Na caixa Add New Item de dilogo, clique User Control, nome do controle ChartOptions,
e clique em Add
7.
8.
9.
Propriedade
Value (Valor)
Name
columnChart
Text
Grfico de coluna
Value (Valor)
Name
barChart
Text
Grfico de barras
Value (Valor)
Name
lineChart
Text
Grfico de linha
Value (Valor)
Name
areaBlockChart
Text
Adicionar Referncias
Visual C# Consolidado
1139
Para acessar o grfico do controle de usurio em um documento, voc deve ter uma referncia
11.0 biblioteca objeto do Graph Microsoft no seu projeto.
Para adicionar uma referncia 11.0 biblioteca objeto do Graph Microsoft
4.
5.
6.
Nesta seo, voc ser criar um evento pblico sobre o controle de usurio, adicionar uma
propriedade para definir o tipo de seleo, e criar um procedimento para o CheckedChanged evento
de cada um dos botes de opo.
Para criar um evento e propriedade em um controle de usurio
3.
4.
7.
8.
Visual C# Consolidado
1140
9.
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); }
5.
6.
Nesta seo, criar um manipulador de eventos para alterar o tipo de grfico acordo para a opo
selecionada no controle de usurio.
Para alterar o tipo de grfico que exibido no documento
3.
Visual C# Consolidado
1141
4.
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que o estilo do grfico atualizado
corretamente quando voc seleciona um boto de opo.
Para testar seu documento
4.
5.
6.
Essa explicao passo a passo mostra noes bsicas de usando botes de opo e
programaticamente alterando estilos do grfico em documentos do Word 2003. Aqui esto
algumas tarefas que podem vie em seguida:
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:
Usando um boto para preencher uma caixa de texto. Para obter mais informaes,
consulte Exibindo texto em uma caixa de texto em um documento usando um boto
Walkthrough:.
Use uma Relao mestre / detalhes quando exibir dados nos controles.
Visual C# Consolidado
1142
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
Criar um projeto Documento do Word com o nome My Word Actions Pane. Verifique que
Create a new document est selecionada. Para obter mais informaes, consulte Como criar
Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Word Actions Pane projeto
para Solution Explorer o Visual Studio.
Adicionar controles ao painel de aes
Para essa explicao passo a passo, necessrio um controle painel Aes que contm controles
ligados a dados Windows Forms. Adicionar uma fonte de dados para o projeto, e arraste os
controles a partir da Data Sources janela para o controle painel Aes.
Para adicionar um controle painel Aes
4.
5.
6.
Na caixa Add New Item de dilogo, selecione Actions Pane Control, nome-la
ActionsControl, e clique em Add
Se a Data Sources janela no estiver visvel, clique Show Data Sources no Data menu.
Observao
Se Show Data Sources Clique dentro do documento do Word e marque novamente. no estiver
disponvel,
10. Clique Add New Data Source Para iniciar o Data Source Configuration Wizard.
11. Selecione Database e, em seguida clique em Next.
Visual C# Consolidado
1143
12. Selecionar uma conexo de dados ao banco de dados de exemplo Northwind do SQL
Server ou adicionar uma nova conexo com o New Connection boto.
13. Clique em Next.
14. Desmarque a opo para salvar a conexo se ele estiver selecionado e clique em Next.
15. Expanda o Tables n na janela Database objects.
16. Marque a caixa de seleo ao lado e Products tabelas. o Suppliers
17. Clique em Finish.
O assistente adiciona a Suppliers tabela e Products Tabela janela Data Sources. Ele tambm
adiciona um DataSet digitado ao seu projeto que est visvel no Solution Explorer.
Para adicionar controles Windows Forms ligados a dados a um controle painel Aes
13. Na janela Data Sources, expanda a Suppliers tabela.
14. Clique na seta suspensa no n Company Name, e selecione ComboBox.
15. Arraste CompanyName da janela Data Sources para o controle painel Aes.
Um ComboBox controle criado no controle painel Aes. Ao mesmo tempo, nomeado
SuppliersBindingSource, um adaptador de tabela, e um DataSet so adicionados ao projeto
no bandeja de componentes. um BindingSource
Observao
Um navegador de ligao tambm adicionado para o bandeja de componentes e para o topo do
controle painel Aes. Voc remover esse controle posteriormente no explicao passo a passo
o.
16. Mover a caixa de combinao para que ele seja sob o rtulo e alterar a Size propriedade
171, 21.
17. Expandir a Products tabela na janela Data Sources.
18. Clique na seta suspensa no n ProductName, e selecione ListBox.
19. Arraste ProductName para o controle painel Aes.
Um ListBox controle criado no controle painel Aes. Ao mesmo tempo, chamado
ProductBindingSource e um adaptador de tabela so adicionados para o projeto no bandeja
de componentes. um BindingSource
20. Do SuppliersBindingNavigator Selecione na bandeja e Component pressione DELETE.
Observao
Excluindo o SuppliersBindingNavigator faz no remover todos os o cdigo que foi gerado para ele.
Voc pode remover este cdigo.
21. Mover a caixa de listagem para que ele seja sob o rtulo e alterar a Size propriedade
171,95.
22. Arraste controlar e coloc-lo a caixa de listagem abaixo. de para o painel Aes um Button
o Toolbox
23. Clique com o boto direito do mouse clique Properties no menu de atalho, e altere as
seguintes propriedades: o Button,
Visual C# Consolidado
1144
Propriedade
Value (Valor)
Name
Inserir
Text
Inserir
C#
private void ActionsControl_Load(object sender, EventArgs e) {
this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
this.productsTableAdapter.Fill(this.northwindDataSet.Products); }
8.
9.
Visual C# Consolidado
1145
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); } }
Visual C# Consolidado
1146
3.
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);
3.
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();
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.
Para testar seu documento
6.
7.
8.
9.
Visual C# Consolidado
1147
Implantando o projeto. Para obter mais informaes, consulte Como implantar solues do
Office:.
Ligao de dados a controles no Excel. Para obter mais informaes, Vinculao de Dados
para controles em um painel Aes do Excel Walkthrough:.
Mostrar e ocultar controles no painel de aes. Para obter mais informaes, consulte
Alterando o painel de aes de acordo com contexto do usurio Walkthrough:
Criar uma ao que recupera dados da marca inteligente e modifica o texto de reconhecido
marca inteligente.
Pr-requisitos
Microsoft Visual Studio 2005 Tools for the Microsoft Office System
Criar um projeto Documento do Word com o nome My Smart Tag, usando o Visual Basic
ou C#. Verifique que Create a new document est selecionada. Para obter mais informaes,
consulte Como criar Ferramentas do Visual Studio para projetos do Office:.
Abre o novo documento do Word no designer e adiciona o My Smart Tag projeto para Solution
Explorer o Visual Studio.
Configurando o projeto
Para esta etapa, voc ir configurar o projeto para executar o cdigo fornecido nessa explicao
passo a passo.
Para configurar seu projeto
5.
6.
Na guia COM, selecione biblioteca tipo 2.0 marcas inteligentes Microsoft e clique em OK.
7.
No Solution Explorer, clique com o boto direito do mouse ThisDocument.vb (em Visual
Basic) ou ThisDocument.cs (em C#) e clique em View Code.
8.
Visual C# Consolidado
1148
C#
using System.Text.RegularExpressions;
5.
Criar uma nova Action e adicion-lo para a Actions propriedade da marca inteligente. A
Action representa um item que o usurio pode clicar no menu de marcas inteligentes.
C#
action1 = new Microsoft.Office.Tools.Word.Action( "Convert to Celsius"); smartTag1.Actions = new
Microsoft.Office.Tools.Word.Action[] {action1};
6.
C#
void action1_Click(object sender, Microsoft.Office.Tools.Word.ActionEventArgs e) { string value =
e.Properties.get_Read("number"); double fahrenheit = Convert.ToDouble(value); int celsius =
(int)(fahrenheit - 32) * 5 / 9; e.Range.Text = celsius.ToString() + "C"; }
Visual C# Consolidado
1149
Testar o aplicativo
Agora voc pode testar seu documento para certificar-se que a marca inteligente converte
Fahrenheit temperaturas para Celsius.
Para testar sua pasta de trabalho
5.
6.
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.
Do Publish Wizard uso para publicar sua soluo em um local no seu computador de
desenvolvimento.
Modificar o manifesto do aplicativo que est incorporado no documento para apontar para
o novo local manifesto de implantao programaticamente.
Editar o manifesto do aplicativo externo para apontar para o novo local do conjunto e a
manifesto de implantao.
Pr-requisitos
Visual C# Consolidado
1150
7.
8.
9.
Visual C# Consolidado
1151
7.
8.
9.
Clique em Finish.
O documento de Soluo e manifesto de implantao so copiados para C:\TestDeploy. O
conjunto de soluo, atualizado manifesto do aplicativo, e cpias do documento de Soluo
e manifesto de implantao so copiadas para C:\TestDeploy\WordDeployment_1.0.0.0.
Para obter mais informaes, consulte Implantando o Word e Excel Solutions.
7.
8.
Visual C# Consolidado
1152
using Microsoft.VisualStudio.Tools.Applications.Runtime;
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(); } }
5.
6.
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.
Para atualizar o manifesto do aplicativo externo
5.
6.
Visual C# Consolidado
1153
7.
8.
Agora que voc tiver editado os manifestos, voc est pronto para copiar os arquivos de soluo
para o servidor.
Para copiar os arquivos de soluo para o servidor
4.
5.
6.
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:.
Para conceder confiana total para a pasta de rede
Digite o seguinte comando no prompt de comando Studio visual:
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.
Para testar a implantao
3.
4.
Visual C# Consolidado
1154
Prximas etapas
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 prrequisitos para executar Visual Studio Tools for Office solues, consulte Como se preparar
computadores de usurio final para executar solues do Office:.
Observao
Conjuntos em Visual Studio Tools for Office Solues devem ser concede confiana total na
diretiva de segurana do usurio final antes da soluo seja executado. O arquivo Windows
Installer voc criar nessa explicao passo a passo no No implantar a diretiva de segurana
necessrio para executar a soluo. Para obter mais informaes sobre segurana em Visual
Studio Tools for Office solues, consulte Requisitos de segurana para executar solues do
Office e Prticas recomendadas para segurana no Office Solutions. Para obter informaes
sobre como configurar a diretiva de segurana por usurio final computadores, consulte
Implantao de diretiva de segurana.
Pr-requisitos
Para concluir esta explicao passo a passo, ser necessrio:
Visual C# Consolidado
1155
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
7.
8.
9.
8.
9.
No painel Project types, expanda Other Project types e selecione Setup and
Deployment.
Visual C# Consolidado
1156
9.
Visual C# Consolidado
1157
14. No Solution Explorer, clique com o boto direito do mouse Class1.vb ou Class1.cs sob o
ExcelCustomAction projeto e, em seguida, clique em Delete. Este arquivo
desnecessrio para essa explicao passo a passo.
Criar uma ao personalizada que salvas o manifesto de aplicativo
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.
Para criar uma ao personalizada que edita o manifesto do aplicativo
9.
Visual C# Consolidado
1158
6.
7.
8.
Visual C# Consolidado
1159
Criar um projeto de pasta de trabalho do Excel com o nome My Security Test. Verifique
que Create a new document est selecionada. Para obter mais informaes, consulte Como
criar Ferramentas do Visual Studio para projetos do Office:.
O Visual Studio abre a nova pasta de trabalho do Excel no designer e adiciona o My Security
Test projeto para Solution Explorer.
Adicionar cdigo para trs a planilha
Nesta etapa, voc adicionar uma caixa de mensagem a um evento de inicializao da planilha.
Para adicionar uma caixa de mensagem a um evento de inicializao
12. Verifique se a My Security Test.xls pasta de trabalho aberta no designer visual studio,
com Sheet1 exibido.
13. Clique com o boto direito do mouse Sheet1.vb no Solution Explorer, ou Sheet1.cs,. e,
em seguida clique View Code no menu de atalho
14. Adicione o seguinte cdigo para o Startup mtodo dentro classe Sheet1 para mostrar uma
caixa de mensagem durante a inicializao.
C#
private void Sheet1_Startup(object sender, System.EventArgs e) { MessageBox.Show("Security
settings are correct."); }
Visual C# Consolidado
1160
Visual C# Consolidado
1161
4.
Visual C# Consolidado
1162
Microsoft Office Word 2003 documentos em tempo de criao ou em tempo de execuo. Por
exemplo, voc pode adicionar um ComboBox controle a sua planilha para que os usurios possa
selecionar em uma lista de opes. Voc tambm pode adicionar controles host, como controles
Bookmark e NamedRange controles, para documentos do Office. Para obter mais informaes,
consulte Controles host do Word e Controles host do Excel.
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Adicionando controles em tempo de design
Para arrastar um Windows Forms controle para o documento
3.
4.
Na guia Common Controls Da Clique no controle que voc deseja adicionar e arraste-o
para o documento. o Toolbox,
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED("WinForms.Control.Host","")
no Formula Bar. Este texto necessrio e no devem ser excludos.
5.
6.
Visual C# Consolidado
1163
Para adicionar um controle Windows Forms para o documento clicando uma nica vez
sobre o controle
4.
5.
6.
Para adicionar um controle Windows Forms para o documento clicando duas vezes no
controle
3.
4.
Na guia Common Controls Controle voc deseja para adicionar de clique duplo no
Toolbox.
O controle adicionado para o documento no centralizar do documento ou painel ativo.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED("WinForms.Control.Host","")
no Formula Bar. Este texto necessrio e no devem ser excludos.
4.
Na guia Common Controls Da Clique no controle que voc deseja adicionar e pressione a
tecla ENTER. o Toolbox,
O controle adicionado para o documento no centralizar do documento ou painel ativo.
Observao
Quando voc seleciona um controle no Excel, voc ver =EMBED("WinForms.Control.Host","")
no Formula Bar. Este texto necessrio e no devem ser excludos.
Visual C# Consolidado
1164
4.
C#
this.Application.Calculate();
Compilando o cdigo
Este cdigo deve ser colocado em uma classe folha, no na classe ThisWorkbook.
Visual C# Consolidado
1165
Visual C# Consolidado
1166
Visual C# Consolidado
1167
Dispositivos Inteligentes
Esta pgina contm links para a Ajuda sobre tarefas de programao de dispositivos inteligentes
amplamente utilizadas. Para ver outras categorias de tarefas populares abordadas na Ajuda,
consulte Como Fazer em C#.
Visual C# Consolidado
1168
Editor de recursos
O Resource Editor e CAPEdit controles. inclui recursos especficos do dispositivo, como o State
of Input Panel
Depurao
O Visual Studio 2005 depurador do dispositivo C++ contm o seguintes recursos novos ou
aperfeioamentos:
Compiladores
Os Visual Studio 2005 compiladores do dispositivo C++ ter o seguintes recursos novos ou
aperfeioamentos:
Bibliotecas
As bibliotecas Visual C++ para dispositivos possui 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.
ATL
Os seguintes recursos foram adicionados ao ATL para dispositivos:
Visual C# Consolidado
1169
MFC
Os seguintes recursos foram adicionados ao MFC para dispositivos:
Details
Editor de cores
Controles personalizados
Controles *User
*Docking controles em Windows Forms
Visual C# Consolidado
1170
Editor fonte
*Autoscale
Capa formulrio com a criao de cdigo
Alterar plataformas usando o mesmo cdigo de fonte Como Compartilhar Cdigo Fonte Atravs
de Plataformas (Dispositivos)
Consulte tambm
Referncia
Visual C# Consolidado
1171
3.
Voc pode criar bancos de dados do SQL Server Mobile, atribuir senhas, alterar
esquemas, e executar outras tarefas de gerenciamento banco de dados fundamental usando o
Visual Studio IDE
Voc pode usar DataSets digitados, ResultSets, objetos comerciais, SQL Server bancos
de dados, bancos de dados do SQL Mobile, ou servios da Web como fontes de dados.
Voc pode arrastar e soltar essas fontes de dados de janela fontes de dados para um
formulrio do Windows para gerar controles ligados a dados de sua escolha.
Observao
O Data Source Configuration Wizard no est disponvel para projetos que destino verso 1.0
do .NET Compact Framework.
Visual C# Consolidado
1172
SQL Server Mobile fornece uma grande quantidade de recursos, como parte de um aplicativo
.NET Compact Framework ou como uma instalao independente em um dispositivo inteligente.
Dados podem ser maniuplated offline e sincronizados posteriormente a um servidor. Para obter
mais informaes, consulte SQL Server Mobile Features.
Criando e gerenciando bancos de dados SQL Server
Para desenvolver aplicativos de dados eficaz para dispositivos, necessrio um entendimento do
design do banco de dados boa e do mecanismo de banco de dados do SQL Server. Voc deve
mestre como manter bancos de dados, como torn-los seguros, como acessar e modificar os
dados neles, como eficiente consult-los, e como maximizar seu desempenho. Para obter mais
informaes, consulte Working with Databases (SQL Server Mobile) e Enhancing Performance
(SQL Server Mobile).
Conexes com um servidor
SQL Server Mobile aceita a replicao de mesclagem, acesso remoto de dados, e planejamento
de segurana e implementao para o servidor. Para obter mais informaes, consulte Managing
Connectivity (SQL Server Mobile).
Implementar tarefas comuns Programatically
Para obter as etapas para implementar as tarefas comuns atravs de programao, consulte How
to (SQL Server Mobile).
Segurana local
O mecanismo SQL Server Mobile Database oferece proteo por senha e criptografia para
proteger bancos de dados em dispositivos locais. Ele tambm fornece conectividade opes de
segurana. Para obter mais informaes, consulte Securing Databases (SQL Server Mobile).
Visual C# Consolidado
1173
Developer Center.
Torna Visual Studio 2005 possvel, na maioria dos casos, para executar todos os o trabalho
necessrio de embalagem diretamente no ambiente de desenvolvimento integrado Visual Studio
(IDE). Criar um arquivo CAB pelo primeiro adicionar um projeto inteligente CAB dispositivo sua
soluo existente, e adiciona o arquivos, atalhos e entradas do Registro a ele usando a mesma
interface do usurio como com projetos da instalao desktop. Quando voc cria o projeto de
instalao, voc criar o arquivo CAB.
Existem algumas diferenas entre os arquivos CAB que voc criou para um aplicativo Pocket PC e
os voc criar para um aplicativo de Smartphone. PCs de bolso baseados em Windows Mobile
2003SE e anteriores no ofeream suporte compactados arquivos CAB ou arquivos CAB
assinado. Arquivos CAB Smartphone deve ser compactados e o arquivo exe ou dll, e o arquivo
cab em si, deve ser assinados digitalmente para que possa ser instalado no dispositivo.
Aps ter criado o arquivo CAB com Visual Studio, a prxima etapa para transferi-lo para o
dispositivo de destino usando qualquer um do meio tpico de transferncia de arquivos: atravs do
dispositivo, solicitaes de FTP ou HTTP manual copiando o desenvolvimento de mesa mquina
para uma pasta em um dispositivo conectado usando o Windows Explorer, sobre a transferncia
do ar (OTA) para Smartphones, e assim por diante.
Para mais informaes sobre como trabalhar com recursos vrias plataformas em um projeto
Visual C++, consulte Usar recursos em vrias plataformas.
Visual C# Consolidado
1174
Para
Uso
Visualizador de arquivos
remoto
Dependency Walker da
pilha remoto
Visualizar do processo
remoto
Editor do Registro
remoto
Spy remoto
In Zoom-remoto
Consulte tambm
Visual C# Consolidado
1175
Configurao
Configurao um dispositivo se refere ao adicionar certificados digitais a armazenamentos de
certificados do dispositivo. Quando feita uma tentativa para instalar ou executar um aplicativo no
dispositivo, o sistema operacional do dispositivo verifica para verificar se o certificado com o qual o
aplicativo est assinado em um armazenamento de certificados para o dispositivo. Para obter
mais informaes sobre armazenamentos de certificados, consulte Um Practical guia para a
segurana de aplicativos do Smartphone e cdigo modelo assinatura para desenvolvedores.
TestCert_Privileged.pfx
TestCert_UnPrivileged.pfx
Visual C# Consolidado
1176
Voc pode acessar essas e outras opes no menu Visual Studio Ferramentas. Para obter mais
informaes, consulte Como Configurar Opes de Conexo (Dispositivos).
O ActiveSync 4.x
4.X ActiveSync fornece uma conexo segura entre o computador de desenvolvimento e um
dispositivo usando cabo, base, Bluetooth, ou conexes via infravermelho. Ele tambm fornece o
veculo pelo qual necessrio arquivos conexo e de segurana sero baixados automaticamente
para o dispositivo. Quando voc Cradle um dispositivo, o ActiveSync desativa a todas as outras
placas de rede, para que voc saiba o dispositivo est se comunicando somente com o
computador de desenvolvimento. O ActiveSync o mecanismo conexo padro enquanto voc
desenvolver o aplicativo de dispositivo.
Se suporte ActiveSync for no disponvel para o dispositivo, consulte Como se Conectar ao
Device do Windows CE sem o ActiveSync.
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.
O dispositivo de hardware envolvido, dependendo um ou mais dos seguintes mtodos de conexo
podem ser empregado.
Conexo USB
A forma mais simples de conexo, todos os Pocket PC e Smartphone dispositivos
compatveis com uma conexo USB. Embora no como rpida / a simplicidade da conexo
USB torna conexo g, uma opo atraente. como Ethernet ou sem fio 802. 11b Muitos
dispositivos tambm ser ser alimentados por meio da porta USB, que uma convenincia
adicionada.
Rede Ethernet com fio
Pocket PC e Smartphone dispositivos por padro no oferecerem suporte para conexes
Ethernet sem hardware adicional. No entanto, a velocidade da conexo padro extra torna
a maneira preferida para executar operaes muito dados-depurao e outros.
Sem fio 802. 11b / rede g
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
Visual C# Consolidado
1177
Se nenhum USB ou opes de rede com ou sem fio estiverem disponveis, uma porta
serial torna aceitvel, se lenta, uma maneira de se conectar um dispositivo inteligente a um
computador de desenvolvimento.
Conexo de infravermelho
Conexes via infravermelho requerem sem cabeamento adicional, e dispositivos Pocket
PC e Smartphone tanto vm com portas IrDA como padro. No entanto, conexes via
infravermelho requerem de linha de portadores para operar confivel, e mesmo assim o
desempenho no for aceitvel para depurao. No entanto, IrDA pode ser til como uma
tcnica ltima recurso para copiar arquivos para dispositivos.
Cdigo trechos para C# e Visual Basic. Para obter mais informaes, consulte Criando e
usando IntelliSense Code Snippets.
Visual C# Consolidado
1178
Para obter mais informaes sobre como usar Visual Studio 2005 Para converter um projeto eVB,
consulte os seguintes tpicos:
Migrando Managed projetos do Visual Studio .NET 2003 para o Visual Studio 2005
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.
Atualizando projetos de dispositivos 2002 para dispositivos 2003
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.
Referncia C#
Visual Basic
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:
Visual C# Consolidado
1179
Visual C++
Visual C++ o idioma preferencial de desenvolvimento para dispositivos inteligentes quando
Desempenho crtico, ou quando estiver desenvolvendo aplicativos no nvel do sistema, drivers
de dispositivo ou hoje ou Home tela plug-ins. Visual C++ no oferece suporte .NET Compact
Framework, mas em vez disso, fornece um subconjunto do conjunto da API do Win32. No
possvel para aplicativos escritos em gerenciado C# ou cdigo do Visual Basic para acessar
cdigo C++ contido em DLLs por meio do Interop.
Para obter mais informaes sobre como desenvolver no Visual C++, consulte:
C/C++ Languages
Para garantir que voc ser solicitado para selecionar um dispositivo quando voc implantar a
soluo, conclua o procedimento a seguir.
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.)
Marque a Show device choices before deploying a device project caixa de seleo.
Visual C# Consolidado
1180
Criando o aplicativo
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.
(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.
4.
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.
2.
3.
2.
ou
Insira o seguinte cdigo C#:
MessageBox.Show("Hello, World!");
Visual C# Consolidado
1181
fsico com suporte j em parceria com o computador de desenvolvimento, voc tambm poder
escolher o dispositivo fsico.
3.
Quando o aplicativo executado no emulador, toque no boto para garantir que " Hello,
World! " aparece.
Preparando para Walkthroughs adicionais
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
3.
4.
Se uma mensagem aparecer informando que a conexo foi perdida, clique em OK.
5.
Visual C# Consolidado
1182
Visual C# Consolidado
1183
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 Projects ou
Visual C# Projects expandir Smart Device, e a plataforma desejados, como, Pocket PC
2003 clique em.
Se no o idioma a ser exibido, no no primeiro expandir Other Languages. Esta tela
regida pelo suas configuraes de desenvolvimento. Para exibir ou alterar as configuraes,
clique Import and Export Settings no menu Tools.
3.
Em Templates, clique em qualquer modelo adequado para o que voc deseja, por
exemplo, Pocket PC 2003 Class Library.
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.
4.
No menu File, aponte para Add, e clique em New Project ou Existing Project.
O New Project comando abre a New Project caixa de dilogo para que voc possa criar um
novo projeto. O Existing Project comando abre a Add Existing Project caixa de dilogo para
que voc possa selecionar um projeto j existente para incluso soluo atual.
As etapas para portabilidade projetos criados em uma verso anterior do Visual Studio so
descritas na documentao geral Visual Studio Para gerenciar projetos. Para obter mais
informaes, consulte Projetos e a compatibilidade com verses anteriores e Trabalhando com
vrias verses do .NET Framework.
Visual C# Consolidado
1184
4.
5.
6.
7.
8.
9.
2.
3.
4.
5.
6.
Visual C# Consolidado
1185
1.
2.
2.
btn.Caption = "MyButton"
Visual C# Consolidado
1186
1.
2.
2.
2.
3.
4.
5.
6.
2.
3.
4.
Clique OK para fechar a Form Factor Properties caixa de dilogo e clique OK novamente
para fechar a Options caixa de dilogo.
Observao
Se o designer foi aberto quando voc alterou opes, feche e reabri-la para as alteraes sejam
efetivadas.
Visual C# Consolidado
1187
5.
Clique com boto direito no designer, mouse o formulrio ou a capa, e seguida, selecione
Rotate Left ou Rotate Right para girar a capa.
Se o formulrio gira quando o dispositivo gira depende na plataforma atual e das definies
de propriedade de formulrio, da seguinte maneira:
Pocket PC: O formulrio gira por padro quando o dispositivo gira. Para impedir
que o formulrio de girar com o dispositivo, defina a WindowState propriedade do
formulrio para Normal e a FormBorderStyle propriedade None.
O formulrio Windows CE: No no girar por padro quando o dispositivo gira. Para
tornar o formulrio giram com o dispositivo, defina a WindowState propriedade como
Maximized.
2.
3.
Use a lista drop-down na caixa Target device Para selecionar um novo destino padro.
Visual C# Consolidado
1188
2.
Selecionar MSDN Library for Visual Studio 2005, e, em seguida clique em Change.
3.
4.
5.
6.
No menu de atalho disponvel a partir do boto drop-down, selecione This feature, and all
subfeatures, will be installed on local hard drive.
7.
Clique em Next.
8.
2.
2.
3.
4.
1189
Voc no pode usar TCP / IP para conectar ao emulador de dispositivo durante uma sesso
virtual PC (VPC) porque VPC no oferece suporte o driver virtual chave de rede. O emulador
precisa esse driver para uma conexo TCP / IP. Em vez disso, use as 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.
Para conectar-se para o emulador durante uma sesso Virtual PC
1.
2.
3.
4.
Inicie o emulador.
5.
6.
7.
Na caixa Available Emulators, clique com o boto direito do mouse o emulador desejado,
e clique Cradle no menu de atalho
Siga as instrues no Assistente do ActiveSync para estabelecer uma parceria.
4.
5.
Abra o ActiveSync.
6.
Visual C# Consolidado
1190
7.
8.
9.
2.
3.
4.
5.
No menu Janela Bluetooth, clique New Para iniciar uma pesquisa por dispositivos
habilitados Bluetooth-.
6.
7.
Quando solicitado, digite uma chave de acesso temporrio, e digite a mesma chave de
acesso no computador de desenvolvimento rapidamente.
Voc agora ter uma conexo Bluetooth com o dispositivo. Para configurar o ActiveSync,
voc criar uma porta COM Virtual para esta conexo Bluetooth. Use as etapas a seguir.
2.
3.
4.
Visual C# Consolidado
1191
5.
2.
3.
4.
2.
3.
Usando qualquer conexo com o dispositivo voc possui, copie os seguintes arquivos para
a pasta \Windows\ no dispositivo. These files are located on the development computer by
default at \Program Files\Common Files\Microsoft
Shared\CoreCon\1.0\Target\wce400\<CPU>.
Clientshutdown.exe
ConmanClient2.exe
CMaccept.exe
eDbgTL.dll
TcpConnectionA.dll
2.
3.
No menu visual studio Tools, clicar Options, clicar Device Tools, e clique em Devices.
Visual C# Consolidado
1192
2.
3.
4.
5.
2.
2.
Visual C# Consolidado
1193
1.
No menu Windows Start, aponte para All Programs, aponte para Microsoft Visual
Studio 2005, em seguida, aponte para Visual Studio Remote Tools, e clique em Remote
File Viewer.
2.
Visual C# Consolidado
1194
Descrio
[mode
conn[ect]
machine_name port
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
Visual C# Consolidado
1195
inteligente minimizar e no no fechar o aplicativo. Em vez dele define o aplicativo para executar
em segundo plano.
Para corretamente fechar um aplicativo executado em segundo plano em um PC de bolso, no
menu Start, toque Settings, toque na System guia e toque em Memory. Na guia Running
Programs, selecione o aplicativo que voc deseja fechar, e toque Stop.
Visual C# Consolidado
1196
Para definir a chave do Registro do dispositivo para ativar anexar a um processo em execuo
1.
2.
3.
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.
Usando o Editor do Registro remoto, se conectar o dispositivo.
Para navegar ou crie a seguinte chave: depurador
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ .NETCompactFramework\Managed
4.
5.
6.
Aps definir a chave conforme descrito nas etapas anteriores, iniciar um processo sem o
depurador.
2.
3.
4.
5.
6.
Visual C# Consolidado
1197
ou
O toolhelp.dll arquivo copiar manualmente para o dispositivo de destino.
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.
3.
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.
Visual C# Consolidado
1198
A tcnica recomendada para depurao uma soluo que incorpora elementos tanto nativos
quanto gerenciados a anexar o depurador necessrio para uma determinada seo, por
exemplo, uma seo gerenciada, e desanexar que depurador e anexar a outra quando o outro for
necessria. Voc pode repetir essas Detach / anexar etapas com freqncia conforme necessrio
para percorrer o programa.
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:
Iniciar o aplicativo
Concluso
Pr-requisitos
Essa explicao passo a passo depende da soluo criada com outro explicao passo a passo,
Passo-a-passo: Hello World: Um exemplo de interoperabilidade COM para dispositivos
inteligentes. Certifique-se de que essa explicao passo a passo hello world possui com xito
criado e executado foi.
Ativar anexo do depurador gerenciado
Por padro, dispositivos, incluindo emuladores, no permitir o depurador gerenciado para anexar
a processos que j esto em execuo. Anexar o depurador gerenciado a um processo j em
execuo uma situao que geralmente encontrados em solues de dispositivo que incluir
cdigo gerenciado e nativo.
A primeira etapa, em seguida, para definir o dispositivo para permitir que o depurador
gerenciado para anexar a um processo j em execuo. Faa isso definindo uma chave do
Registro para o dispositivo.
Observao
Definio da chave afeta somente anexando a processos gerenciados j-execuo. Ele no afeta
iniciar um projeto usando Start with Debugging (F5). No entanto, se voc desconectar aps Start
with Debugging, ser necessrio este processo para anexe novamente e iniciar a depurao
Visual C# Consolidado
1199
novamente.
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.
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.
5.
6.
7.
2.
3.
Visual C# Consolidado
1200
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.
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.
2.
3.
4.
5.
6.
7.
8.
Voc est pronto para avanar para o ponto de interrupo voc definir no cdigo nativo. Quando
voc examine a Modules janela novamente, voc v nativo mdulos agora apresentar. No
entanto, HelloCOMObject.DLL ainda no est carregado porque voc ainda no clicou button1.
Observao
Visual C# Consolidado
1201
Se voc executou essa explicao passo a passo anterior, smbolos de depurao j podem ser
carregados, e voc pode ignorar essas etapas. Caso contrrio, a seo a seguir fornece as etapas
para carreg-los.
2.
3.
Clique em Open.
A Symbol Status coluna altera de No symbols loaded para Symbols loaded, e
agora o indicador ponto de interrupo mostre o ponto de interrupo como resolvido.
2.
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.
2.
No menu Debug, clique em Attach to Process e garantir que a Transport caixa contm
Smart Device.
3.
4.
Para preencher a Attach to caixa, clique em Select Selecionar Debug these code types,
e marque a Managed caixa, desmarque a Native caixa e, em seguida, clique em OK.
Se aparecer uma mensagem lembr-lo que gerenciado e nativo depurao no so
compatveis, clique em OK.
5.
Visual C# Consolidado
1202
No Solution Explorer, clique com o boto direito do mouse Form1.cs e depois no menu
de atalho, clique em View Code.
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.
Visual C# Consolidado
1203
1.
2.
3.
Recrie a soluo.
No Solution Explorer, clique com o boto direito do mouse no arquivo.xsd banco de dados
e clique Properties no menu de atalho
Definir o Custom Tool valor como MSDataSetGenerator.
Esse valor o valor padro.
3.
Recrie a soluo.
2.
3.
Recrie a soluo.
3.
4.
Visual C# Consolidado
1204
2.
3.
Arrastar e soltar uma tabela da janela Data Sources para um formulrio do Windows.
2.
3.
Defina a Text propriedade do boto apropriadamente (por exemplo, ' Avanar ').
4.
Clique duas vezes no boto no formulrio para abrir o Editor de Cdigo no boto clique
manipulador de eventos.
5.
Usar os exemplos de cdigo a seguir ao cdigo First, Next, Previous. e Last Boto
manipuladores de eventos
2.
Visual C# Consolidado
1205
3.
4.
5.
3.
4.
Na caixa Data source Selecionar Microsoft SQL Server Mobile Edition, e clique em OK
5.
6.
Continue com " para continuar o processo e configurar a conexo " abaixo.
Com um projeto aberto, clique Add New Data Source no menu Data.
O Data Source Configuration Wizard abre.
2.
3.
4.
5.
6.
Continue com " para continuar o processo e configurar a conexo " abaixo.
2.
Clique em Create.
3.
Na caixa Create New SQL Server 2005 Mobile Edition Database de dilogo, digite um
caminho totalmente qualificado para o novo banco de dados (por exemplo, c:\MyDB).
4.
Do New Password em e Confirm Password caixas, digite uma senha (por exemplo,
MyPassword) como a senha para o novo banco de dados, e clique em OK.
Visual C# Consolidado
1206
Observao de segurana
Para projetos que sero usados em aplicativos do mundo real, escolha uma senha de alta
segurana.
5.
Na caixa Add Connection de dilogo, clique Test Connection para garantir que a
conexo foi feita.
Uma mensagem aparece, indicando que a conexo de teste xito.
Observao
SQL Server Mobile no oferece suporte abrir arquivos de banco de dados em um
compartilhamento de rede.
6.
Clique OK para retornar para a Add Connection caixa de dilogo e clique OK para fechlo.
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.
Com um projeto Smart Device aberto, clique Add New Data Source no menu Data.
2.
3.
Visual C# Consolidado
1207
Esta conexo deve ser exibida na caixa suspensa se seu banco de dados j estiver
disponvel em Server Explorer. Se a conexo de banco de dados no aparecer na lista,
clique New Connection para abrir a Add Connection caixa de dilogo, clique Browse para
abrir a Select SQL Server Mobile Edition Database File caixa de dilogo, navegue para
seu banco de dados, e, em seguida clique em Open. Em seguida clique OK para fechar a
Add Connection caixa de dilogo.
4.
5.
6.
Na pgina Choose Your Database Objects, selecione os objetos que deseja usar como
fontes dados em seu projeto.
Clique em Finish.
Objetos que voc selecionou no SQL Server Mobile Database so exibidos como fontes de
dados para o projeto na janela Data Sources. Para abrir a janela, clique Show Data
Sources no Data menu.
Como: Adicionar um banco de dados do SQL Server como uma fonte de dados (Dispositivos)
Voc pode usar bancos de dados do SQL Server como fontes de dados em seu projetos
dispositivo gerenciado.
Para adicionar uma conexo de dados SQL Server ao Explorer Server
1.
2.
3.
4.
Na caixa Change Data Source de dilogo, selecionar Microsoft SQL Server, e clique em
OK Para reabrir a Add Connection caixa dilogo
5.
Na caixa Server name, especifique o nome do servidor onde a fonte de dados est
localizada.
6.
7.
Para usar uma conexo de dados SQL Server como fonte de dados em um projeto
1.
2.
No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
3.
4.
5.
Visual C# Consolidado
1208
6.
Na caixa Change Data Source de dilogo, selecionar Microsoft SQL Server, e clique em
OK Para reabrir a Add Connection caixa dilogo
7.
Na caixa Server name, digite ou selecione o nome do servidor onde a fonte de dados est
localizada.
8.
9.
10. Na pgina Choose Your Data Connection, optar por excluir dados confidenciais da
seqncia de conexo, e clique em Next.
Observao de segurana
Incluindo dados confidenciais na seqncia de conexo representa um risco de segurana.
11. Na pgina Choose Your Database Objects, selecione os objetos voc deseja usar como
fontes de dados, e clique em Finish.
A conexo de dados agora aparece como uma fonte de dados na Data Sources janela.
2.
3.
Na pgina Select an Object you wish to bind to, selecione um objeto j em seu
aplicativo.
Observao
Talvez seja necessrio criar o projeto que contm o objeto antes o objeto aparece no assistente.
Voc tambm pode adicionar uma referncia a um objeto no est em seu aplicativo, clicando
Add Reference e localizar o conjunto desejado no Caixa de dilogo Add Reference. O assembly
adicionado ao modo de exibio de rvore.
4.
5.
Expanda o conjunto que contm o objeto ao qual deseja vincular a, e selecione o objeto no
modo de exibio de rvore.
Clique em Finish.
A fonte de dados adicionada janela Data Sources.
No menu Data, clique Show Data Sources para abrir a Data Sources janela.
Selecionar itens na janela Data Sources, e arraste-os em um formulrio do Windows para
criar controles acoplados s propriedades em seu objeto. Para obter mais informaes,
consulte Viso Geral da Exibio dados.
Visual C# Consolidado
1209
2.
Na pgina Choose a Data Source Type, selecionar Web Service, e clique em Next
3.
4.
Clique em Finish.
A fonte de dados adicionada janela Data Sources.
3.
Clique com o boto direito do mouse Tables e, em seguida clique em Create Table.
4.
5.
6.
Para a primeira coluna, insira valores para Column Name, Data Type, Length, Allow
Nulls, Unique, e Primary Key. Continuar para colunas adicionais.
Clique em OK.
A nova tabela for exibida na lista de tabelas para a conexo de dados.
2.
3.
Clique com o boto direito do mouse na tabela para ser editado, e no menu de atalho,
clique em Edit Table Schema.
4.
Visual C# Consolidado
1210
3.
4.
Clique com boto direito em Tables, mouse a tabela voc deseja excluir e, em seguida, no
menu de atalho, clique em Drop Table.
Na caixa Delete Objects de dilogo, clique em Remove, e clique em OK
Observao
No possvel remover uma tabela at que todas as referncias para a tabela sejam excludas.
2.
Na janela Server Explorer, expanda a conexo dados para exibir suas tabelas.
3.
4.
Clique com o boto direito do mouse na tabela qual voc deseja adicionar uma coluna, e
depois clique Edit Table Schema no menu de atalho.
Na janela Edit Table, adicionar a coluna e suas propriedades, e clique em OK.
2.
Na janela Server Explorer, expanda a conexo dados para exibir suas tabelas.
3.
4.
Clique com o boto direito do mouse na tabela que contm a coluna cujas propriedades
voc deseja editar e, em seguida, clique Edit Table Schema no menu de atalho.
Tornar suas edies, e, em seguida clique em OK.
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).
2.
Na janela Server Explorer, expanda a conexo dados para exibir suas tabelas.
3.
Clique com o boto direito do mouse na tabela da qual voc deseja remover a coluna, e
depois clique Edit Table Schema no menu de atalho.
4.
Na janela Edit Table, selecione a coluna voc deseja excluir e clique em Delete e clique
em OK.
Observao
No possvel remover uma coluna at que todas as referncias para a coluna sejam excludas.
1211
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 criar um ndice para um banco de dados do SQL Server Mobile
1.
2.
Na janela Server Explorer, expanda a fonte de dados no qual voc deseja criar um novo
ndice.
3.
Expandir a tabela para o qual voc deseja o novo ndice, e em seguida, clique com o boto
direito do mouse a Indexes pasta.
4.
5.
Na caixa New Index de dilogo, digite um nome para o ndice, e clique em Add.
6.
7.
2.
Na janela Server Explorer, expanda a Conexo de Dados e Tabela que contm o ndice
cujas propriedades voc deseja editar.
3.
Clique com o boto direito do mouse o ndice, e, em seguida clique Index Properties no
menu de atalho.
4.
2.
Na janela Server Explorer, expanda a conexo de dados do qual voc deseja descartar
um ndice.
3.
Expandir tabela que possui o ndice, expandir Indexes, e em seguida, clique com o boto
direito do mouse o ndice para ser descartado.
4.
5.
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.
Visual C# Consolidado
1212
Para definir uma senha ao criar um banco de dados SQL Server Mobile
1.
2.
3.
Na pgina Choose Your Data Connection, clique New Connection para abrir a Add
Connection caixa de dilogo.
4.
Clique em Change, selecione Microsoft SQL Server Mobile Edition, e clique em OK.
5.
6.
Clique em Create.
7.
Na caixa Create New SQL Server 2005 Mobile Edition Database de dilogo, digite um
caminho qualificado fullly-para o novo banco de dados (por exemplo, c:\MyDatabase.sdf).
8.
Do New Password em e Confirm Password caixas, digite uma senha para o novo banco
de dados, e clique em OK.
3.
4.
5.
3.
4.
5.
Clique OK Para iniciar a reduo selecionada e reparar opo, ou clique Cancel para
deixar o banco de dados em sua condio atual.
Visual C# Consolidado
1213
Arraste uma tabela no formato DataGrid ou Detalhes da janela Data Sources para o
formulrio no designer.
Voc pode selecionar o formato, clique na seta no canto direito do nome da tabela.
2.
3.
4.
2.
Ouo
2.
3.
2.
No Dataset Designer, clique com boto direito aponte para Add, e, no menu de atalho,
clique em Query. o TableAdapter,
3.
4.
Na pgina Choose a Query Type, selecionar Select which returns a single value, e
clique em Next
5.
6.
Visual C# Consolidado
1214
2.
Marque a Show device choices before deploying a device project caixa de seleo.
Criando o aplicativo
Isso um aplicativo Windows Forms simples para hospedar a funcionalidade de dados dessa
explicao passo a passo.
Visual C# Consolidado
1215
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.
4.
5.
6.
No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
Visual C# Consolidado
1216
3.
4.
5.
6.
Na caixa Select SQL Server Mobile Edition Database File de dilogo, selecionar
Northwind.sdf, e clique em Open
Na caixa Add Connection de dilogo, deixe a Password caixa vazia.
Este banco de dados tem nenhuma senha.
7.
8.
9.
10. Na caixa de mensagem que pergunta se voc deseja copiar o arquivo para seu projeto,
clique em Yes.
2.
Clique na Ship Country coluna, e clique na seta suspensa e selecione a Label opo.
3.
4.
5.
6.
7.
Clique em OK.
A WHERE clusula na caixa Query Text deve ler ([Order ID]=@PARAM1) agora.
8.
1217
1.
Clique com o boto direito do mouse no PARAM1 controle rtulo no designer, e no menu
de atalho, clique em Properties
2.
3.
Selecionar o FillBy boto, e altere sua propriedade de texto como Show country.
4.
Expanda Painel e controles para eliminar as barras de rolagem e mostrar todo o texto.
Cuidado principalmente que. e sua caixa de texto no estiver oculto atrs e seus controles o
Ship_CountryLabel o FillByPanel
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.
3.
Quando o aplicativo est sendo executado no emulador, digite um nmero ordem, que
execute de 10000 para 11077 no banco de dados Northwind, e clique em Show country.
O pas Navio para esse pedido aparece no controle rtulo.
Preparando para Walkthroughs adicionais
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
Visual C# Consolidado
1218
1.
2.
Na janela Data Sources, expanda a tabela mestre para expor a tabela de detalhes.
3.
Arraste a tabela de detalhes que voc encontrar dentro do n de tabela mestre para o
formulrio.
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.
4.
5.
Visual C# Consolidado
1219
2.
Marque a Show device choices before deploying a device project caixa de seleo.
Criando o aplicativo
Isso um aplicativo Windows Forms simples para hospedar a funcionalidade de dados dessa
explicao passo a passo.
(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.
4.
5.
6.
No menu Data, clique em Add New Data Source Para abrir o Data Source Configuration
Wizard.
Na pgina Choose a Data Source Type, selecionar Database, e clique em Next
Visual C# Consolidado
1220
Observao
Dependendo configuraes e projetos anteriores, caixa Add Connection de dilogo pode
aparecer em vez da caixa Choose Data Source de dilogo. Se isso acontecer, clique Change na
caixa Add Connection de dilogo para abrir a Change Data Source caixa de dilogo. Selecione
Microsoft SQL Server Mobile Edition e clique em OK.
3.
4.
5.
6.
Na caixa Select SQL Server Mobile Edition Database File de dilogo, selecionar
Northwind.sdf, e clique em Open
Na caixa Add Connection de dilogo, deixe a Password caixa vazia.
Este banco de dados tem nenhuma senha.
7.
8.
9.
10. Na caixa de mensagem que pergunta se voc deseja copiar o arquivo para seu projeto,
clique em Yes.
3.
Na janela Data Sources, expanda a Customers tabela para expor a Orders tabela.
Observao
Esta a Orders tabela como ele aparece dentro da Customers tabela, no a Orders tabela que
Visual C# Consolidado
1221
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.
3.
Quando o aplicativo executado no emulador, use a cima e para baixo setas no seu
teclado ou no controle NAVIGATION no emulador para alterar os registros selecionados na
grade Customers. Verifique os registros selecionados alterar na grade Orders.
Preparando para Walkthroughs adicionais
Se voc pretende fazer orientaes adicionais ou abrir outros projetos, voc deseja desligar
completamente o emulador e sair desta soluo.
3.
4.
Visual C# Consolidado
1222
1.
2.
Na janela Server Explorer, expanda a conexo dados para expor a listagem de tabela.
3.
Clique com o boto direito do mouse na tabela cujos dados voc deseja exibir e, no menu
de atalho, clique em Open.
3.
4.
2.
3.
Na caixa Preview Data de dilogo, selecione o objeto para visualizar e clique em Preview.
Os dados aparecero na caixa Results. O nmero de colunas e linhas na grade tambm
exibido na parte inferior da caixa Preview Data de dilogo.
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).
Para gerar os formulrios de dados
1.
Arraste uma tabela no formato DataGrid da janela Data Sources para o formulrio no
designer.
Voc pode selecionar o formato, clique na seta no canto direito do nome da tabela.
2.
Visual C# Consolidado
1223
As caixas de dilogo brevemente so exibidas como eles so gerados no designer. Para verificar
se as caixas de dilogo so agora parte do projeto, procure-los Solution Explorer.
Para modificar dados em um aplicativo em execuo
1.
2.
3.
2.
Clique em OK.
A nova linha ser adicionada para o DataGrid.
Visual C# Consolidado
1224
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.
Configurando o projeto CAB
3.
4.
No painel Project Types no lado esquerdo, expanda o Other Project Types n e clique
em Setup and Deployment.
No Templates painel direita, selecione Smart Device CAB Project.
Isso o nico tipo de projeto CAB vlido para dispositivos inteligentes. Os outros tipos de
projeto so para somente solues de mesa.
5.
2.
3.
Voc tambm pode usar esta janela para alterar o nome do fabricante e para
especificar o mnimo e mximo permitido verses do sistema operacional.
Voc pode definir a OSVersionMin propriedade para 4.21 para indicar que o
aplicativo Pocket PC possui reconhecimento orientao da tela. No entanto, definindo essa
propriedade para 4.21 voc impedir o aplicativo de instalao em Pocket PCs baseados no
Windows Mobile 2003 e anteriormente. Para permitir instalao em dispositivos e tambm
indicar conscientizao orientao de tela a dispositivos mais recentes voc deve editar o
Visual C# Consolidado
1225
Se voc estiver usando uma configurao Windows CE DLL, usar essa grade
propriedade para especificar o nome e local do arquivo. Para obter mais informaes sobre
instalao Windows CE DLLs, consulte a documentao Pocket PC ou Smartphone SDK.
2.
Tambm pode usar esta pgina Propriedade para adicionar autenticao ao seu projeto.
Autenticao necessrio para solues Smartphone, e no oferece suporte para solues
Pocket PC baseadas em Windows Mobile 2003 se e anteriormente. Para obter mais
informaes, consulte Segurana em projetos de dispositivos.
2.
No menu Action do Visual Studio, aponte para Add, e clique em Project Output.
3.
4.
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
Visual C# Consolidado
1226
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.
3.
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.
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.
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.
2.
3.
Visual C# Consolidado
1227
4.
5.
Quando a New Key entrada for exibida na, a Registry Editor renomeao-lo
SOFTWARE.
Clique com o boto direito do mouse essa nova chave, aponte para New, e clique em Key
6.
Quando a New Key entrada for exibida na, a Registry Editor renomeao-lo
MyCompany.
7.
2.
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
Visual C# Consolidado
1228
Como voc acessar a Select Certificate caixa de dilogo depende do tipo de projeto que voc
deseja assinar.
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.
2.
3.
Visual C# Consolidado
1229
4.
5.
6.
Alterar a Files of Type seleo para All Files (*.*), selecionar TestCert_Privileged.pfx ou
TestCert_Unprivileged.pfx. e, em seguida clique em Open
Na pgina File to Import do assistente, clique Next para abrir a Password pgina.
Deixe a Passwod caixa em branco. Esses teste certificados no tem uma senha.
7.
8.
Clique Next para abrir a Certificate Store pgina. Certifique-se de que Personal est
marcada na caixa Certificate store.
Clique Next para exibir a pgina de concluso, e clique em Finish.
A mensagem Import was successful exibida.
9.
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.
2.
3.
4.
5.
Visual C# Consolidado
1230
Para obter mais informaes sobre como executar signtool a partir da linha de comando,
consulte SignTool.
O ActiveSync.
RapiConfig.exe.
3.
No Solution Explorer, clique com o projeto Visual Basic ou Visual C#, e seguida, no menu
de atalho, clique em Properties.
2.
3.
Visual C# Consolidado
1231
4.
No Solution Explorer, clique com o projeto Visual Basic ou Visual C#, e seguida, no menu
de atalho, clique em Properties.
2.
3.
Se voc desejar criar um novo arquivo de chave de nome de alta segurana, clique
para
abrir a Create Strong Name Key caixa de dilogo.
New
Visual C# Consolidado
1232
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 assinar um arquivo.cab de Dispositivo Inteligente
1.
2.
3.
4.
5.
Voc ter um projeto de dispositivos inteligentes Visual Basic ou Visual C# em sua soluo.
Para obter mais informaes, consulte Programao para Dispositivos usando o .NET
Compact Framework.
Voc entrou o aplicativo. Para obter mais informaes, consulte Como: Assinar um
aplicativo Visual Basic ou Visual C# (Dispositivos).
Observao
As caixas de dilogo e comandos de menu que voc v podem ser diferentes das descritas em
Help (Ajuda) dependendo das configuraes ativas ou edio. Para alterar as configuraes,
escolha Import and Export Settings No menu Tools. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para configurar um dispositivo em um projeto de dispositivo gerenciado
1.
No Solution Explorer, clique com o projeto Visual Basic ou Visual C#, e seguida, no menu
de atalho, clique em Properties.
2.
3.
Visual C# Consolidado
1233
No solicitar.
Visual C# Consolidado
1234
Visual C# Consolidado
1235
Visual C# Consolidado
1236
Visual C# Consolidado
1237
Visual C# Consolidado
1238