Introdução à linguagem C# e ao .NET FrameworkIntroduction to the C# Language and the .NET Framework

C# é uma linguagem elegante, orientada a objeto e fortemente tipada, que permite que os desenvolvedores criem uma variedade de aplicativos robustos e seguros executados no .NET Framework.NET Framework.C# is an elegant and type-safe object-oriented language that enables developers to build a variety of secure and robust applications that run on the .NET Framework.NET Framework. Você pode usar C# para criar aplicativos de cliente do Windows, serviços Web XML, componentes distribuídos, aplicativos cliente-servidor, aplicativos de banco de dados e muito, muito mais.You can use C# to create Windows client applications, XML Web services, distributed components, client-server applications, database applications, and much, much more. O Visual C# fornece um editor de código avançado, designers de interface de usuário convenientes, depurador integrado e muitas outras ferramentas para facilitar o desenvolvimento de aplicativos com base na linguagem C# e no .NET Framework.NET Framework.Visual C# provides an advanced code editor, convenient user interface designers, integrated debugger, and many other tools to make it easier to develop applications based on the C# language and the .NET Framework.NET Framework.

Observação

A documentação do Visual C# considera que você já tenha conhecimento dos conceitos básicos de programação.The Visual C# documentation assumes that you have an understanding of basic programming concepts. Se você é principiante, convém explorar o Visual C# Express, que está disponível na Web.If you are a complete beginner, you might want to explore Visual C# Express, which is available on the Web. Você também pode tirar proveito de livros e recursos da Web sobre C# para aprender técnicas de programação práticas.You can also take advantage of books and Web resources about C# to learn practical programming skills.

Linguagem C#C# Language

A sintaxe de C# é altamente expressiva, mas também é simples e fácil de aprender.C# syntax is highly expressive, yet it is also simple and easy to learn. A sintaxe de chaves de C# será instantaneamente reconhecível para qualquer pessoa familiarizada com C, C++ ou Java.The curly-brace syntax of C# will be instantly recognizable to anyone familiar with C, C++ or Java. Normalmente, os desenvolvedores que conhecem qualquer uma dessas linguagens são capazes de começar a trabalhar de forma produtiva em C# dentro de um período muito curto.Developers who know any of these languages are typically able to begin to work productively in C# within a very short time. A sintaxe de C# simplifica muitas complexidades de C++ e fornece recursos poderosos como tipos de valor anulável, enumerações, delegados, expressões lambda e acesso direto à memória, que não existem em Java.C# syntax simplifies many of the complexities of C++ and provides powerful features such as nullable value types, enumerations, delegates, lambda expressions and direct memory access, which are not found in Java. C# oferece suporte a tipos e métodos genéricos, o que proporciona mais segurança e desempenho para os tipos, e iteradores, que permitem aos implementadores das classes de coleção definir os comportamentos personalizados da iteração simples de usar pelo código do cliente.C# supports generic methods and types, which provide increased type safety and performance, and iterators, which enable implementers of collection classes to define custom iteration behaviors that are simple to use by client code. As expressões LINQ (Consulta Integrada à Linguagem)Language-Integrated Query (LINQ) tornam a consulta fortemente tipada uma construção de linguagem de primeira classe.LINQ (Consulta Integrada à Linguagem)Language-Integrated Query (LINQ) expressions make the strongly-typed query a first-class language construct.

