C#과의 차이점은 무엇입니까?NET?
C#과의 차이점이 무엇인지 알 수 있을까요?NET? C#을 생각하면 바로 A입니다.NET 언어, 하지만 제가 채용 공고를 검색할 때, 그들은 지원자들에게 C#과 .을 요구합니다.NET 경험.누가 설명 좀 해주시겠어요?
C#은 프로그래밍 언어입니다.NET은 두 가지 모두를 포괄하는 포괄적인 용어입니다.NET Framework(응용 프로그램 프레임워크 라이브러리) 및 공용 언어 런타임.NET 어셈블리가 실행됩니다.
Microsoft의 C# 구현은 와 긴밀하게 통합되어 있습니다.NET Framework는 두 개념이 혼동되는 것을 이해할 수 있습니다.하지만 그것들은 매우 다른 두 가지라는 것을 이해하는 것이 중요합니다.
다음은 C#으로 작성된 클래스입니다.
class Example { }
다음은 을 명시적으로 사용하는 C#으로 작성된 클래스입니다.NET 프레임워크 어셈블리, 유형 및 방법:
class Example
{
static void Main()
{
// Here we call into the .NET framework to
// write to the output console
System.Console.Write("hello, world");
}
}
앞서 언급했듯이, Microsoft의 C# 구현을 사용하지 않고 사용하는 것은 매우 어렵습니다.NET 프레임워크도 마찬가지입니다.나의 첫번째Example
위의 구현은 심지어 를 사용합니다.framework ( 네,그럼에도 합니다.) 왜냐하면 NET은 다음과 같습니다.Example
는 에상됨속서의 상속을 받습니다.System.Object
.
또한 Microsoft의 C# 구현을 사용하는 이유는 다른 C# 구현을 사용할 수 있기 때문입니다.
Andrew의 답변 외에도 다음과 같은 점에 주목할 필요가 있습니다.
- .NET은 라이브러리일 뿐만 아니라 응용 프로그램을 실행하기 위한 런타임이기도 합니다.
- C#에 대한 지식은 에 대한 지식을 의미합니다.NET(C# 객체 모델이 에 해당하므로).NET 객체 모델과 당신은 를 사용하는 것만으로 C#에서 흥미로운 것을 할 수 있습니다.NET 라이브러리).다른 언어를 사용하여 글을 쓸 수 있기 때문에 그 반대가 반드시 사실인 것은 아닙니다.NET 응용 프로그램.
언어, 런타임 및 라이브러리의 구분은 에서 더 엄격합니다.언어 사양에 일부 기본 라이브러리 기능도 포함된 C++의 경우보다 NET/C#.C# 사양은 환경에 대해 거의 언급하지 않습니다(기본적으로 다음과 같은 유형을 포함해야 함).int
하지만 그것이 거의 전부입니다.
C#은 프로그래밍 언어입니다.NET은 언어가 기반으로 하는 프레임워크입니다.
C#은 대부분 을 기반으로 하는 강력한 객체 지향 프로그래밍 언어입니다.NET 프레임워크.
C#는 비행기이고 .NET은 활주로입니다 ;)
C#는 언어입니다.NET은 애플리케이션 프레임워크입니다..NET 라이브러리는 CLR에서 실행될 수 있으므로 CLR에서 실행될 수 있는 모든 언어도 를 사용할 수 있습니다.NET 라이브러리.
만약 당신이 자바에 익숙하다면, 이것은 유사합니다...Java는 JVM 위에 구축된 언어입니다. 사전 구성된 Java 라이브러리는 JVM 위에 구축된 다른 언어에서 사용할 수 있습니다.
사람들이 ".net 프레임워크"에 대해 말할 때, 그들은 두 가지 주요 영역인 런타임 라이브러리와 실제로 .net 코드를 실행하는 가상 머신을 결합하는 경향이 있습니다.
C#의 Visual Studio에서 클래스 라이브러리를 만들 때 DLL은 지정된 형식을 따릅니다. 대략적으로 DLL에 포함된 클래스와 해당 클래스의 기능 등을 설명하는 메타데이터가 포함된 섹션이 있습니다.그리고 그것은 그 물체들이 이진법에서 어디에 존재하는지를 설명합니다.이 공통 .net 형식을 사용하면 .net 언어(C#, VB) 간에 라이브러리를 공유할 수 있습니다.네트, F# 등)를 쉽게 사용할 수 있습니다..net "runtime 라이브러리"의 대부분이 C#으로 작성되었지만(나는 그 중 얼마나 많은 수가 관리되지 않는 언어로 작성되었지만 .net 언어에 의해 사용될 수 있도록 이러한 사전 지정된 형식으로 배열되었을 수 있는지 상상할 수 있습니다.
빌드하는 라이브러리의 실제 "고기"는 .net의 어셈블리 언어와 약간 유사한 CIL(Common Intermediate Language)로 구성됩니다. 이 언어는 모든 .net 언어의 공통 출력이며, 이는 .net 라이브러리를 모든 .net 언어에서 사용할 수 있게 합니다.
Microsoft SDK에서 무료로 사용할 수 있으며 컴퓨터에 이미 있을 수 있는 "idasm.exe" 도구를 사용하여 C# 코드가 메타데이터 및 IL로 변환되는 방법을 확인할 수 있습니다.저는 이 답변의 하단에 샘플을 예시로 포함시켰습니다.
execute .net 코드를 실행하면 일반적으로 .net 가상 시스템이 해당 IL을 읽고 처리하는 것입니다.이는 .net의 반대쪽이며 관리되지 않는 언어로 쉽게 작성될 수 있습니다. VM 지침을 읽고 실행하면 "단순"으로 쉽게 작성할 수 있습니다(또한 .net 코드일 필요가 없는 가비지 수집기와 통합).
제가 설명한 것은 Visual Studio에서 실행 파일을 만들 때 일어나는 일입니다(자세한 내용은 "CLR via C# by Jeffrey Richter"라는 책을 매우 추천합니다). 매우 상세하고 훌륭하게 작성되었습니다.
그러나 .net 환경 내에서 실행되지 않는 C#을 작성할 수도 있습니다(예: Bridge).NET은 C# 코드를 자바스크립트로 "컴파일"하여 브라우저에서 실행합니다(이 코드를 생성하는 팀은 자바스크립트로 작성된 .net 런타임 라이브러리의 버전을 작성하기 위해 노력하여 생성된 자바스크립트에서 .net 라이브러리의 성능과 유연성을 이용할 수 있습니다).이것은 C#과 .net을 구분하는 완벽한 예입니다. 서로 다른 "대상"에 대해 C#을 작성할 수 있습니다. 실행 파일을 작성할 때 .net 런타임 환경을 대상으로 하거나 Bridge를 사용할 때 브라우저 환경을 대상으로 할 수 있습니다.NET).
(매우) 간단한 예제 클래스:
using System;
namespace Example
{
public class Class1
{
public void SayHello()
{
Console.WriteLine("Hello");
}
}
}
결과 메타데이터 및 IL(idasm.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
// =============================================================
.NET에서는 C#만 찾을 수 없습니다.예를 들어 Visual Basic을 찾을 수 있습니다.작업에 필요한 경우.NET 지식은 에서 제공하는 전체 언어 집합을 알고 있는 프로그래머가 필요합니다.NET 프레임워크.
C#은 프로그래밍 언어입니다.
.Net은 Windows에서 응용 프로그램을 만드는 데 사용되는 프레임워크입니다.
.Net 프레임워크는 C#에 국한되지 않습니다.다른 언어를 대상으로 할 수 있습니다.프레임워크를 넷으로 구성하고 해당 프레임워크를 사용하여 애플리케이션을 빌드합니다.예를 들어 F# 또는 VB가 있습니다.그물
C#
별도의 런타임 라이브러리가 없습니다.그것은 사용합니다..NET
런타임 라이브러리로 사용할 수 있습니다.
여기에 C# 언어가 무엇인지 설명하는 링크를 제공했습니다.NET Framework 플랫폼 아키텍처.C#은 범용 객체 지향 프로그래밍 언어이며 에서 실행됩니다.NET Framework.
.NET Framework에는 FCL(Framework Class Library)이라는 대규모 클래스 라이브러리가 포함되어 있으며 사용자 인터페이스, 데이터 액세스, 데이터베이스 연결, 암호화, 웹 응용 프로그램 개발, 숫자 알고리즘 및 네트워크 통신을 제공합니다.
.NET Framework는 주로 Microsoft Windows에서 실행되는 Microsoft에 의해 개발되었습니다.
C# 언어 및 에 대한 소개.마이크로소프트 Docs의 NET 프레임워크
[C#]
코드, 변수, 클래스 등을 작성하는 방법에 대한 규칙이 있는 언어이며, 0.net인 C#만 해당됩니다.
public int SumTwo(int a, int b){ return a + b; }
[.NET]
프로그램을 환경으로 실행하기 위한 프레임워크로, 서로 다른 OS 간에 공유될 수 있는 광범위한 리소스 목록을 제공합니다.
이 예를 하나와 함께 참조하십시오.NET 방법:
File.AppendAllText("file.txt", "DEMO CONTENT");
이 예에서는 C# 코드가 호출됩니다.파일을 만들고 콘텐츠를 추가하는 NET, 실행은 Linux와 Windows에서 다르겠지만,NET은 동일한 계약을 사용할 수 있도록 이러한 차이를 처리할 것이며 C# 레벨에서 이에 대해 걱정할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/2724864/what-is-the-difference-between-c-sharp-and-net
'programing' 카테고리의 다른 글
Postgres "psql이 내부 또는 외부 명령으로 인식되지 않음" (0) | 2023.05.12 |
---|---|
Azure ASP .net WebApp 요청 시간이 초과되었습니다. (0) | 2023.05.12 |
C#에서 내가 있는 페이지의 전체 URL을 얻으려면 어떻게 해야 합니까? (0) | 2023.05.12 |
SQL Azure에서 쿼리 실행이 훨씬 느린 이유는 무엇입니까? (0) | 2023.05.12 |
볼륨을 사용하여 도킹된 postgres 데이터베이스에서 데이터를 유지하는 방법 (0) | 2023.05.07 |