在一行中声明和定义一个委托(不使用 Action/Func)
Posted
技术标签:
【中文标题】在一行中声明和定义一个委托(不使用 Action/Func)【英文标题】:Declare and define a delegate in one line (without using Action/Func) 【发布时间】:2016-09-04 10:57:46 【问题描述】:有没有办法缩短以下内容:
public class Test
/* declares a delegate type (named MyDelegateType) which has a single parameter of
type float and doesn't return anything. */
public delegate void MyDelegateType(float f);
/* defines a reference to an object of type MyDelegateType */
private MyDelegateType MyDelegateRef;
... // say we have a Property to set and get MyDelegateRef, and a method
// for executing its target
成一行,不使用 Action/Func 类型?
我想了解是否有与我们在 C++(或 C)中可以使用函数指针执行的操作的等效项:
class Test
/* defines a pointer (named MyFP) to a function with a single
parameter of type float, and doesn't return anything */
void(*MyFP)(float);
... // say we have a Setter & Getter functions, and an Execute
// function for executing MyFP
【问题讨论】:
你为什么不想要一个“Func”?据我所知,C++ 知识非常有限,函数指针也是某种“Func”类型。 为什么没有那些能满足你需求的类型? @ThomasSchremser,函数指针可以用作Action
或 Func
类型。不是我不想要Action
/Func
,这个问题纯粹是为了理解句法的可能性。
C# 语言通常不允许在声明该类型对象的同一语句中声明一个类型。在 C++ 中工作,但很难诊断编译器错误的永无止境的来源,特别是如果声明位于头文件中并且右大括号后缺少分号。每个人都忘记了。 C# 团队由非常有经验的程序员组成,他们非常了解 C++,包括所有的陷阱。并旨在避免它们。使用 Func 类型是可行的,因为该类型当然已经声明了。你会很容易习惯的。
只是添加此作为相关参考:Eric Lippert 的 post 关于(不)支持 C# 中的函数指针
【参考方案1】:
不,这就是框架中包含 Action<T>
和 Func<T>
的原因。
【讨论】:
以上是关于在一行中声明和定义一个委托(不使用 Action/Func)的主要内容,如果未能解决你的问题,请参考以下文章
委托delegate,Action,Func,Predicate