Por ser uma linguagem orientada a objeto, o C# oferece suporte aos conceitos de encapsulamento, herança e polimorfismo.As an object-oriented language, C# supports the concepts of encapsulation, inheritance, and polymorphism. Todas as variáveis e métodos, incluindo o método Main, o ponto de entrada do aplicativo, são encapsulados em definições de classe.All variables and methods, including the Main method, the application's entry point, are encapsulated within class definitions. Uma classe pode herdar diretamente de uma classe pai, mas pode implementar qualquer quantidade de interfaces.A class may inherit directly from one parent class, but it may implement any number of interfaces. Métodos que substituem métodos virtuais em uma classe pai exigem a palavra-chave override como uma forma de evitar uma redefinição acidental.Methods that override virtual methods in a parent class require the override keyword as a way to avoid accidental redefinition. Em C#, um struct é como uma classe simplificada; é um tipo alocado na pilha que pode implementar interfaces, mas não oferece suporte a herança.In C#, a struct is like a lightweight class; it is a stack-allocated type that can implement interfaces but does not support inheritance.

Além desses princípios básicos orientados a objeto, C# facilita o desenvolvimento de componentes de software por meio de várias construções de linguagem inovadoras, incluindo o seguinte:In addition to these basic object-oriented principles, C# makes it easy to develop software components through several innovative language constructs, including the following:

  • Assinaturas de método encapsulado chamadas de delegados, que permitem as notificações de eventos fortemente tipados.Encapsulated method signatures called delegates, which enable type-safe event notifications.

  • Propriedades, que servem como acessadores para variáveis de membro privado.Properties, which serve as accessors for private member variables.

  • Atributos, que fornecem metadados declarativos sobre os tipos no tempo de execução.Attributes, which provide declarative metadata about types at run time.

  • Comentários embutidos da documentação XML.Inline XML documentation comments.

  • LINQ (Consulta Integrada à Linguagem)Language-Integrated Query (LINQ) que fornece recursos de consulta internos em várias fontes de dados.which provides built-in query capabilities across a variety of data sources.

Se você precisar interagir com outros softwares do Windows, como objetos COM ou DLLs Win32 nativas, faça isso em C# através de um processo denominado "Interoperabilidade".If you have to interact with other Windows software such as COM objects or native Win32 DLLs, you can do this in C# through a process called "Interop". A interoperabilidade permite que programas em C# façam quase tudo que um aplicativo C++ nativo pode fazer.Interop enables C# programs to do almost anything that a native C++ application can do. C# oferece suporte até mesmo para ponteiros, e o conceito de código "não seguro" para os casos nos quais o acesso direto à memória é absolutamente essencial.C# even supports pointers and the concept of "unsafe" code for those cases in which direct memory access is absolutely critical.

O processo de compilação de C# é simples comparado ao C e C++, e mais flexível do que em Java.The C# build process is simple compared to C and C++ and more flexible than in Java. Não há arquivos de cabeçalho separado, e nenhum requisito de que os métodos e os tipos sejam declarados em uma ordem específica.There are no separate header files, and no requirement that methods and types be declared in a particular order. Um arquivo de código-fonte de C# pode definir qualquer quantidade de classes, estruturas, interfaces e eventos.A C# source file may define any number of classes, structs, interfaces, and events.

Veja a seguir recursos adicionais de C#:The following are additional C# resources:

Arquitetura da plataforma do .NET Framework.NET Framework Platform Architecture

Programas em C# são executados no .NET Framework.NET Framework, um componente integral do Windows que inclui um sistema de execução virtual chamado de CLR (Common Language Runtime) e um conjunto unificado de bibliotecas de classes.C# programs run on the .NET Framework.NET Framework, an integral component of Windows that includes a virtual execution system called the common language runtime (CLR) and a unified set of class libraries. O CLR é a implementação comercial da Microsoft da CLI (Common Language Infrastructure), um padrão internacional que é a base para a criação de ambientes de execução e de desenvolvimento nos quais linguagens e bibliotecas funcionam de forma integrada.The CLR is the commercial implementation by Microsoft of the common language infrastructure (CLI), an international standard that is the basis for creating execution and development environments in which languages and libraries work together seamlessly.

