Event chuẩn .Net trong c#

   class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.Unicode;

        HocSinh hs = new HocSinh();
        hs.NameChanged += Hs_NameChanged;
        hs.Name = "Tên lần 1";
        hs.Name = "Tên lần 2";
        hs.Name = "Tên cuối";

        Console.ReadLine();
    }

    private static void Hs_NameChanged(object sender, EventArgs e)
    {
        Console.WriteLine("Tên có thay đổi.");
    }
}

public class HocSinh
{
    private string _Name;
    public string Name
    {
        get => _Name;
        set
        {
            _Name = value;
            OnNameChanged();
        }
    }


    private event EventHandler _NameChanged;
    public event EventHandler NameChanged
    {
        add
        {
            _NameChanged += value;
        }
        remove
        {
            _NameChanged -= value;
        }
    }

    void OnNameChanged()
    {
        if(_NameChanged != null)
        {
            _NameChanged(this, new EventArgs());
        }
    }
}

Ở dòng _NameChanged(this, new EventArgs()); đối số this này có ý nghĩa là gì?

Thế bạn có biết this đại diện cho cái gì không?
Thật kì lạ khi bạn học đến sự kiện và hàm ủy nhiệm (delegate) mà chưa biết this đại diện cho cái gì.
Có thể bạn quên rồi đấy.

3 Likes

Mình nghĩ this là đại diện cho class HocSinh, nhưng trong trường hợp này tham số của _NameChanged lần lượt là kiểu dữ liệu object và EventArg, vậy tham số đầu tiên là sao?

this đại diện cho thực thể hiện tại của lớp HocSinh.
Khi truyền this vào như thế có nghĩa là tham số thứ nhất (object sender) sẽ được truyền đến Hs_NameChanged(object sender, EventArgs e), sender sẽ là đối tượng kiểu HocSinh.
Theo đoạn mã thì sender chính là HocSinh hs = new HocSinh()Main().
Bạn hãy thử xem:

    private static void Hs_NameChanged(object sender, EventArgs e)
    {
        Console.WriteLine("Tên có thay đổi. Tên mới là: " + ((HocSinh)sender).Name); // ép kiểu về HocSinh và gọi đến thuộc tính Name.
    }
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?