C# 9 기능 목록
최상위 문
C#의 매우 간단한 프로그램은 다음과 같습니다.
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
하지만 C# 9를 사용하면 더 간단하게 만들 수 있습니다.
System.Console.WriteLine("Hello World!");
대상 유형 개체 생성
클래스가 있다고 가정해 보겠습니다.
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public Book()
{
}
public Book(string title, string author)
{
Title = title;
Author = author;
}
}
일반적으로 다음과 같은 객체를 생성합니다.
var book = new Book();
// or
Book book = new Book();
C#으로 우리는 다음을 할 수 있습니다:
Book book2 = new();
Book book3 = new("1", "A1");
초기화 전용 세터
클래스가 있다고 가정합니다
Book
.public class Book
{
public string Title { get; set; }
public string Author { get; set; }
}
초기화하는 동안 값을 설정할 수 있습니다. 동시에 모든 필드에 대한 setter가 있는 한 값을 변경할 수 있습니다.
var book = new Book { Author = "1", Title = "2" };
book.Title = "2";
초기화하는 동안에만 값을 설정하고 초기화 후에는 값을 제한하려는 상황을 상상해 보십시오.
C# 9
Init-only
기능이 작동합니다.public class Book
{
public string Title { get; init; }
public string Author { get; init; }
}
var book = new Book { Author = "1", Title = "2" };
book.Title = "2"; // compile error
관계형 및 논리적 패턴
관계형 패턴을 통해 프로그래머는 입력 값이 상수 값과 비교할 때 관계형 제약 조건을 충족해야 함을 표현할 수 있습니다.
public class Book{ public string Title { get; set; } public string Author { get; set; } public static decimal Postage(decimal price) => price switch { < 20 => 6.99m, >= 20 and < 40 => 5.99m, >= 40 and < 60 => 2.99m, _ => 0 };}
기록
수업이 있습니다:
public class Book{ public string Title { get; } public string Author { get; } public Book(string title, string author) { Title = title; Author = author; }}
그리고 우리가 책을 만들 수 있기를 원한다고 상상해 봅시다. 다음과 같이 할 수 있습니다.
var book = new Book("Title1", "Author1");
또한 우리는 객체를 직렬화하고 역직렬화하기를 원합니다.
var json = JsonSerializer.Serialize(book);Console.WriteLine(json);var book2 = JsonSerializer.Deserialize<Book>(json);var isEqual = book == book2;Console.WriteLine($"book == book2: {isEqual}"); // false
콘솔에서 직렬화 해제된 책이 직렬화된 책과 같지 않음을 알 수 있습니다. 어떻게 동일하게 만들 수 있습니까? equals 연산자를 재정의할 수 있습니다.
public static bool operator ==(Book left, Book right) => left is object ? left.Equals(right) : right is null;
==
연산자를 재정의하면 !-
연산자도 재정의해야 합니다.public static bool operator !=(Book left, Book right) => !(left == right);
그러나 아직 객체를 비교하기 위해 아무 것도 하지 않았으므로
Equals
메서드를 재정의해야 합니다.public override bool Equals(object obj) => obj is Book b && Equals(b);public bool Equals(Book other) => other is object && Title == other.Title && Author == other.Author;
그리고
GetHashCode
및 ToString
메서드를 재정의해야 합니다.public override int GetHashCode() => HashCode.Combine(Title, Author);public override string ToString() => $"{Title} - {Author}";
또한 클래스를 구현
IEquatable<T>
인터페이스로 만들어야 합니다.public class Book : IEquatable<Book>
마지막으로 우리는 단 하나의 간단한 작업을 위해 많은 코드를 작성해야 합니다. 전체 수업:
public class Book : IEquatable<Book>{ public string Title { get; } public string Author { get; } public Book(string title, string author) { Title = title; Author = author; } public static bool operator ==(Book left, Book right) => left is object ? left.Equals(right) : right is null; public static bool operator !=(Book left, Book right) => !(left == right); public override bool Equals(object obj) => obj is Book b && Equals(b); public bool Equals(Book other) => other is object && Title == other.Title && Author == other.Author; public override int GetHashCode() => HashCode.Combine(Title, Author);}
이제
Console.WriteLine($"book == book2: {isEqual}");
는 true
를 출력합니다.상용구 코드가 많이 있습니다.
또한 새 필드를 추가하면 모든 메서드를 업데이트해야 합니다.
C# 9
를 사용하면 동일한 동작에 대해 record
유형을 사용할 수 있습니다. 클래스가 구조인 것처럼 동작을 만들 수 있습니다.record Book(string Title, string Author)
확장 부분 메서드
이제 부분 메서드에 수정자와 반환 값을 사용할 수 있습니다.
public partial class Book{ public string Title { get; set; } public string Author { get; set; } public decimal Price { get; set; } private partial decimal SetPrice();}public partial class Book{ private partial decimal SetPrice() { return 0m; }}
공변량 반환
C# 9
에서 재정의된 메서드에서 파생된 형식을 반환할 수 있습니다.public class Book{ public string Title { get; set; } public string Author { get; set; }}public class CollectionBook : Book{ public string Edition { get; set; }}public abstract class BookService{ public abstract Book GetBook();}public class CollectionBookService : BookService{ public override CollectionBook GetBook() { return new CollectionBook(); }}
코드: https://github.com/platinum-team/tech-talk-csharp9-features
건배!
Reference
이 문제에 관하여(C# 9 기능 목록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andreisfedotov/list-of-c-9-features-1eao텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)