O código-fonte escrito em C# é compilado em uma linguagem intermediária (IL) que está em conformidade com a especificação da CLI.Source code written in C# is compiled into an intermediate language (IL) that conforms to the CLI specification. O código e os recursos de IL, como bitmaps e cadeias de caracteres, são armazenados em disco em um arquivo executável chamado de assembly, normalmente com uma extensão .exe ou .dll.The IL code and resources, such as bitmaps and strings, are stored on disk in an executable file called an assembly, typically with an extension of .exe or .dll. Um assembly contém um manifesto que fornece informações sobre os tipos, a versão, a cultura e os requisitos de segurança do assembly.An assembly contains a manifest that provides information about the assembly's types, version, culture, and security requirements.

Quando o programa em C# é executado, o assembly é carregado no CLR, que pode executar várias ações de acordo com as informações no manifesto.When the C# program is executed, the assembly is loaded into the CLR, which might take various actions based on the information in the manifest. Em seguida, se os requisitos de segurança forem atendidos, o CLR executará a compilação JIT (just in time) para converter o código de IL em instruções nativas da máquina.Then, if the security requirements are met, the CLR performs just in time (JIT) compilation to convert the IL code to native machine instructions. O CLR também oferece outros serviços relacionados à coleta automática de lixo, tratamento de exceções e gerenciamento de recursos.The CLR also provides other services related to automatic garbage collection, exception handling, and resource management. O código que é executado pelo CLR é, às vezes, chamado de "código gerenciado", ao contrário de "código não gerenciado", que é compilado em linguagem de máquina nativa e visa um sistema específico.Code that is executed by the CLR is sometimes referred to as "managed code," in contrast to "unmanaged code" which is compiled into native machine language that targets a specific system. O diagrama a seguir ilustra as relações em tempo de compilação e em tempo de execução dos arquivos de código-fonte em C#, as bibliotecas de classe do .NET Framework, assemblies e o CLR.The following diagram illustrates the compile-time and run-time relationships of C# source code files, the .NET Framework class libraries, assemblies, and the CLR.

Do código-fonte de C# até a execução na máquinaFrom C# source code to machine execution

Interoperabilidade de linguagem é um recurso importante do .NET Framework.NET Framework.Language interoperability is a key feature of the .NET Framework.NET Framework. Como o código de IL produzido pelo compilador de C# está em conformidade com a CTS (Especificação de tipo comum), o código de IL gerado a partir de C# pode interagir com código gerado a partir das versões .NET do Visual Basic, Visual C++ ou qualquer uma das mais de 20 linguagens compatíveis com CTS.Because the IL code produced by the C# compiler conforms to the Common Type Specification (CTS), IL code generated from C# can interact with code that was generated from the .NET versions of Visual Basic, Visual C++, or any of more than 20 other CTS-compliant languages. Um único assembly pode conter vários módulos escritos em linguagens .NET diferentes, e os tipos podem fazer referencia entre si, como se tivessem sido escritos na mesma linguagem.A single assembly may contain multiple modules written in different .NET languages, and the types can reference each other just as if they were written in the same language.

Além dos serviços de tempo de execução, o .NET Framework.NET Framework também inclui uma biblioteca abrangente de mais de 4000 classes organizadas em namespaces, fornecendo uma ampla variedade de funcionalidades úteis para tudo, desde entrada e saída de arquivo para manipulação de cadeia de caracteres até análise XML, e controles do Windows Forms.In addition to the run time services, the .NET Framework.NET Framework also includes an extensive library of over 4000 classes organized into namespaces that provide a wide variety of useful functionality for everything from file input and output to string manipulation to XML parsing, to Windows Forms controls. O aplicativo típico em C# usa bastante a biblioteca de classes .NET Framework.NET Framework para lidar com tarefas comuns de "encanamento".The typical C# application uses the .NET Framework.NET Framework class library extensively to handle common "plumbing" chores.

Para saber mais sobre o .NET Framework, confira Visão geral do Microsoft .NET Framework.For more information about the .NET Framework, see Overview of the Microsoft .NET Framework.

Consulte tambémSee also