我对C#中的Actions的理解是它们只是委托的特定版本,即没有参数且没有返回类型的委托.
如果我创建这样的类......
class TrainSignal
{
public delegate void TrainsAComing();
public void HerComesATrain()
{
TrainsAComing();
}
}
Run Code Online (Sandbox Code Playgroud)
...它不会编译,因为我还没有创建委托的实例.但是,如果我将委托定义替换为如下所示的Action,则编译:
class TrainSignal
{
public Action TrainsAComing;
public void HerComesATrain()
{
TrainsAComing();
}
}
Run Code Online (Sandbox Code Playgroud)
我想也许一个Action可能是静态的或类似的东西(从而允许我们通过它的名称来调用它而不实例化它)但似乎并非如此.
谁能解释为什么第二个代码块是合法的?
这条线
public delegate void TrainsAComing();
Run Code Online (Sandbox Code Playgroud)
定义一个名为 的公共委托类型TrainsAComing,嵌套在您的类中。这将允许用户创建 类型的委托TrainSignal.TrainsAComing,但TrainSignal没有成员来存储此类委托的实例。
换句话说,委托的声明不定义委托类型的成员。您需要另一个声明:
class TrainSignal
{
public delegate void TrainsAComing(); // The delegate type
public TrainsAComing OnTrainsAComing; // The member of delegate type
public void HerComesATrain()
{
OnTrainsAComing();
}
}
Run Code Online (Sandbox Code Playgroud)
Action另一方面,已经是一种类型,类似于delegate TrainsAComing您的示例。因此,定义
public Action TrainsAComing;
Run Code Online (Sandbox Code Playgroud)
使TrainsAComing成员TrainSignal能够存储委托。
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |