"event"关键字的用途

Thi*_*ngs 8 c# events delegates

嘿伙计们我最近一直在使用c#和事件,但我刚开始创建自己的事件并使用它们.我对使用event关键字的原因感到有点困惑,我只使用了委托来获得相同的结果.

public partial class Form1 : Form
{
    ServerConnection connection = new ServerConnection();

    public Form1()
    {
        InitializeComponent();
        connection.ref = new del(MethOne);
        connection.ref += new del(MethTwo);
    }

    public void MethOne(object message)
    {
        MessageBox.Show((string)message);
    }

    public void MethTwo(object message)
    {
        MessageBox.Show((string)message);
    }

}


public delegate void del(string message);



public class ServerConnection
{
    private TcpListener tcpListener;
    public del ref;

    private List<NetworkStream> clientList = new List<NetworkStream>();

    public ServerConnection()
    {
        this.tcpListener = new TcpListener(IPAddress.Any, 3000);
        ThreadStart startListening = new ThreadStart(ListenForClients);
        Thread startThread = new Thread(startListening);
        startThread.Start();
    }


    public void ListenForClients()
    {
        tcpListener.Start();
        ParameterizedThreadStart handleClient = new ParameterizedThreadStart(HandleClient);

        while (true)
        {
            TcpClient newClient = tcpListener.AcceptTcpClient();
            Thread handleClientThread = new Thread(handleClient);
            handleClientThread.Start(newClient);
        }
    }


    public void HandleClient(object newClient)
    {
        NetworkStream clientStream = ((TcpClient)newClient).GetStream();
        clientList.Add(clientStream);

        BinaryFormatter formatter = new BinaryFormatter();
        string message;

        while (true)
        {
            message = (string)formatter.Deserialize(clientStream);
            ref((string)message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Adr*_*der 8

看一下

C#活动与代表

event关键字是委托声明的修饰符,允许它包含在接口中,约束它从声明它的类中调用,为它提供一对可自定义的访问器(添加和删除)并强制签名委托(在.NET框架中使用时).


mlo*_*ske 6

event关键字允许您指定addremove操作内联的操作.

private Action _myEvent;

public event Action MyEvent
{
    add
    {
        Console.WriteLine("Listener added!");
        _myEvent += value;
    }
    remove
    {
        Console.WriteLine("Listener removed!");
        _myEvent -= value;
    }
}
Run Code Online (Sandbox Code Playgroud)