gpt4 book ai didi

c# - 委托(delegate)声明

转载 作者:行者123 更新时间:2023-11-30 15:46:20 26 4
gpt4 key购买 nike

嗨我在以下代码片段中总结了我的问题。在第一个代码中,我在同一个类中声明了委托(delegate)和事件,而在代码 2 中,我在单独的类中声明了委托(delegate)和事件。

代码 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
delegate void Greeting(string s);
event Greeting myEvent;
void OnFire(string s)
{
if (myEvent != null)
myEvent(s);

}
static void Main(string[] args)
{
Program obj = new Program();
obj.myEvent += new Greeting(obj_myEvent);
obj.OnFire("World");
}

static void obj_myEvent(string s)
{
Console.WriteLine("Hello " + s + "!");
}
}
}

代码 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateDemo obj = new DelegateDemo();
obj.myEvent+=new DelegateDemo.Greeting(obj_myEvent);
obj.OnFire("World");
}

static void obj_myEvent(string s)
{
Console.WriteLine("Hello "+s +"!");
}
}
}

DelegateDemo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
public class DelegateDemo
{
public delegate void Greeting(string s);
public event Greeting myEvent;
public void OnFire(string s)
{
if (myEvent != null)
myEvent(s);

}
}
}

现在我有一个问题。这两个代码片段之间是否存在差异(如线程安全、性能)?

最佳答案

唯一的区别似乎是使用了一个单独的类。所以不会:只要方法和类型可访问,功能差异就很小。

作为旁注,您可能需要考虑 Action<string>对于接受 string 的代表并返回 void , 但还要注意事件一般应该遵循(object sender, SomeEventArgsClass e)模式(其中 SomeEventArgsClass:EventArgs ,也许还使用 EventHandler<T> )

关于c# - 委托(delegate)声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com