このコードはインターフェイスデリゲートとクラスのハードディスクで構成されており、コードは完全に機能していますが、デリゲート、クラス、インターフェイス、およびイベントがどのように機能するかを理解しようとしていますが、率直に言って、これは私のコードではありませんが、そこから学びたいと思っていますイベントを呼び出す方法と、プログラマーがイベントを記述した場所、または以下のコードでイベントを宣言した場所について厳密に説明しています。間違っている場合は修正してください
よくわかりませんが、これはsendeventまたはdelegateクラスです
namespace ConsoleApplication4
{
delegate void SendEventHandler(object sender, SendEventArgs args);
class SendEventArgs : EventArgs
{
public byte[] Buf;
public int ByteCount;
public object whom;
public SendEventArgs(byte[] Buf, int ByteCount, object whom)
{
this.Buf = Buf;
this.ByteCount = ByteCount;
this.whom = whom;
}
}
}
私自身の理解では、これはインターフェイス名 isata です
interface ISata
{
//voltage +12В, +5В или +3.3В
Double Voltage { get; }
//transfer rate (bytes / sec)
Int64 DataTransferRate { get; }
event SendEventHandler SendEvent;
void Send(byte[] Buf, int ByteCount, object whom);
void OnReceive(object sender, SendEventArgs args);
void ConnectWith(ISata Device);
void Disconnect(ISata Device);
これはクラスのハードディスクです
namespace ConsoleApplication4
{
class HardDisk : ISata
{
string Id = "no id";
public Double Voltage
{
get
{
return 12;
}
}
public Int64 DataTransferRate
{
get
{
return 629145600;
}
}
public event SendEventHandler SendEvent;
public HardDisk(string Id)
{
this.Id = Id;
}
public override string ToString()
{
return "HD{" + Id + "}";
}
public void ConnectWith(ISata Device)
{
Device.SendEvent += OnReceive;
this.SendEvent += Device.OnReceive;
Console.WriteLine(this + " connected with device " + Device);
}
public void Disconnect(ISata ConnDev)
{
if (ConnDev != null)
{
this.SendEvent -= ConnDev.OnReceive;
ConnDev.SendEvent -= OnReceive;
Console.WriteLine(this + " disconnected from device " + ConnDev);
}
}
public void Send(byte[] Buf, int ByteCount, object whom)
{
if (SendEvent != null)
{
SendEvent(this, new SendEventArgs(Buf, ByteCount, whom));
}
}
public void OnReceive(object sender, SendEventArgs args)
{
if(args.whom == this)
Console.WriteLine(this + " received data from " + sender);
}
}
}
私の質問は、彼がイベントを宣言した場所と、イベントが呼び出された場所です。