我觉得这是一个泛型,为什么叫泛型委托呢
时间: 2023-08-19 16:09:14 浏览: 45
你对于这段代码的理解是正确的,`UnityAction<T>`是一个泛型委托类型。这个委托类型可以接受任意类型为`T`的参数,并且没有返回值。泛型委托允许你在定义时不指定具体的参数类型,而在使用时再根据需要指定具体的类型。这样可以增加代码的灵活性和复用性,因为你可以将相同的委托类型用于多个不同的参数类型。因此,我们称之为泛型委托。在这个特定的代码中,`T`表示参数的类型,可以根据具体的使用情况进行替换。
相关问题
C# 委托泛型
C# 委托泛型(Generic Delegate)是一种泛型类型,它可以封装一个或多个泛型方法。与非泛型委托不同,泛型委托可以接受任何类型的方法作为参数,而不需要进行类型转换或强制转换。
泛型委托的语法格式如下:
```csharp
delegate TResult Func<in T, out TResult>(T arg);
```
其中,T 是输入参数的类型,TResult 是返回值的类型。Func 委托可以接受一个输入参数并返回一个结果。与 Action 委托不同,Func 委托必须指定返回值类型。
使用泛型委托可以在编写通用代码时提高代码的灵活性和可重用性。例如,可以使用 Func 委托来定义一个通用的排序方法,该方法可以接受任何类型的数组和排序规则作为参数。
winform 泛型委托
在WinForm开发中,我们可以使用泛型委托(Generic Delegate)来处理事件。泛型委托是一种通用的委托类型,可以用于任何类型的事件处理。它允许我们定义一个委托类型,该类型可以用于任何类型的事件处理,而不必为每种事件类型定义一个新的委托类型。
以下是一个使用泛型委托的示例:
```
//定义泛型委托类型
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
public class MyEventArgs : EventArgs {
public string Message { get; set; }
public MyEventArgs(string message) {
Message = message;
}
}
public class MyClass {
//定义事件
public event EventHandler<MyEventArgs> MyEvent;
//触发事件
public void RaiseEvent() {
MyEventArgs args = new MyEventArgs("Hello World!");
//调用事件处理方法
MyEvent?.Invoke(this, args);
}
}
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
MyClass myClass = new MyClass();
//订阅事件
myClass.MyEvent += MyEventHandler;
}
private void MyEventHandler(object sender, MyEventArgs e) {
MessageBox.Show(e.Message);
}
}
```
在上面的示例中,我们定义了一个泛型委托类型`EventHandler<TEventArgs>`,它接受两个参数:`sender`和泛型参数`TEventArgs`。然后我们定义了一个事件`MyEvent`,它使用泛型委托类型作为事件类型。在`MyClass`类中,我们触发了`MyEvent`事件,并传递了一个`MyEventArgs`类型的参数。在`Form1`类中,我们订阅了`MyEvent`事件,并定义了一个事件处理方法`MyEventHandler`来处理事件。当事件触发时,会自动调用`MyEventHandler`方法来处理事件。