C # 8.0의 "Nullable 참조 유형"언어 기능을 빠르게 이해

Visual C # 8.0에서는 컴파일러에서 제공하는 강력한 함수를 통해 Nullable 참조 형식 (Nullable 참조 형식)을 도입하여 개발자가 null 참조로 인해 발생하는 코드 문제를 최대한 피할 수 있도록합니다. 여기서는 nullable 참조 유형의 기본 내용을 간략하게 소개합니다.
이 언어 기능을 처음 접했을 때 이해하기 쉽지 않을 수 있습니다. 참조 형식은 본질적으로 nullable이 아닌데, 특히 "nullable 참조 형식"이라는 개념을 도입해야하는 이유는 무엇입니까? 실제로 컴파일러의 관점에서 개발자는 널 참조로 인한 코드 오류를 최소화하기 위해 프로그래밍시 변수가 널일 수 있는지 여부를 고려해야합니다 .
다음 클래스가 있다고 가정합니다.

class Student
{
    public Student(string name, DateTime dayOfBirth)
        => (Name, DayOfBirth) = (name, dayOfBirth);

    public string Name { get; set; }

    public DateTime DayOfBirth { get; set; }

    public string Notes { get; set; }
}

이 클래스는 "학생"엔티티의 기본 정보를 정의합니다. 단순화를 위해 논의해야 할 몇 가지 속성 만 여기에 나열합니다.

  • 이름 : 학생의 이름
  • DayOfBirth : 학생 생일
  • 참고 : 학생 정보에 대한 참고 사항

모든 학생 중에서 비고가있는 모든 학생을 찾고 이름별로 모든 학생을 정렬하는 두 가지 작업이 있다고 가정합니다 .C #에서 Linq를 구현하는 것은 쉽습니다.

var studentsHasNotes = students.Where(s => s.Notes.Length > 0);

만큼 잘:

var orderedStudents = students.OrderBy(s => s.Name);

지금까지는 문제가 없으며 프로그램이 정상적으로 실행될 수 있습니다. 그러나주의 깊은 코드 검토는 비고가있는 모든 학생의 코드 (즉, 위의 첫 번째 코드)에서 null 참조 예외가있을 수 있음을 찾는 것이 어렵지 않습니다. "학생"엔터티의 경우 The Notes 속성은 null 일 수 있습니다.
이제 "Nullable Reference Type"의 언어 기능을 엽니 다.이를 여는 두 가지 주요 방법이 있습니다. csproj 프로젝트 파일을 편집하여 프로젝트 수준에서 설정하거나 #nullable 미리 컴파일 된 지시문을 사용하여 다음을 수행 할 수 있습니다.

  • csproj 프로젝트 파일을 편집하고 추가합니다 <Nullable>enable</Nullable>.
    영상
  • 이것은 #nullable 미리 컴파일 된 명령어에 의해 달성됩니다. 코드에서 필요한 곳에 #nullable 명령어를 추가하기 만하면됩니다.
    영상

"nullable reference type"언어 기능을 활성화하면 위의 Student 클래스 생성자에 경고가 나타나 생성자가 실행될 때 nullable이 아닌 "Notes"속성에 비어 있지 않아야한다는 메시지가 표시됩니다. null 값의 경우 nullable 문자열 유형으로 설정하는 것이 좋습니다. 컴파일러에서 이름 속성 대신 Notes가 비어있을 수 있다는 메시지 만 표시하는 이유는 무엇입니까? 생성자에 Name이 할당 되었기 때문에 Student 개체에 대해 Name이 비어있을 수 없으며 Notes는 그렇지 않습니다.

영상

이름은 비워 둘 수 없습니까? 문자열 유형 아닌가요? 코드에서 비어 있으면 어떻게됩니까? 걱정하지 마십시오. 컴파일러는 이러한 상황을 허용하지 않습니다.

영상

여기서는 Notes 속성을 string?유형으로 설정하므로 Student 개체에 Notes 데이터가 없도록 허용하기 때문에 생성자에 대한 경고 메시지가 사라 졌음을 알 수 있습니다. 그러나 "설명 정보가있는 모든 학생 찾기"에서 작업시 Notes가 비어있을 수 있다는 경고가 다시 나타납니다.

영상

따라서 nullable 참조 유형의 언어 기능이 활성화 된 후 Student 유형에서 각 참조 유형의 속성을주의 깊게 검토하여 실제 응용 프로그램에서 비어있을 수 있는지 그리고 가능한지 확인해야합니다. 비어있는 경우 nullable 참조 형식을 사용하여 특성을 정의하면 컴파일러가 null 참조가있을 수있는 위치를 분석하는 데 도움이됩니다.

위의 "설명이있는 모든 학생 찾기"예제에서 Notes가 확실히 비어 있지 않다고 생각하는 경우 "!"연산자를 사용하여 다음과 같은 컴파일러 경고 메시지를 재정의 할 수도 있습니다.

영상

이제 널리 사용되는 .NET 오픈 소스 프레임 워크는 기본적으로 nullable 참조 유형을 지원하며, 오픈 소스 프레임 워크 개발자 인 경우 프레임 워크에서이 언어 기능을 활성화하여 가능한 한 null을 방지하는 것이 좋습니다. 예를 들어 코드에서 nullable 참조 유형 기능을 활성화 한 경우 Newtonsoft.Json의 JsonConverter 클래스에서 상속 할 때 nullable 참조 유형의 함수 오버로딩을 사용해야한다는 것을 알 수 있습니다.

영상

그러나 nullable 참조 유형 기능을 활성화하지 않으면 Newtonsoft.Json의 JsonConverter 클래스에서 상속 할 때 오버로드 된 함수의 서명이 이전과 동일하다는 것을 알 수 있습니다.

영상

좋습니다. C # 8.0의 "Nullable Reference Type"에 대해서는 기본적으로 주요 요점과 사용법을 요약 했어야하는데, 이는 일상적인 개발에 충분해야합니다.

추천

출처blog.csdn.net/nidongla/article/details/114933740