Qual é a diferença entre C# and.NET?

Posso saber qual é a diferença entre C# e.NET? quando penso em C#, de imediato eu diria que é uma linguagem. net, mas quando eu procuro postos de trabalho, eles exigem candidatos a ter experiência C# e. NET. Alguém me pode dar uma explicação?

 139
Author: Nondeterministic narwhal, 2010-04-28

10 answers

Além do que André disse, vale a pena notar que:
  • . NET não é apenas uma biblioteca , mas também um runtime para executar aplicações.
  • o conhecimento de c# implica algum conhecimento de. NET (porque o modelo de objeto C# corresponde ao modelo de objeto.NET e você pode fazer algo interessante em C# apenas usando bibliotecas. net). O oposto não é necessariamente verdadeiro, pois você pode usar outras línguas para escrever. net aplicacao.

A distinção entre a language, a runtime, e a library é mais estrita em.Net/C# do que por exemplo em C++, onde a especificação da linguagem também inclui algumas funções básicas da biblioteca. A especificação C# diz apenas um pouco sobre o ambiente (basicamente, que ele deve conter alguns tipos como int, mas isso é mais ou menos tudo).

 90
Author: Tomas Petricek, 2015-03-04 12:56:41

C# é uma linguagem de programação,. NET é um termo genérico que tende a cobrir tanto o Framework.NET (uma biblioteca de framework de aplicação) quanto o tempo de execução comum da linguagem, que é o tempo de execução em que conjuntos. Net são executados.

A implementação de C# pela Microsoft está fortemente integrada com o Framework. net, por isso é compreensível que os dois conceitos sejam confundidos. No entanto, é importante compreender que são duas coisas muito diferentes.

Aqui está uma aula. escrito em C#:
class Example { }

Aqui está uma classe escrita em C# que explicitamente usa um conjunto de framework. net, tipo e método:

class Example
{
    static void Main()
    {
        // Here we call into the .NET framework to 
        // write to the output console
        System.Console.Write("hello, world");
    }
}

Como mencionei antes, é muito difícil usar a implementação de C# da Microsoft sem usar o framework. net também. A minha primeira implementação Example acima até usa o framework. net (implicitamente, Sim, mas usa-o mesmo assim) porque Example herda de System.Object.

Também, a razão pela qual Uso a frase da Microsoft a implementação de C # é porque existem outras implementações de C# disponíveis .

 153
Author: Andrew Hare, 2010-04-27 20:44:01

C# é uma linguagem de programação,. NET é a estrutura em que a linguagem é construída.

 45
Author: heisenberg, 2010-04-27 20:34:05

C# é uma linguagem de programação orientada a objetos forte que é construída principalmente no framework.net.

C# é o avião e. NET é a pista;)

 31
Author: Fareevar, 2013-10-03 14:47:17

C# é uma linguagem,. NET é uma estrutura de Aplicação. As bibliotecas. Net podem ser executadas no CLR e, portanto, qualquer linguagem que possa ser executada no CLR também pode usar as bibliotecas.net.

Se você está familiarizado com Java, Este é semelhante... Java é uma linguagem construída em cima da JVM... embora qualquer uma das bibliotecas Java pré-montadas pode ser usada por outra linguagem construída em cima da JVM.

 14
Author: Polaris878, 2010-04-27 20:36:14
Em. NET não se encontra apenas c#. Você pode encontrar visual básico, por exemplo. Se um trabalho requer conhecimento. net, provavelmente ele precisa de um programador que conhece todo o conjunto de linguagens fornecidas pelo framework.net.
 8
Author: Maurizio Reginelli, 2010-04-27 20:35:06

Quando as pessoas falam sobre o "framework. net" eles tendem a combinar duas áreas principais - a biblioteca de tempo de execução e a máquina virtual que realmente executa o código.net.

Quando se cria uma biblioteca de classes em estúdio Visual em C#, a DLL segue um formato prescrito-muito grosso modo, existe uma secção que contém meta-dados que descreve quais as classes que estão incluídas nela e quais as funções que têm, etc.. e isso descreve onde no binário esses objetos existem. Esta rede comum. o formato é o que permite que as bibliotecas sejam compartilhadas entre as linguagens. net (C#, VB.Net, F# e outros) facilmente. Embora grande parte da "runtime library" do.Net esteja escrita em C# now (eu acredito), você pode imaginar quantos deles poderiam ter sido escritos em linguagens não gerenciadas, mas arranjados neste formato prescrito para que pudessem ser consumidos por linguagens. net.

A verdadeira "carne" da biblioteca que constróis consiste em CIL ("linguagem intermédia comum") que é um pouco como a linguagem de montagem of. net-again, this language is the common output of all. net languages, which is what makes.net libraries consumable by any. net language.

