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