Bài viết

Kho tài liệu và bài viết được chia sẻ, đánh giá bởi cộng đồng

Init only setters C# 9.0

Minh Sự đã tạo 17:37 03-03-2022 3.962 lượt xem 0 bình luận

Nội dung bài viết

Giới Thiệu

C#  9.0 đã ra mắt và giới thiệu một vài tính năng mới, trong đó tính năng Init only setters là một tính năng khá hữu ích được Microsoft trang bị cho C# ở phiên bản 9.0 cùng mình khám phá nhé.

Object Initializer

Trong C# khi khởi tạo một đối tượng chúng ta thường xuyên dùng đến Object initializer vì cách này khá gọn gàng, xem ví dụ bên dưới nhé.

class Program
    {
        static void Main(string[] args)
        {
            // this is Object initializer
            var student = new Student() { FullName = "Kter", Age = 24 };
        }
    }

    public class Student
    {
        public string FullName { get; set; }
        public int Age { get; set; }
    }

Nhưng đối với cách khởi tạo này ở trường hợp sau sẽ không dùng được, nếu chúng ta gán giá trị khởi tạo cho Property dạng Readonly thì không dùng cách khởi tạo này được.

Init only setters

Khi sử dụng C# 9.0 sẽ cho phép bạn khai báo các thuộc tính dạng Readonly như sau.

public class Student
    {
        public string FullName { get; init}
        public int Age { get; set; init}
    }

Như các bạn đã thấy từ khoá init đã được thay thế cho Setter và nó cũng giúp chúng ta sử dụng được Object initializer khi gán giá trị khởi tạo cho Readonly Property . Cùng xem ví dụ bên dưới nhé.

    class Program
    {
        static void Main(string[] args)
        {
            // this is Object initializer
            var student = new Student() { FullName = "Kter", Age = 24 };
        }
    }

    public class Student
    {
        public string FullName { get; init}
        public int Age { get; set; init}
    }

Lưu ý, nếu chúng ta đã khai báo cho Setter của Property là dạng Init thì chúng ta sẽ không gán lại giá trị cho Property này được nữa.

class Program
    {
        static void Main(string[] args)
        {
            // this is Object initializer
            var student = new Student() { FullName = "Kter", Age = 24 };
            student.FullName = "Kter Lỏd"; // Error! CS8852.
        }
    }

    public class Student
    {
        public string FullName { get; init}
        public int Age { get; set; init}
    }

 

Nội dung bài viết

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất