IT

C #과 .NET의 차이점은 무엇입니까?

lottoking 2020. 5. 21. 08:23
반응형

C #과 .NET의 차이점은 무엇입니까?


C #과 .NET의 차이점이 무엇인지 알 수 있습니까? C #을 생각하면 바로 .NET 언어라고 말할 수 있지만 구직을 검색 할 때는 C # 및 .NET 경험이 있어야합니다. 누군가 나에게 설명을 해 줄 수 있습니까?


Andrew가 말한 것 외에도 다음과 같은 점에 주목할 가치가 있습니다.

  • .NET은 라이브러리 일뿐 만 아니라 응용 프로그램 실행을 위한 런타임 이기도합니다 .
  • C #에 대한 지식은 .NET에 대한 지식을 의미합니다 (C # 개체 모델이 .NET 개체 모델에 해당하고 .NET 라이브러리를 사용하여 C #에서 흥미로운 작업을 수행 할 수 있기 때문). 다른 언어를 사용하여 .NET 응용 프로그램을 작성할 수 있으므로 반대의 경우는 아닙니다.

.NET / C # 에서는 언어 , 런타임라이브러리의 구분 이 예를 들어 C ++보다 더 엄격합니다. 여기서 언어 사양에는 몇 가지 기본 라이브러리 함수가 포함됩니다. C # 사양은 환경에 대해 거의 말하지 않습니다 (기본적으로와 같은 일부 유형을 포함해야 int하지만 거의 전부입니다).


C #은 프로그래밍 언어이며 .NET은 .NET Framework (응용 프로그램 프레임 워크 라이브러리)와 .NET 어셈블리가 실행되는 런타임 인 ​​공용 언어 런타임을 모두 포함하는 포괄적 인 용어입니다.

Microsoft의 C # 구현은 .NET Framework와 크게 통합되므로 두 가지 개념이 혼동 될 수 있습니다. 그러나 그것들이 매우 다른 두 가지라는 것을 이해하는 것이 중요합니다.

C #으로 작성된 클래스는 다음과 같습니다.

class Example { }

다음은 .NET 프레임 워크 어셈블리, 형식 및 메서드를 명시 적으로 사용하는 C #으로 작성된 클래스입니다.

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

앞에서 언급했듯이 .NET 프레임 워크를 사용하지 않고 Microsoft의 C # 구현을 사용하는 것은 매우 어렵습니다. Example위의 첫 번째 구현은에서 Example상속 하기 때문에 .NET 프레임 워크를 사용합니다 (암시 적으로도 그래도 그럼에도 사용합니다) System.Object.

또한 Microsoft의 C # 구현 문구를 사용하는 이유 다른 C # 구현 이 있기 때문 입니다.


C #은 프로그래밍 언어이며 .NET은 언어가 구축 된 프레임 워크입니다.


C #은 강력한 .NET 프레임 워크를 기반으로하는 강력한 객체 지향 프로그래밍 언어입니다.

C #은 비행기이고 .NET은 활주로입니다.)


C #은 언어이고 .NET은 응용 프로그램 프레임 워크입니다. .NET 라이브러리는 CLR에서 실행될 수 있으므로 CLR에서 실행할 수있는 모든 언어는 .NET 라이브러리를 사용할 수도 있습니다.

Java에 익숙하다면 비슷합니다. Java는 JVM 위에 구축 된 언어입니다. 그러나 사전 조립 된 Java 라이브러리는 JVM 위에 구축 된 다른 언어로 사용할 수 있습니다.


.NET에서는 C # 만 찾을 수 없습니다. 예를 들어 Visual Basic을 찾을 수 있습니다. 작업에 .NET 지식이 필요한 경우 .NET 프레임 워크에서 제공하는 전체 언어 세트를 알고있는 프로그래머가 필요할 수 있습니다.


사람들이 ".net 프레임 워크"에 대해 이야기 할 때 런타임 라이브러리와 실제로 .net 코드를 실행하는 가상 머신이라는 두 가지 주요 영역을 결합하는 경향이 있습니다.

C #의 Visual Studio에서 클래스 라이브러리를 만들 때 DLL은 규정 된 형식을 따릅니다. 대략적으로 클래스에 포함 된 클래스와 해당 함수의 기능 등을 설명하는 메타 데이터가 포함 된 섹션이 있습니다. 바이너리에는 이러한 객체가 존재합니다. 이 일반적인 .net 형식은 라이브러리를 .net 언어 (C #, VB.Net, F # 및 기타)간에 쉽게 공유 할 수 있도록합니다. .net "런타임 라이브러리"의 많은 부분이 C #으로 작성되었지만 (관리자 언어로는 작성되지 않았지만이 규정 된 형식으로 정렬되어 .net 언어로 소비 될 수 있음) .

빌드 한 라이브러리의 실제 "고기"는 .net의 어셈블리 언어와 비슷한 CIL ( "공통 중급 언어")로 구성됩니다.이 언어는 모든 .net 언어의 공통 출력입니다. .net 라이브러리는 모든 .net 언어로 소모품을 사용할 수 있습니다.

Microsoft SDK에서 무료로 사용할 수 있고 이미 컴퓨터에있을 수있는 "ildasm.exe"도구를 사용하면 C # 코드가 메타 데이터와 IL로 변환되는 방식을 확인할 수 있습니다. 이 답변의 맨 아래에 예제로 샘플을 포함 시켰습니다.

.net 코드 실행을 실행할 때 일반적으로 발생하는 것은 .net 가상 머신이 해당 IL을 읽고 처리하는 것입니다. 이것은 .net의 다른 측면이며, 관리되지 않는 언어로 쉽게 작성할 수 있다고 상상할 수 있습니다. VM 명령을 읽고 실행해야하며 가비지 수집기와 통합해야합니다. .net 코드가 아님).

내가 설명 한 것은 Visual Studio에서 실행 파일을 빌드 할 때 발생하는 일입니다 (거의). 자세한 내용은 "C Jeff via Richter의 C #을 통한 CLR"책을 강력히 권장합니다.

그러나 .net 환경에서 실행되지 않는 C #을 작성하는 경우가 있습니다. 예를 들어 Bridge.NET은 C # 코드를 JavaScript로 "컴파일"한 다음 브라우저 (브라우저에서이를 생성 한 팀)에서 실행됩니다. JavaScript로 작성된 .net 런타임 라이브러리 버전을 작성하려는 노력으로 .net 라이브러리의 성능과 유연성을 생성 된 JavaScript에 사용할 수 있습니다. 이것은 C #과 .net의 분리에 대한 완벽한 예입니다. 서로 다른 "대상"에 대해 C #을 작성할 수 있습니다. .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

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

C #은 프로그래밍 언어입니다.

.Net is a framework used for building applications on Windows.

.Net framework is not limited to C#. Different languages can target .Net framework and build applications using that framework. Examples are F# or VB.Net


C# does not have a seperate runtime library. It uses .NET as a runtime library.


Here I provided you a link where explain what is C# Language and the .NET Framework Platform Architecture. Remember that C# is a general-purpose, object-oriented programming language, and it runs on the .NET Framework.

.NET Framework includes a large class library named Framework Class Library (FCL) and provides user interface, data access, database connectivity, cryptography, web application development, numeric algorithms, and network communications.

.NET Framework was developed by Microsoft that runs primarily on Microsoft Windows.

Introduction to the C# Language and the .NET Framework from Microsoft Docs

참고URL : https://stackoverflow.com/questions/2724864/what-is-the-difference-between-c-sharp-and-net

반응형