새것NET6 기능은 다음 주에 GA될 예정입니다.

벌써 11월이야!수개월간의 루머, 추측 등을 거쳐 마이크로소프트가 최종적으로 밝혀질 것이다.다음 주 .NET Conf
이 버전에는 많은 새로운 기능과 속도 및 효율성 향상이 포함되어 있습니다.
가장 중요한 5시를 자세히 봅시다.NET 6 기능.

C#10


현재 C#10은 Microsoft에서 가장 중요한 구성 요소 중 하나로 간주되고 있습니다.깨끗하다C#10은 주로 기존 개념, 기능 및 특성, 등록 또는 모델의 확장입니다.
C#10, global using, 파일 범위의 네임스페이스 및 우수한 특성을 요약하면 코드를 단순화하고 중복 작성을 줄일 수 있습니다.

레코드 구조


마지막으로 C#10 버전은 레지스트리 구조를 지원합니다.이 새 특성을 이해하려면 C#9 버전의 레코드와 비교하지만 수정 사항이 있습니다.
가장 중요한 변화는 완전성을 위해 등록표 구조를 늘렸기 때문에 구조는 유형과 같은 등록표의 장점을 누릴 수 있다.
그러나 이것이 전부가 아니다. 마이크로소프트는 구조기록에만 국한된 것이 아니라, 클래스기록과 구조기록을 ValueTuple과 맞추기로 했다.
결과는 어떻습니까?
기본적으로 기록의 구조 속성은 가변적이며 기록의 클래스 속성은 변하지 않는다.비록 여전히 readonly record struct을 성명할 수 있지만, 그것은 record class의 의미와 일치하고 변할 수 없다.
명확한 것은 기록 구조가 기록 종류를 대체하지 않는다는 것이다.마이크로소프트에 따르면 기록 클래스를 기록 구조로 전환하는 것을 장려하지 않는다고 한다.이 종류의 사용 건의는 등록표 구조에 똑같이 적용되며, 그것이 등록표 종류에 적용되는 것과 같다.
Microsoft 자체 주장:

“…In other words, the choice between classes and structs must be made before choosing to use registers…”


실행 중인 구조 로깅


이 이론을 진실한 예를 보는 것보다 더 잘 해석할 수 있는 방법이 있습니까?이제 시작하겠습니다.
Battery battery = new("CR2032", 0.235, 100);
WriteLine(battery);
while (battery.RemainingCapacityPercentage > 0)
{
  battery.RemainingCapacityPercentage--;
}
WriteLine(battery);
public record struct Battery(string Model, double TotalCapacityAmpHours, int RemainingCapacityPercentage);
이것이 바로 코드가 실행될 때 발생하는 결과입니다.

Battery { Model = CR2032, TotalCapacityAmpHours = 0.235, RemainingCapacityPercentage = 100 }
Battery { Model = CR2032, TotalCapacityAmpHours = 0.235, RemainingCapacityPercentage = 0 }
C#9의 예제에 매우 가깝다는 것을 알 수 있습니다.
Battery battery = new("CR2032", 0.235, 100);
WriteLine(battery);
while (battery.RemainingCapacityPercentage > 0)
{
    Battery updatedBattery = battery with
    {RemainingCapacityPercentage =
    battery.RemainingCapacityPercentage - 1};
    battery = updatedBattery;
}
WriteLine(battery);
public readonly record struct Battery(string Model, double TotalCapacityAmpHours, int RemainingCapacityPercentage);
다시 한 번 말하지만 기록 구조 속성(기록 구조 문법 제외)의 관건적인 차이점은 수정할 수 있다는 데 있다.

