当前位置:  开发笔记 > 编程语言 > 正文

代表不仅仅是速记界面吗?

如何解决《代表不仅仅是速记界面吗?》经验,为你挑选了2个好方法。

假设我们有:

interface Foo 
{
 bool Func(int x);
}

class Bar: Foo
{
  bool Func(int x)
  {
   return (x>0);
  }  
}

class Baz: Foo
{
  bool Func(int x)
  {
   return (x<0);
  }  
}

现在我们可以将Bar和Baz作为Foos折腾并调用他们的Func方法.

代表们对此进行了简化:

delegate bool Foo(int x);

bool Bar(int x)
{
 return (x<0);
}

bool Baz(int x)
{
 return (x>0);
}

现在我们可以作为Foo代表折腾Bar和Baz.

除了获得更短的代码之外,代表们的真正好处是什么?



1> Michael Bark..:

稍有不同,委托可以访问定义它们的类的成员变量.在C#中(与Java不同),所有内部类都被认为是静态的.因此,如果您使用接口来管理回调,例如按钮的ActionListener.实现内部类需要传递(通过构造函数)对回调期间可能需要与之交互的包含类的部分的引用.代表没有此限制因此减少了实现回调所需的代码量.

更简洁,更简洁的代码也是值得的.



2> Rick Mineric..:

从软件工程的角度来看,你是对的,委托很像函数接口,因为它们是函数接口的原型.

它们也可以以相同的方式使用:不是传递包含您需要的方法的整个类,而是只传递一个委托.这样可以节省大量代码并创建更易读的代码.

此外,随着lambda表达式的出现,它们现在也可以在飞行中轻松定义,这是一个巨大的奖励.虽然在C#中动态构建类是可能的,但它确实是一个巨大的痛苦.

比较两者是一个有趣的概念.我之前没有考虑过用例和代码结构的观点有多大相似之处.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有