Usando a ferramenta " ildasm.exe", que está disponível gratuitamente em Microsoft SDKs (e pode já estar em seu computador), você pode ver como C# code é convertido em meta data e IL. Incluí uma amostra No fundo desta resposta como exemplo.

Quando executamos o código. net, o que acontece normalmente é que a máquina virtual. NET é a ler o IL e a processá-lo. Este é o outro lado do.NET e, novamente, você provavelmente pode imaginar que isso poderia ser facilmente escrito em uma linguagem não gerenciada - ele "apenas" precisa ler instruções VM e executá-las (e integrar com o coletor de lixo, que também não precisa ser o código. net).

O que eu descrevi é (mais uma vez, mais ou menos) o que acontece quando você constrói um executável em estúdio Visual (para mais informações, eu recomendo o livro "CLR via C# por Jeffrey Richter" - é muito detalhado e excelentemente escrito).

No Entanto, há momentos em que você pode escrever C# que não vai ser executados dentro de um .net ambiente - por exemplo, Bridge.NET "compila" C# código em JavaScript que é executado no navegador (o time que produzem ter ido para o esforço de escrever versões .net biblioteca de tempo de execução que são escritos em JavaScript e, portanto, o poder e a flexibilidade da .biblioteca de rede está disponível para o JavaScript gerado). Isto é perfeito. exemplo de separação entre C# e .net - é possível escrever C# para diferentes "alvos"; você pode segmentar o .net ambiente de tempo de execução (quando você criar um executável) ou você pode segmentar o ambiente de navegador (quando você usa Bridge.NET).

Uma classe de exemplo (muito) simples:

using System;

namespace Example
{
    public class Class1
    {
        public void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }
}

The resulting meta data and IL (retrieved via ildasm.exe):

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Example
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                            63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.

  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) 

  .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 0A 54 65 73 74 49 4C 44 41 53 4D 00 00 )    // ...TestILDASM..
  .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 0A 54 65 73 74 49 4C 44 41 53 4D 00 00 )    // ...TestILDASM..
  .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 12 43 6F 70 79 72 69 67 68 74 20 C2 A9 20   // ...Copyright .. 
                                                                                                  20 32 30 31 36 00 00 )                            //  2016..
  .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( 01 00 24 31 39 33 32 61 32 30 65 2D 61 37 36 64   // ..$1932a20e-a76d
                                                                                                  2D 34 36 33 35 2D 62 36 38 66 2D 36 63 35 66 36   // -4635-b68f-6c5f6
                                                                                                  32 36 36 31 36 37 62 00 00 )                      // 266167b..
  .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )             // ...1.0.0.0..
  .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 1C 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B   // ....NETFramework
                                                                                                        2C 56 65 72 73 69 6F 6E 3D 76 34 2E 35 2E 32 01   // ,Version=v4.5.2.
                                                                                                        00 54 0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73   // .T..FrameworkDis
                                                                                                        70 6C 61 79 4E 61 6D 65 14 2E 4E 45 54 20 46 72   // playName..NET Fr
                                                                                                        61 6D 65 77 6F 72 6B 20 34 2E 35 2E 32 )          // amework 4.5.2
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}
.module Example.dll
// MVID: {80A91E4C-0994-4773-9B73-2C4977BB1F17}
.imagebase 0x10000000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x05DB0000

// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Example.Class1
       extends [mscorlib]System.Object
{
  .method public hidebysig instance void 
          SayHello() cil managed
  {
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Class1::SayHello

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       8 (0x8)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  nop
    IL_0007:  ret
  } // end of method Class1::.ctor

} // end of class Example.Class1

// =============================================================
 7
Author: Dan Roberts, 2016-08-11 07:35:26

C# não tem uma biblioteca de tempo de execução separada. Ele usa .NET como uma biblioteca em tempo de execução.

 4
Author: Jude, 2015-06-15 11:13:11

Aqui eu forneci-lhe um link onde explicar o que é C# Language e aFramework Platform Architecture .NET Framework. Lembra-te disso. C# é uma linguagem de programação orientada a objetos, e funciona no Framework.net.

O Framework. net inclui uma grande biblioteca de classes chamada Framework Class Library (FCL) e fornece interface de usuário, acesso a dados, Conectividade de banco de dados, criptografia, desenvolvimento de aplicações web, algoritmos numéricos e rede comunicacao.

O Framework. Net foi desenvolvido pela Microsoft que funciona principalmente no Microsoft Windows.

Introdução à linguagem C# e ao Framework. net

 2
Author: S. Mayol, 2017-05-20 23:59:47

C# é uma linguagem de programação.

. Net é um framework usado para construir aplicações no Windows.

O framework. Net não se limita a C#. Diferentes idiomas podem atingir o framework. Net e construir aplicações usando esse framework. Os exemplos são f# ou VB.Net

 2
Author: Sonevol, 2017-09-20 01:33:13