구조 기록과 유형 기록 사이의 주요 차이는 무엇입니까?

  • 레코드 클래스는 record 또는 record class으로 정의됩니다.
  • 기본적으로 record class의 속성은 변할 수 없습니다 (get/init).
  • 기본적으로
  • 레코드 구조 속성은 가변적(get/set)입니다.
  • 기록은 struct 또는 readonly record struct 기록으로 정의된다.
  • 왜 구조 기록은 유형 기록처럼 보입니까?

  • with 표현식을 지원합니다.
  • 은 C#10에서 새 구성원 정의를 사용자 정의하여 기본 속성 구성원이 아닌 필드를 사용할 수 있습니다.
  • 은 사용하는 문법이 같다(정의의 struct 또는 class은 제외).
  • 에서는 init 또는 소프트 속성을 사용하여 구성원의 행동을 사용자 정의할 수 있습니다.
  • 전 세계 사용


    현재, 당신은 모든 using 명령에 global 수식자를 사용할 수 있습니다.이것이 있으면 컴파일러에게 이 명령은 컴파일러의 모든 원본 파일에 적용되어야 한다고 알려줄 수 있습니다.
    좋아, 하지만, 앞에서 말한 바와 같이...

    사용 지령은 무엇입니까?


    이 명령을 사용하면 네임스페이스에 정의된 형식을 사용할 수 있으며, 이 형식의 전체 네임스페이스를 지정할 필요가 없습니다.
    한 마디로 하면 using 명령은 하나의 이름 공간에서 모든 유형을 가져옵니다. 예를 들어 다음과 같습니다.
    using System.Text;
    
    using 명령에 두 개의 수식자를 적용할 수 있다.
  • global 수식자의 효과는 프로젝트의 모든 원본 파일에 같은 using 명령을 추가하는 것과 같다.이 수정자는 C#10.0에 도입되었습니다.
  • static 수식자는 명명 공간의 모든 종류를 가져오는 것이 아니라 하나의 종류에서 static 구성원과 플러그인 종류를 가져옵니다.
  • 다양한 유형의 문법을 살펴보자.
  • global using System;
  • global using static System.Console;
  • global using E = System.Environment;
  • 파일 역할 영역 네임스페이스 선언


    이제 새 이름공간 선언 양식을 사용하여 다음 정의의 모든 선언이 선언된 이름공간의 구성원임을 지정할 수 있습니다.
    namespace NamespaceName;
    
    이전에는 이랬다.
    namespace NamespaceName
    {
    }
    
    개선된 구문은 C#10에 포함되며 가장 유행하는 이름 공간 선언을 위해 수직 및 수평 공간을 절약합니다.

    상수 및 보간 문자열


    삽입된 문자열을 상수 변수에 할당할 수 있습니다.이 플러그인 문자열들은 이해하고 응용하기 쉽다.그것들은 어떠한 상황에서도 사용할 수 있어야 한다.자리 표시자 값이 상수인 경우 현재 상수와 조합할 수 있습니다.
    Microsoft example:
    const string Bar = "Bar";
    const string DoubleBar = $"{Bar}_{Bar}";
    WriteLine(DoubleBar);
    

    확장 속성 모드


    현재 특성 모드를 사용하여 플러그인 필드를 인용할 수 있습니다.이것은 (이전에) 그것을 이해하는 가장 좋은 예이다.
    { Prop1: { Prop2: pattern } }
    
    이제 이렇게 잘 할 수 있다.
    { Prop1.Prop2: pattern }
    
    Microsoft가 RC 2 of .NET 6(예: Reading.PM25)에서 사용한 폼을 다음 예제에서 확인할 수 있습니다.
    List<Status> statuses = new()
    {    
      new(Category.Normal, new(20, false, 20)),    
      new(Category.Warning, new(20, false, 60)),    
      new(Category.Danger, new(20, true, 60)),    
      new(Category.Danger, new(100, false, 20))
    };
    foreach (Status status in statuses)
    {    
      string message = status switch
      {
        {Category: Category.Normal} => "Let the good times roll",
        {Category: Category.Warning, Reading.PM25: >50 and <100} =>
        "Check the air filters",
        {Reading.PM25: >200 } => "There must be a fire somewhere.
        Don't go outside.",
        {Reading.SmokeDetected: true } => "We have a fire!",
        {Category: Category.Danger} => "Something is badly wrong",
        _ => "Unknown status"   
      };     
      Console.WriteLine(message);
    }  
    record struct Reading(int Temperature, bool SmokeDetected, int PM25);
    record struct Status(Category Category, Reading Reading);
    enum Category
    {    
      Normal,
      Warning,
      Danger
    }
    

    ✅ .결론


    이 기능들은 이미 추가되었다.NET6 수량이 많음;그러나 이들 중 대다수는 아직 충분히 이용되지 않았다. (비록 이것은 RC 2 Preview이지만, 우리는 마이크로소프트가 다음 주 공식 발표가 며칠밖에 남지 않았기 때문에, 마이크로소프트가 그것들을 장기적으로 상세하게 토론하기를 기다릴 수밖에 없다.
    Microsoft는 다음을 나타냅니다.

    “It’s inspiring to see the new features in .NET 6 that will lay the foundation for what’s coming next. These are big-bet features that will push the platform forward in both obvious and non-obvious ways.”


    만약 네가 이 문장을 좋아한다면, 우리를 주목하는 것을 잊지 마라. 그러면 너는 이 문장을 처음 읽는 사람 중의 하나가 될 수 있다.그물
    만약 네가 이 글을 읽고 있다면, 이것은 네가 1%에 속한다는 것을 의미한다. 그들은 끝까지 읽고, 나에게 커피가 얼마나 있는지 알려준다☕ 만약 내가 커피를 많이 본다면, 너는 매일 계속 프로그래밍을 해야 한다☕ 나는 외로움을 느끼지 않을 것이다. 너는 나를 즐겁게 할 것이다!!!😃👍

    Dotnetsafer부터 본문을 읽어 주셔서 감사합니다. 저희 C# Blog에서 더 많은 정보를 얻을 수 있다는 것을 잊지 마세요.
    기억해라: 지금 너는 우리의 C# obfuscator을 무료로 시험해 볼 수 있다.C# Obfuscator Visual Studio Extension을 사용하여 Visual Studio에서 어플리케이션을 직접 보호할 수도 있습니다.그리고 그 전에 공부할 수 있어요.

    좋은 웹페이지 즐겨찾기