C# 委托和接口
能用委托解决的事情,接口也都可以解决。如下所示:
public static void Main()
{
int[] values = { , , , };
Util.TransformAll(values, new Squarer());
foreach (int i in values)
{
Console.WriteLine(i); //输出1,4,9,16
}
}
public interface ITransformer
{
int Transform(int x);
} public class Util
{
public static void TransformAll(int[] values, ITransformer t)
{
for (int i = ; i < values.Length; i++)
{
values[i] = t.Transform(values[i]);
}
}
} class Squarer : ITransformer
{
public int Transform(int x)
{
return x * x;
}
}
上面的例子中没有多播,且接口中只定义了一个方法。如果订阅者需要支持不同的转换方式(如平方、立方),则需要多次实现ITransformer接口。
这个时候你就会发现很烦,因为每种转换都要写一个实现类!如下所示:
public static void Main()
{
int[] datas = { , , , };
Util.TransformAll(datas, new Cuber());
foreach (int i in datas)
{
Console.WriteLine(i); //输出1,8,27,64
}
} ...
class Squarer : ITransformer
{
public int Transform(int x)
{
return x * x;
}
} class Cuber : ITransformer
{
public int Transform(int x)
{
return x * x * x;
}
}
什么时候委托优于接口呢?
1、接口内只定义一个方法
2、需要进行多播
3、需要多次实现接口
C# 委托和接口的更多相关文章
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
使用C#实现加减乘除算法经常被用作新手练习.本篇来分别体验通过委托.接口.匿名方法.泛型委托来实现. 使用委托实现 加减乘除拥有相同的参数个数.类型和返回类型,首先想到了使用委托实现. //创建一个委 ...
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载. 下面对类库使用的封装方法: 得到指定的输入流的ZIP压缩流对象 /// <summary> /// 得到指定的 ...
- 异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
http://www.cnblogs.com/panjun-Donet/archive/2009/03/03/1284700.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要 ...
- C#回调浅析(委托、接口回调)
https://wenku.baidu.com/view/ed724173bd64783e08122b2f.html
- 为什么不能把委托(delegate)放在一个接口(interface)当中?
stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...
- [转]何时使用委托而不使用接口(C# 编程指南)
以下内容转自MSDN:http://msdn.microsoft.com/zh-cn/library/ms173173.aspx 委托和接口都允许类设计器分离类型声明和实现. 任何类或结构都能继承和实 ...
- [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件
在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...
- .NET 委托
委托类型定义 C#编译器处理委托时,先自动产生一个派生自System.MulticastDelegate的密封类.这个类与它的基类System.Delegate一起为委托提供必要的基础设施, ...
- ISP接口隔离原则
一.定义 不应该强迫客户程序依赖并未使用的方法 二.接口污染 接口污染,在C#.C++这样的静态类型语言中是很常见的.一个接口会被他不需要的方法污染.在接口中假如一个方法只是为了能给它的一个子类带来好 ...
随机推荐
- git(常用命令)思维导图...
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 来自文章:http://www.cnblogs.com/1-2-3/archive ...
- 从输入url到显示网页发生了什么
原文链接:https://juejin.im/post/5bf23afa6fb9a049be5d1494 在浏览器中输入url到显示网页主要包含两个部分: 网络通信和页面渲染 互联网内各网络设备间的通 ...
- Ubuntu部分命令的使用简介
1.查看USB设备 lsusb #查看系统中的usb设备 lsusb –v #查看详细的usb设备信息 2.ubuntu mount u盘 第一步:查看U盘信息 sudo fdisk -l 得到类似 ...
- laravel中if
1.控制器 2.模板
- dateframe_loc.iloc.ix
import pandas as pddf=pd.DataFrame({ "a":[1,2,3], "b":[4,5,6], "c":[7, ...
- 2017年值得一看的7个APP设计
新媒体时代蓬勃发展,各类APP如雨后春笋般出现.下载到合适的APP,不仅衣食住行一键搞定,甚至健身.社交.阅读等需求也能足不出户地满足.对于广大“吃瓜群众”来说,选择APP是个人需求以及跟随潮流的选择 ...
- 通过命令更新git for windows
git update-git-for-windows 参考: https://github.com/PanJiaChen/vue-element-admin/issues/24 https://sta ...
- Tree Representation Implementation & Traversal
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Tre ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- 2018.10.19 NOIP训练 桌子(快速幂优化dp)
传送门 勉强算一道dp好题. 显然第kkk列和第k+nk+nk+n列放的棋子数是相同的. 因此只需要统计出前nnn列的选法数. 对于前mmm%nnn列,一共有(m−1)/n+1(m-1)/n+1(m− ...