Подтвердить что ты не робот

В чем разница между С# и .NET?

Могу ли я узнать, в чем разница между С# и .NET? Когда я думаю о С#, я бы сказал, что это язык .NET, но когда я ищу вакансии, они требуют, чтобы кандидаты имели опыт работы с С# и .NET. Может кто-нибудь дать мне объяснение?

4b9b3361

Ответ 1

В дополнение к тому, что сказал Эндрю, стоит отметить, что:

  • .NET - это не только библиотека, но также время выполнения для выполнения приложений.
  • Знание С# подразумевает некоторое знание .NET(поскольку объектная модель С# соответствует объектной модели .NET, и вы можете делать что-то интересное на С# только с помощью библиотек .NET). Противоположность не обязательно истинна, поскольку вы можете использовать другие языки для написания приложений .NET.

Различие между языком, временем выполнения и библиотекой является более строгим в .NET/С#, чем, например, на С++, где спецификация языка также включает некоторые базовые функции библиотеки. Спецификация С# говорит об очень незначительной информации об окружающей среде (в основном, она должна содержать некоторые типы, такие как int, но это более или менее все).

Ответ 2

С# - язык программирования,.NET - это общий термин, который, как правило, охватывает как .NET Framework (библиотеку среды приложения), так и среду выполнения Common Language Runtime, которая является средой выполнения, в которой выполняются сборки .NET.

Реализация Microsoft С# в значительной степени интегрирована с .NET Framework, поэтому понятно, что эти две концепции будут смущены. Однако важно понимать, что это две разные вещи.

Вот класс, написанный на С#:

class Example { }

Вот класс, написанный на С#, который явно использует сборку, тип и метод .NET framework:

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

Как я уже упоминал ранее, очень сложно использовать реализацию Microsoft С# без использования платформы .NET. Моя первая реализация Example выше даже использует платформу .NET(неявно, да, но она ее использует, тем не менее), потому что Example наследует от System.Object.

Кроме того, причина, по которой я использую фразу Microsoft для реализации С#, заключается в том, что существуют другие реализации С#, доступные.

Ответ 3

С# - язык программирования,.NET - это основа, на которой построен язык.

Ответ 4

С# - сильный объектно-ориентированный язык программирования, который в основном построен на платформе .NET.

С# - это самолет, а .NET - ВПП;)

Ответ 5

С# - это язык,.NET - это среда приложения. Библиотеки .NET могут работать в среде CLR, поэтому любой язык, который может работать в среде CLR, также может использовать библиотеки .NET.

Если вы знакомы с Java, это похоже... Java - это язык, построенный поверх JVM... хотя любая из предварительно собранных библиотек Java может использоваться другим языком, построенным поверх JVM.

Ответ 6

В .NET вы не найдете только С#. Например, вы можете найти Visual Basic. Если задание требует знания .NET, возможно, ему нужен программист, который знает весь набор языков, предоставляемых платформой .NET.

Ответ 7

Когда люди говорят о ".net framework", они, как правило, объединяют две основные области: библиотеку времени выполнения и виртуальную машину, на самом деле выполняющую код .net.

Когда вы создаете библиотеку классов в Visual Studio в С#, DLL следует предписанному формату - очень грубо, есть раздел, который содержит метаданные, которые описывают, какие классы включены в него и какие функции у них есть, и т.д. и который описывает, где в двоичном виде эти объекты существуют. Этот общий формат .net - это то, что позволяет библиотекам совместно использовать языки .net(С#, VB.Net, F # и другие). Хотя большая часть библиотеки времени .net "runtime library" теперь написана на С# (я полагаю), вы можете себе представить, сколько из них могло быть написано на неуправляемых языках, но организовано в этом предписанном формате, чтобы они могли потребляться языками .net.

Реальное "мясо" библиотеки, которую вы создаете, состоит из CIL ( "Common Intermediate Language" ), который немного напоминает язык ассемблера .net - этот язык является общим выходом всех языков .net, что делает библиотеки .net доступными для любого языка .net.

Используя инструмент "ildasm.exe", который свободно доступен в пакетах Microsoft SDK (и может уже быть на вашем компьютере), вы можете увидеть, как код С# преобразуется в метаданные и IL. Я привел пример в нижней части этого ответа в качестве примера.

Когда вы запускаете код выполнения .net, то, что обычно происходит, это виртуальная машина .net считывает этот IL и обрабатывает его. Это другая сторона .net, и, опять же, вы можете себе представить, что это можно легко записать на неуправляемом языке - "только" нужно читать инструкции VM и запускать их (и интегрироваться с сборщиком мусора, что также необходимо не будет .net-код).

То, что я описал (опять-таки, грубо), что происходит, когда вы создаете исполняемый файл в Visual Studio (для получения дополнительной информации я настоятельно рекомендую книгу "CLR via С# by Jeffrey Richter" - она ​​очень подробно и отлично написана).

Однако есть моменты, когда вы можете написать С#, который не будет выполнен в среде .net - например, Bridge.NET "компилирует" код С# в JavaScript, который затем запускается в браузере (команда, которая его производит, прилагает усилия к написанию версий библиотеки времени исполнения .net, написанных на JavaScript, и поэтому мощь и гибкость библиотеки .net доступный для сгенерированного JavaScript). Это прекрасный пример разделения между С# и .net - возможно написать С# для разных "целей"; вы можете настроить среду выполнения .net(при создании исполняемого файла) или настроить таргетинг на среду браузера (при использовании Bridge.NET).

Класс (очень простой):

using System;

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

Полученные метаданные и IL (извлеченные через 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

// =============================================================

Ответ 8

С# - язык программирования.

.Net - это структура, используемая для создания приложений в Windows.

Структура

.Net не ограничена С#. Различные языки могут ориентироваться на инфраструктуру .Net и создавать приложения, используя эту инфраструктуру. Примерами являются F # или VB.Net

Ответ 9

C# не имеет отдельной библиотеки времени выполнения. Он использует .NET как библиотеку времени выполнения.

Ответ 10

Здесь я предоставил вам ссылку, где объясняется, что такое язык С# и архитектура платформы .NET Framework. Помни что С# - это объектно-ориентированный язык программирования общего назначения, который работает на .NET Framework.

.NET Framework включает в себя большую библиотеку классов с именем Framework Class Library (FCL) и предоставляет пользовательский интерфейс, доступ к данным, подключение к базе данных, криптографию, разработку веб-приложений, численные алгоритмы и сетевые коммуникации.

.NET Framework была разработана Microsoft и работает в основном под управлением Microsoft Windows.

Введение в язык С# и .NET Framework от Microsoft Docs