C#:使用布尔返回类型创建组播委托 [英] C#:Creating Multicast delegate with boolean return type
问题描述
谢谢
public delegate bool Foo(DateTime timestamp);
这是如何使用您描述的签名声明一个委托。所有代表都是潜在的多播,它们只需要初始化。例如:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now<时间戳
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now>时间戳
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
调用 fAll
,在这种情况下会调用 IsGreaterThanNow()
和 IsLessThanNow()
。
这样做不能让您访问每个返回值。你得到的是返回的最后一个值。如果要检索每个值,您将必须手动处理多播,如下所示:
列表< bool> returnValues = new List< bool>();
foreach(foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}
Hai Techies,
in C#, how can we define the multicast delegate which accepts a DateTime object and return a boolean.
Thanks
public delegate bool Foo(DateTime timestamp);
This is how to declare a delegate with the signature you describe. All delegates are potentially multicast, they simply require initialization. Such as:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now < timestamp;
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now > timestamp;
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
Calling fAll
, in this case would call both IsGreaterThanNow()
and IsLessThanNow()
.
What this doesn't do is give you access to each return value. All you get is the last value returned. If you want to retrieve each and every value, you'll have to handle the multicasting manually like so:
List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}
这篇关于C#:使用布尔返回类型创建组播委托的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!