C# 10 로드맵 ✅ 새로운 기능 노출
🔄 C# 10의 가능한 새로운 기능 정보
며칠 전 Microsoft의 C# 언어 수석 디자이너인 Mads Torgersen은 C# 10에 포함될 멋진 새 기능에 대해 설명했습니다.
오픈 소스 소프트웨어의 가장 큰 이점 중 하나는 시간이 지남에 따라 프로젝트가 어떻게 발전하는지 확인할 수 있다는 것입니다. 이를 통해 GitHub의 진행 상황을 추적하고 주요 뉴스를 볼 수 있으므로 동일한 C#을 참조하려고 합니다.
✅ 가능한 새로운 C# 10 기능
🔼 C# 10 필수 속성
이전에는 개체가 올바르게 생성되었는지 확인하기 위해 항상 클래스 생성자가 사용되었습니다. 오늘날 우리는 이 레지스트리 👇에서와 같이 자체 구현 속성과 같은 더 가벼운 구조를 사용할 수 있습니다.
public record Employee
{
public string Name { get; init; }
public decimal Salary { get; init; }
public DateTime Date{ get; init; }
}
경량 개체를 인스턴스화할 때 우리는 항상 개체 이니셜라이저 구문을 사용하여 빠르게 수행하는 것을 선호합니다 👇
var theNewGuy = new Employee
{
Name = "Chris Smith",
Salary = 1000m,
Date = DateTime.Now()
};
괜찮아
But what if the object doesn't make sense until some properties are set? 🤔
생성자를 추가할 수 있지만 더 많은 표준 텍스트를 추가해야 합니다. 매개변수 값을 속성에 복사하는 것과는 별개입니다.
C# 10에서는 이 문제가 사라집니다 👇
public record Employee
{
public required string Name { get; init; }
public decimal Salary { get; init; }
public DateTime Date{ get; init; }
}
🔼 C# 10 파일 수준 네임스페이스
모든 C# 프로그래머는 가장 단순한 프로그램도 네임스페이스에 블록 구조를 사용한다는 것을 알고 있습니다 👇
namespace HelloWorld
{
class Hello
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello World!");
}
}
}
이것은 단순히 블록을 중첩하여 네임스페이스를 겹칠 수 있으므로 매우 유연합니다. 유일한 문제는 Java 또는 JavaScript와 같은 다른 언어와 비교할 때 약간의 추가 들여쓰기를 추가한다는 것입니다.
이 시점에서 우리가 스스로에게 묻는 질문은 다음과 같습니다.
Is it possible to keep that functionality, but at the same time reduce excess indentation? 🤔
네 ✅
How is it possible? 🤔
파일 범위 네임스페이스를 입력할 때 들여쓰기를 제거하여 전체 파일에 자동으로 적용되는 기본 네임스페이스를 설정할 수 있다는 것이 방금 열렸습니다 👇
NameSpace HelloWorld; public class Hello
{
static void Main (string [] args)
{
System.Console.WriteLine ("¡Hello World!");
}
}
파일 범위 네임스페이스를 사용하여 파일에 네임스페이스 블록을 추가하고 중첩된 네임스페이스를 생성한다고 가정합니다.
간단한 예를 살펴보겠습니다 👇
namespace Company.Product;
Company.Product.Componentnamespace Component{
}
🔼 C# 10 필드 키워드
상당한 시간이 지난 후 전체 C# 개발 팀이 코드를 최적화했습니다. 자체 배포 속성은 훌륭하지만 지금까지만 사용할 수 있습니다.
여러 번 클래스에 지원 필드를 추가하고 평소와 같이 속성 메서드를 작성해야 합니다.
C# 10의 새로운 기능에는 자동으로 생성된 지원 필드를 노출하는 field 키워드가 있는 새로운 백도어가 있습니다.
public record Employee
{
public required string Name { get; init; }
public decimal Salary { get; init; }
public DateTime Date{ get; init => field = value.Date(); }
}
청소 코드는 매우 훌륭하고 매우 간단하며 거의 선언적입니다. 가장 좋은 점은 field 키워드를 사용하여 set, init 또는 get 등 모든 프로세스에서 백업 필드에 액세스할 수 있다는 것입니다.
속성이 일반 클래스에서 어떻게 유효한지 봅시다 👇
private string _firstName;public string Name
{
get
{
return _tName;
}
set
{
if (value.Trim() == "")
throw new ArgumentException("No blank strings");_Name = value;
}
}
이제 자동 구현 속성 및 필드를 사용할 수 있습니다 👇
public string tName {get;
set
{
if (value.Trim() == "")
throw new ArgumentException("No blank strings"); field = value;
}
}
백업 필드를 선언할 필요가 없기 때문에 데이터 유형을 변경할 필요가 없는 경우입니다.
🔼 C# 10 개체 초기화
C# 팀이 집중하고 있는 목표 중 하나는 개체 초기화를 더 쉽게 만드는 것입니다. 그렇기 때문에 필요에 따라 클래스, 구조체, 레코드 또는 레코드 구조체의 속성에 플래그를 지정할 수 있습니다. 해당 속성을 반드시 입력해야 합니다.
보자 👇
class Person
{
public required string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
이는 생성자를 통해 수행하거나 개체 초기화를 통해 수행할 수 있습니다. 아래의 두 클래스 정의는 동일합니다. 필수 키워드로 작성하면 Name 속성을 설정하지 않고 Person을 인스턴스화할 수 없습니다.
컴파일러는 오류를 발생시키고 컴파일에 실패합니다 👇
class Person
{
public Person(string name) => Name = name;
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
속성을 더욱 개선하기 위해 지원 필드를 모두 제거할 수 있습니다. 새 키워드 필드는 해당 지원 필드에 대한 액세스를 제공합니다.
이것은 초기화 전용 속성으로 두 setter 모두에 사용할 수 있습니다.
class Person
{
public string Name { get; init => field = value.Trim(); }
public DateTime DateOfBirth { get; set => field = value.Date; }
다음 버전에서도 몇 가지 멋진 작은 개선 사항이 있을 것입니다. 하나는 with 연산자가 익명 유형도 지원한다는 것입니다.
var ByteHide = new
{
Name = "ByteHide",
Email = "[email protected]"
};
var bar = ByteHide with {Name = "Bar"};
🟢 결론:
이 기사를 마무리하기 위해 ByteHide에서 우리의 결론은 C#이 아직 앞으로 몇 년이 남았고 프로그래밍 작업을 훨씬 더 쉽고 최적으로 만들기 위해 추가해야 할 것이 여전히 많다는 것입니다.
어떻게 생각해?🤔
Reference
이 문제에 관하여(C# 10 로드맵 ✅ 새로운 기능 노출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bytehide/c-10-roadmap-exposing-new-features-2ifg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)