Visual C# Language Concepts C# for C++ Developers
The following table contains important comparisons between C# and native C++, which does not use /clr. If you are a C++ programmer, this table will give you the most important differences between the two languages at a glance.
Feature
|
Refer to the topic
|
|---|
Inheritance: In C++, classes and structs are virtually identical whereas in C#, they are quite different. C# classes can implement any number of interfaces, but can inherit from only one base class. Furthermore, C# structs do not support inheritance, and do not support explicit default constructors (one is provided by default). |
class
interface
struct (C# Reference)
| Arrays: In C++ an array is merely a pointer. In C#, arrays are objects that include methods and properties. For example, the size of an array can be queried via the Length property. C# arrays also employ indexers that verify each index used to access the array. The syntax for declaring C# arrays is different from that for C++ arrays: the tokens "[]" appear following the array type in C#, not the variable. |
Arrays (C# Programming Guide)
Indexers (C# Programming Guide)
| Booleans: In C++, the bool type is essentially an integer. In C#, there is no conversion between the bool type and other types. |
bool
|
The long type: In C#, the long type is 64 bits, while in C++, it is 32 bits.
|
long
| Passing parameters: In C++, all variables are passed by value unless explicitly passed with a pointer or a reference. In C#, classes are passed by reference and structs are passed by value unless explicitly passed by reference with the ref or out parameter modifiers. |
struct
class
ref (C# Reference)
out (C# Reference)
|
The switch statement: Unlike the C++ switch statement, C# does not support fall-through from one case label to another.
|
switch
|
Delegates: C# delegates are roughly similar to function pointers in C++, are type-safe and secure.
|
delegate
| Base-class methods: C# supports the base keyword for calling the overridden base class members from derived classes. Also, overriding virtual or abstract methods is explicit in C#, using the override keyword. |
base
See also the examples for override
| Method hiding: C++ supports the implicit "hiding" of method through inheritance. In C#, you must use the new modifier to explicitly hide an inherited members. |
new
| Preprocessor directives are used for conditional compilation. No header files are used in C#. |
C# Preprocessor Directives
|
Exception handling: C# provides the finally keyword to provide for code that should be executed regardless of whether an exception is thrown.
|
try-finally
try-catch-finally
| C# operators: C# supports additional operators such as is and typeof. It also introduces different functionality for some logical operators. |
& Operator
| Operator
^ Operator
is
typeof
| The typedef keyword. In C++, typedef is used to create shorter or more convenient names for types that have already been declared. In C#, the using directive provides this capability. |
using Directive (C# Reference)
| The extern keyword: In C++, extern is used to import types. In C#, extern is used to create aliases for using different versions of the same assembly. |
extern
| The static keyword: In C++, static can be used both to declare class-level entities and to declare types that are specific to a module. In C#, static is only used to declare class-level entities. |
static
| The Main method in C# is declared differently from the main function in C++. In C# it is capitalized, and always static. Also, support for processing of command-line arguments is much more robust in C#. |
Main() and Command-Line Arguments (C# Programming Guide)
|
Pointers are allowed in C#, but only in unsafe mode.
|
unsafe
|
Overloading operators is performed differently in C#.
|
C# Operators
| Strings: In C++ a string is simply an arra of characters. In C#, strings are object that support robust searching methods. |
string
String
|
The foreach keyword enables you to iterate through arrays and collections.
|
foreach, in
| Globals: In C#, global methods and variables are not supported. Methods and variables must be contained within a class or struct. |
General Structure of a C# Program
| The #define preprocessing directive: In C++ the #define directive is commonly used to declare constant values. In C# the #define directive cannot be used for this purpose. Constants in C# are best defined as enumerated types (integral values only) or as static members of a class or struct. If you have several such constants, consider creating a separate "Constants" class to hold them. |
static (C# Reference)
const (C# Reference)
enum (C# Reference)
| Importing types: In C++, types common to multiple modules are placed in header files. In C#, this information is available via metadata. |
using
Metadata Overview
|
Local variables in C# cannot be used before they are initialized.
|
Methods (C# Programming Guide)
| Memory management: C++ is not a garbage collected language; memory that is not explicitly release remains allocated until the process terminates. C# is a garbage collected language. |
Garbage Collection
|
Destructors: C# has different syntax for deterministically releasing unmanaged resources.
|
Destructors
using Statement (C# Reference)
| Constructors: Similar to C++, if you do not provide a class constructor in C#, a default constructor is automatically generated for you. The default constructor initializes all the fields to their default values. |
Instance Constructors
Default Values Table
|
C# does not support bit fields.
|
C++ Bit Fields
|
C# input/output services and formatting rely on the run-time library of the .NET Framework.
|
C# Language Tour
Formatting Numeric Results Table
| In C#, method parameters cannot have default values. Use method overloads if you want to achieve the same effect. |
Compiler Error CS0241
| In C#, generic types and methods provide for type parameterization in a way that is similar to C++ templates. There are significant differences, however. For example, in C# generic type information is preserved at run time. |
Generics in C#
| The as keyword is similar to a standard cast, except that rather than throw an exception if the conversion fails, the return value is null. This is similar to using static_cast in C++, which, unlike dynamic_cast, performs no run-time check and hence does not throw an exception on failure. |
as (C# Reference)
|
For more information about comparisons between keywords in C# and other programming languages, see Language Equivalents. For information on the general structure of C# applications, see General Structure of a C# Program (C# Programming Guide).

See Also
|
Conceitos da linguagem Visual C# C# para desenvolvedores do C++
A tabela a seguir contém comparações importantes entre C# e C++ nativo, que não usa /clr. Se você for um programador C++, esta tabela irá fornecer as diferenças entre as duas linguagens de forma bem genérica. Recurso |
Consulte o tópico
|
|---|
Herança: No C++, classes e estruturas são praticamente idênticas enquanto em C#, eles são bastante diferentes. Classes do C# podem implementar qualquer número de interfaces, mas podem herdar apenas uma classe base. Além disso, estruturas de C# não oferecem suporte a herança e não oferecem suporte a construtores explícita (um é fornecido por padrão). |
Classe
Interface
struct (Referência C#)
| Matrizes: No C++ uma matriz é simplesmente um ponteiro. Em C#, matrizes são objetos que Incluir métodos e propriedades. Por exemplo, o tamanho de uma matriz pode ser consultado por meio da propriedade Length. Matrizes de C# também empregam indexadores que verificam cada índice usado para acessar a matriz. A sintaxe para declarar matrizes C# é diferente de matrizes C++: os símbolos "[]" aparecem após o tipo de matriz em C# e não da variável. |
Matrizes (Guia de programação do C#)
Indexadores (guia de programação C#)
| Booleanos: No C++, o tipo de bool é essencialmente um inteiro. Em C#, não há conversão entre o tipo bool e outros tipos. |
bool
|
O tipo de long: Em C#, o tipo de long é 64 bits, enquanto em C++, é 32 bits.
|
long
| Passando parâmetros: No C++, Tudo as variáveis são passadas por valor, a menos que explicitamente passados com um ponteiro ou uma referência. Em C#, classes são passadas por referência e estruturas são passadas por valor, a menos que explicitamente passados por referência com os modificadores de parâmetros ref ou out. |
struct
Classe
ref (Referência C#)
check-out (Referência C#)
|
A instrução switch: Ao contrário da instrução de switch C++, C# não dá suAtravéste outono-Através um rótulo maiúscminúsc para outro.
|
Alternar
|
Delegados: Representantes de C# são aproximadamente semelhante a ponteiros de função em C++, são tipo seguro e seguro.
| Delegar | Métodos de classe base: C# oferece suporte a palavra-chave base para chamar os membros de classe base substituído das classes derivadas. Além disso, substituir métodos virtuais ou abstratos é explícito em C#, usando a palavra-chave override. |
Base
Consulte também os exemplos de de Substituir
| Ocultando do método: C++ oferece suAtravéste a implícita "ocultar" do método Através herança. Em C#, você deve usar o modificador de new para ocultar explicitamente um membros herdados. | Novo | Diretivas de pré-processamento são usadas para compilação condicional. Nenhum arquivo de cabeçalho é usado em C#. |
Directives Preprocessor C#
|
Manipulação de exceção: C# fornece a palavra-chave finally para fornecer código que deve ser executado independentemente de se uma exceção é lançada.
|
try-finally
try-catch-finally
| Operadores de C#: C# oferece suporte aos operadores adicionais, como is e typeof. Ele também apresenta funcionalidade diferente para alguns operadores lógicos. |
& Operador
Operador de |
Operator ^
é
TypeOf
| A palavra-chave typedef. No C++, typedef é usado para criar nomes menores ou mais conveniente para tipos que já tenham sido declarados. Em C#, a diretiva de using fornece esse recurso. |
usando diretiva (Referência C#)
| A palavra-chave extern: No C++, extern é usado para importar os tipos. Em C#, extern serve para criar aliases para usar diferentes versões do mesmo assembly. |
extern
| A palavra-chave static: No C++, static pode ser usado para declarar a entidades de nível de classe e declarar tipos que são específicos para um módulo. No C#, static só é usada para declarar a entidades de nível de classe. |
estático
| O método de Main em C# é declarado de forma diferente da função main em C++. No C# está em maiúsculas e sempre static. Além disso, o suporte para processamento de argumentos de linha de comando é muito mais robusto em C#. |
Main() e argumentos de linha de comando (Guia de programação C#)
|
Ponteiros são permitidos no C#, mas apenas no modo de unsafe.
| Não seguro |
Sobrecarga de operadores é executada diferente de C#.
|
Operadores C#
| Seqüências de caracteres: No C++ uma Cadeia de Caracteres é simplesmente um arra de caracteres. Em C#, seqüências de caracteres são o objeto que oferecem suporte a métodos de pesquisando robustos. |
string
String
|
A palavra-chave foreach permite que você iterar Através matrizes e coleções.
|
foreach, em
| Globais: No C#, variáveis e métodos Global não há suporte para. Métodos e variáveis devem estar contidas em um class ou struct. |
Estrutura geral de um programa C#
| O #define pré-processamento de diretiva: No C++ a diretiva de #define costuma ser usada para declarar valores constantes. Em C# a diretiva de #define não pode ser usada para essa finalidade. Constantes em C# melhor são definidas como tipos enumerados (somente valores integrais) ou como membros estáticos de uma classe ou struct. Se você tiver várias constantes, considere a criação de uma classe de "constantes" separada para armazená-los. |
static (referência C#)
Const (Referência C#)
Enum (Referência C#)
| Importando tipos: No C++, os tipos ComComumComum a Múltiplo módulos são colocados em arquivos de cabeçalho. Em C#, essa informação está disponível via metadados. | Usando
Visão Geral Sobre Metadados
|
Variáveis Local em C# não podem ser usadas antes que eles sejam inicializados.
|
Métodos (Guia de programação do C#)
| Gerenciamento de memória: C++ não é um coletado Idioma; memória que não é explicitamente versão permanece alocada até que o processo termina. C# é um coletado Idioma. |
Coleta de Lixo
|
Destruidores: C# tem uma sintaxe diferente para deterministicamente liberar recursos não gerenciados.
|
Destructors
Usando Instrução (Referência C#)
| Construtores: Semelhante a C++, se você não fornecer um construtor de classe em C#, um construtor padrão é gerado automaticamente para você. O construtor padrão inicializa Tudo campos com seus valores padrão. |
Construtores de instância
Tabela de valores padrão
|
C# não oferece suporte a campos de bits.
|
Campos de bit do C++
|
Serviços de entrada/saída de C# e a formatação dependem da biblioteca de tempo de execução do .NET Framework.
|
C# Idioma tour
Formatação numérica tabela de resultados
| Em C#, parâmetros de método não podem ter valores padrão. Use sobrecargas do método se você desejar obter o mesmo efeito. |
CS0241 de erro do compilador
| Em C#, tipos genéricos e métodos fornecem para o tipo de parametrização de uma forma que é semelhante a modelos C++. Existem diferenças significativas, entretanto. Por exemplo, no C# genérico Informações do tipo é mantido em tempo de execução. |
Classes genéricas em C#
| A palavra-chave as é semelhante a uma conversão padrão, exceto que, em vez de lançar uma exceção se a falhar de conversão, o valor de retorno nulo. Isso é semelhante a usar static_cast no C++, que, ao contrário de dynamic_cast, não executa nenhuma Marcar de tempo de execução e, portanto, não lance uma exceção em caso de falha. |
como (Referência C#)
|
Para obter mais informações sobre as comparações entre palavras-chave em C# e outras linguagens de programação, consulte equivalentes do idioma. Para obter informações sobre a estrutura geral de aplicativos C#, consulte Estrutura geral de um programa C# (guia de programação C#) .

Consulte também
|