首页 / C# / 使C#方法“实现”委托
使C#方法“实现”委托
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使C#方法“实现”委托,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2007字,纯文字阅读大概需要3分钟。
内容图文
![使C#方法“实现”委托](/upload/InfoBanner/zyjiaocheng/802/5918ff1d8cd04003982f823983367dff.jpg)
有没有人知道C#中强制方法“实现”委托的方法?
考虑这个大大简化的例子:(松散地基于我遇到的现实世界场景)
private delegate int ComputationMethod(int termA, int termB, int termC, int termD);
private int computationHelper(int termA, int termB, int termC, int termD, ComputationMethod computationMethod)
{
//Some common logic^
int answer = computationMethod(termA, termB, termC, termD);
//Some more common logic^
return answer;
}
public int ComputeAverage(int termA, int termB, int termC, int termD)
{
//^^
return computationHelper(termA, termB, termC, termD, computeAverage);
}
public int ComputeStandardDeviation(int termA, int termB, int termC, int termD)
{
//^^
return computationHelper(termA, termB, termC, termD, computeStandardDeviation);
}
//Is there some way to force this method's signature to match ComputationMethod?
private static int computeAverage(int termA, int termB, int termC, int termD)
{
//Implementation omitted
}
//Is there some way to force this method's signature to match ComputationMethod?
private static int computeStandardDeviation(int termA, int termB, int termC, int termD)
{
//Implementation omitted
}
^ – 假设无法从^^调用此逻辑.
在这个例子中,我基本上喜欢“强制”方法符合ComputationMethod签名,就像接口强制类实现某些方法一样.相当于:
private static int computeAverage(int termA, int termB, int termC, int termD) : ComputationMethod
{
//Implementation omitted
}
是的,显然我可以复制并粘贴方法签名,但从概念上讲,这些ComputationMethod的实现可能在一个完全不同的类中,而无法访问源.此外,如果某人随后出现并更改了应该符合某个委托的方法签名,则源代码将会中断,但它可能会在完全不同的模块中静默破坏.
谢谢你的帮助.
解决方法:
C#不支持此功能.
但是,您可以通过简单地将方法放入委托来模拟它:
static readonly ComputationMethod _ForceCompliance = ComputeAverage;
private static int ComputeAverage(int termA, int termB, int termC, int termD) { ... }
更改方法或委托签名将导致编译器错误超出方法一行.
(使用实例方法执行此操作需要构造函数调用)
为了提高效率,您可以在未使用的嵌套类和/或#if DEBUG中执行此操作.
无论哪种方式,请务必留下解释性评论.
内容总结
以上是互联网集市为您收集整理的使C#方法“实现”委托全部内容,希望文章能够帮你解决使C#方法“实现”委托所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。