Properties trong c#

ý mình là như này vd đây là một đoạn code java nè

public class Phong {
    private String id;
    private String kind;
    private String Status;
    private float mark;

    public Phong() {
    }

    public Phong(String id, String kind, String Status, float mark) {
        this.id = id;
        this.kind = kind;
        this.Status = Status;
        this.mark = mark;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String Status) {
        this.Status = Status;
    }

    public float getMark() {
        return mark;
    }

    public void setMark(float mark) {
        this.mark = mark;
    }
    
}

trong c# mình cũng muốn làm một cái tương tự như này nhưng có cách nào insert code được vào ko bạn

thì viết y chang thôi mà bạn, đổi String thành string là được rồi

public class Phong
    {
        private string ID;
        private string Kind;
        private string Status;
        private float Mark;
        Phong(string NewID, string NewKind, string NewStatus, float NewMark)
        {
            ID = NewID;
            Kind = NewKind;
            Status = NewStatus;
            Mark = NewMark;
        }
        public string GetID()
        {
            return ID;
        }

        public void SetId(string NewID)
        {
            ID = NewID;
        }

        public string GetKind()
        {
            return Kind;
        }

        public void SetKind(string NewKind)
        {
            Kind = NewKind;
        }

        public string GetStatus()
        {
            return Status;
        }

        public void SetStatus(string NewStatus)
        {
            Status = NewStatus;
        }

        public float GetMark()
        {
            return Mark;
        }

        public void SetMark(float NewMark)
        {
            Mark = NewMark;
        }
    }

Mình là mình rất ít khi dùng this. vì mình thấy cái đó làm xấu code ra :smiley: Nên mình có thói quen đặt biến cục bộ với biến toàn bộ nó khác nhau cho dễ nhìn

Tự viết đê còn gì nữa ? C# nó đã tiến hoá hẳn hơn 1 bước thế còn không muốn lại muốn khổ dâ… à :smile:

bước tự viết code hả anh

đùa thế ko có cách nào insert hả bác hay cứ thế mà viết thôi à

Đúng vậy rồi còn gì nữa. Sau này cậu sẽ thấy việc tách thành 2 method là việc rất là vớ vẩn trong C#. Vì nó sẽ bị mất đi rất nhiều chức năng so với một properties bình thường trong C#. Tóm lại là làm thế không được cái lợi lộc gì cả, chỉ mệt xác thôi :stuck_out_tongue:

đại ca cho cái vd cái nào

đây là bên netbean nó tự insert vào mà bác

Ví dụ 1:
Khi kéo thả một cái Label vào Form. Nhìn bảng properties có rất nhiều property. Chỉnh thông số phát thì label trên Form thay đổi liền. Sau này cậu thiết kế một cái để kéo vào Form mà dùng 2 hàm thì còn lâu mới có cái đó.
Ví dụ 2:
Nếu dùng công nghệ WPF ( thế hệ sau của Winform ) thì có một khái niệm là databinding. Người ta sẽ liên kết dữ liệu giữa tầng này với tầng kia. Viết 2 method xong tự đi mà viết các hàm update, chắc cũng phê :smile:

property chỉ là một khái niệm thôi, và C# đã cụ thể hóa khái niệm property qua cú pháp khai báo của nó. Phần về netbean thì nó là một IDE nên việc nó tự gen property cho bạn cũng là chuyện dễ hiểu.

Properties are an extension of fields and are accessed using the same syntax. They use accessors through which the values of the private fields can be read, written or manipulated. đây là định nghĩa của cái này trên trang này https://www.tutorialspoint.com/csharp/csharp_properties.htm tức là nó sẽ dùng để truy cập vào các biến private or lấy dữ liệu từ đó ra đúng ko bạn

Nói chung là khi nào mình tìm mỏi mắt trong bảng property không thấy property hoặc event đó thì mới viết thôi. Mà nếu class do bạn tự tạo ra thì sẽ không có property phải viết code, còn delegate từ class có sẵn thì cũng chỉ có property có sẵn thôi. Property nó là tự sinh code trong designer mà

Có thể cho là như vậy.
Trong trang web bạn đưa có nói về khái niệm của property trong C#. Theo mình biết thì C# làm đơn giản hóa vấn đề thao tác với các biến được ẩn giấu trong lớp. Trước đó thì người ta sẽ phải viết các phương thức setter, getter.

Với các phiên bản C# từ 3.0 (nếu mình nhớ không nhầm) thì việc khai báo properties còn đơn giản hơn nhiều

public class Phong {
    private string id;
    private string kind;
    private float mark;

    public Phong() {
    }

    public string Id{get;set;}
    public string Name{get;set;}
    public float Mark{get;set;}
}

Hoặc đơn giản hơn nữa

 public class Phong {
            public string Id{get;set;}
            public string Name{get;set;}
            public float Mark{get;set;}
            public Phong() 
            {
            }
    }

Lúc này thì khỏi cần khai báo luôn cả biến :))))

Học và hiểu sâu C# sẽ biết khi dùng properties dạng {get;set;} thì compiler sẽ tự sinh biến cục bộ, không cần viết kiểu giả cầy Java này làm gì.

https://msdn.microsoft.com/en-us/library/bb384054.aspx

Chỉ nên dùng biển cục bộ trong một số trường hợp cần validation hay xử lý v…v thôi.

bạn làm việc với c# thì đừng nên lôi mấy cái giả cầy của java sang, sẽ thấy khó chịu vì bên c# cú pháp bị cắt gọt đi cho tiện hơn rồi. Thế nên nó mới là 2 ngôn ngữ, giống lắm chỗ nhưng cũng khác lắm chỗ

Sao anh em lại cứ gọi kiểu của Java là giả cầy thế nhỉ. Có bức xúc gì không nhưng mà tại nghe nói vậy lại lên cơn thèm :))))

Vì kiểu đó chỉ dùng trong Java, ko bao giờ dùng trong C# nên gọi là giả cầy chứ sao ;))

1 Like

Hi Đỗ NhiênDo_Nhien.
Cái tự thêm get-set mà bạn nói có lẽ là chức năng thêm của IDE (như eclipse).
Còn việc get set thì trong C# cung cấp cái {get; set;} Như mọi người đã viết và nó gần như thành dặc trưng của C#. Nhập gia tuy tục thôi.
Một số ý kiền thì cho rằng nó làm code ngắn gọn nhưng vẫn đủ trặt trẻ có thể public, private, protected v.v.v. kế thừ ghi dè các kiểu. Tuy nhiên có một số ý kiến cho rằng nó làm mất tính đóng gói, cũng như làm ngôn ngữ trở nên cồng kềnh khó hiểu hơn. C# còn có khá nhiều đồ chơi kiểu như vậy nữa @_@!
VD

public static IEnumerable<int> ComputePower(int number, int exponent)
    {
	int exponentNum = 0;
	int numberResult = 1;
	while (exponentNum < exponent)
	{
	    numberResult *= number;
	    exponentNum++;
	    yield return numberResult;
	}
    }

Sao lại mất tính đóng gói nhể :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?