Ir para conteúdo
Faça parte da equipe! (2024) ×

[Artigo] Como C # é diferente de Java


Arkanun1000
 Compartilhar

Posts Recomendados

  • Velha Guarda

Características de C# ausentes em Java

 

C# inclui tipos mais primitivos e a funcionalidade para capturar exceções aritméticas.

 

Inclui um grande número de conveniências de notação em Java, muitas das quais, como a sobrecarga do operador e os moldes definidos pelo usuário, já são familiares para a grande comunidade de programadores C++.

 

O manuseio de eventos é um "cidadão de primeira classe"; É parte do próprio idioma.

 

Permite a definição de "estruturas", que são semelhantes às classes, mas podem ser alocadas na pilha (ao contrário de instâncias de classes em C# e Java).

 

O C# implementa propriedades como parte da sintaxe do idioma.

 

C# permite que as instruções de troca funcionem em strings.

 

C# permite métodos anônimos que fornecem funcionalidades de encerramento.

 

C# permite iteradores que empregam co-rotinas através de uma palavra-chave de rendimento de estilo funcional.

 

O C# possui suporte para parâmetros de saída, auxiliando no retorno de vários valores, caracterizado por C++ e SQL.

 

C# tem a capacidade de alias namespaces.

 

C# tem "Implementação de membro explícito" que permite que uma classe implemente especificamente métodos de uma interface, separada para seus próprios métodos de classe. Isso permite que ele também implemente duas interfaces diferentes que tenham um método do mesmo nome. Os métodos de uma interface não precisam ser "públicos"; Eles podem ser feitos para serem acessíveis somente através dessa interface.

 

C# fornece integração com o COM.

 

Seguindo o exemplo de C e C++, C# permite chamada por referência para tipos primitivos e de referência.

Características de Java ausentes em C#

 

Características de Java ausentes em C#

 

A palavra-chave strictfp do Java garante que o resultado das operações de ponto flutuante permaneçam iguais em todas as plataformas.

 

O Java suporta exceções verificadas para uma melhor aplicação da captura e tratamento de erros.

Diferenças filosóficas entre as línguas

 

Diferenças filosóficas entre as linguagens

 

Não há tipos numéricos primitivos não assinados em Java. Embora seja universalmente acordado que a mistura de variáveis assinadas e não assinadas no código é ruim, a falta de suporte de Java para os tipos numéricos não assinados torna algo inadequado para a programação de baixo nível.

 

C# não inclui exceções verificadas. Alguns argumentariam que as exceções verificadas são muito úteis para boas práticas de programação. Outros, incluindo Anders Hejlsberg, arquiteto principal de linguagem C#, argumentam que eles foram até certo ponto um experimento em Java e que eles não mostraram valer a pena [1] [2].

 

Os espaços de nome C# são mais parecidos com aqueles em C++. Ao contrário de Java, o namespace não especifica a localização do arquivo de origem. (Na verdade, não é estritamente necessário para um local de arquivo de origem Java para refletir sua estrutura de diretório de pacote).

 

C# inclui delegados, enquanto Java não. Alguns argumentam que os delegados complicam o modelo de invocação do método, porque são manipulados através da reflexão, o que geralmente é lento. Por outro lado, eles podem simplificar o código removendo a necessidade de declarar novas classes (possivelmente anônimas) para se conectar aos eventos.

 

Java exige que um nome de arquivo de origem deve corresponder à única classe pública dentro dele, enquanto C# permite múltiplas classes públicas no mesmo arquivo.

 

C# permite o uso de ponteiros, que alguns designers de idiomas consideram inseguro, mas certos recursos de idioma tentam garantir que esta funcionalidade não seja usada incorretamente acidentalmente. Os ponteiros também complicam muito as tecnologias, como o RMI de Java (Remote Method Invocation), onde os objetos do programa residentes em um computador podem ser referenciados dentro de um programa executado em um computador completamente separado. Alguns especularam que a falta de ponteiros de memória em Java (substituído pela noção mais abstrata de referências de objetos) foi um aceno para a chegada da computação em grade, onde um único aplicativo pode ser distribuído em muitas peças físicas de hardware.

 

O C# suporta a palavra-chave goto. Isso ocasionalmente pode ser útil, mas o uso de um método de fluxo de controle mais estruturado geralmente é recomendado.

 

C# possui arrays multidimensionais verdadeiros, bem como a matriz de arrays que está disponível para Java (esse C# chama arrays irregulares). As matrizes multidimensionais são sempre rectangulares (no caso 2D ou análises para mais dimensões), enquanto uma matriz de arrays pode armazenar linhas (novamente no caso 2D) de comprimentos variáveis. Arrays rectangulares podem acelerar o acesso se a memória for um gargalo (há apenas uma referência de memória em vez de duas, este benefício é muito dependente do comportamento do cache), enquanto as matrizes irregulares economizam memória se não estiver cheia, mas custam (na penalidade de um ponteiro por linha ) Se for. Arrays retangulares também evitam a necessidade de alocar memória para cada linha de forma explícita.

 

O Java não inclui a sobrecarga do operador, porque o abuso da sobrecarga do operador pode levar a um código que é mais difícil de entender e depurar. C# permite a sobrecarga do operador, que, quando usado com cuidado, pode tornar o código mais fácil e legível. A falta de sobrecarga de Java torna um pouco inadequado para certos programas matemáticos. Por outro lado, os tipos numéricos do .NET não compartilham uma interface ou superclasse comum com som, restrição e assim por diante, restringindo a flexibilidade das bibliotecas numéricas.

 

Os métodos em C# não são virtuais por padrão. Em Java no entanto, os métodos são virtuais por padrão. Os métodos virtuais garantem que o método mais substituído de um objeto será chamado que é determinado pelo tempo de execução. Você sempre precisa ter isso em mente ao ligar ou escrever qualquer método virtual! Se o método for declarado como não virtual, o método a invocar será determinado pelo compilador. Esta é uma grande diferença de filosofia entre os designers das plataformas Java e .NET.

 

Genéricos do Java 1.5 usam o tipo de apagamento. A informação sobre os tipos genéricos é perdida quando a origem Java é compilada para bytecode. Os genéricos do .NET 2.0 são preservados após a compilação devido ao suporte de genéricos começando na versão 2.0 do .NET Common Language Runtime (CLR). A abordagem de Java permite que os binários Java 1.5 sejam executados no 1.4 JRE, ao custo de verificações de tempo de execução adicionais.

 

C# é definido pelos padrões ECMA e ISO, enquanto o Java é proprietário, embora largamente controlado através de um processo aberto da comunidade.

 

A API C# é completamente controlada pela Microsoft, enquanto que a API Java é gerenciada através de um processo aberto da comunidade.

 

O tempo de execução do .NET permite o código gerenciado e não gerenciado, permitindo certas classes de erros que não existem no ambiente de código gerenciado puro do Java, mas também permitem a interface com o código existente.

qRXaV1L.png

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.