为什么接口里的方法都是抽象方法呢?
解决方案
10
接口不能实现方法,只能包含方法申明。不叫“抽象方法”。
20
并不能叫做抽象方法,严格来说那个叫声明。
至于你问为什么是原因是你不清楚他的作用,不知道在什么情况下要用到。所以这个最好的回答就是 “等你用到的时候你就知道了”
不用过于纠结,继续往下学,一定要多写程序。
至于你问为什么是原因是你不清楚他的作用,不知道在什么情况下要用到。所以这个最好的回答就是 “等你用到的时候你就知道了”
不用过于纠结,继续往下学,一定要多写程序。
10
那叫做声明 本身并不需要实现什么功能而是要继承他的类去实现具体的功能
就好比说 本人定义了一个usb接口 而本人在这个接口中声明这个接口是方形的 那么其他需要使用到本人usb接口的东西 你就必须去做成一个方形的而不是圆形的 而你这个usb设备的实体是什么本人并不关心
简单说接口就是定义一个标准并不需要去具体实现
例如说 在程序中本人想为程序增加插件的功能 那么本人就可以写一个接口
就好比说 本人定义了一个usb接口 而本人在这个接口中声明这个接口是方形的 那么其他需要使用到本人usb接口的东西 你就必须去做成一个方形的而不是圆形的 而你这个usb设备的实体是什么本人并不关心
简单说接口就是定义一个标准并不需要去具体实现
例如说 在程序中本人想为程序增加插件的功能 那么本人就可以写一个接口
public interface IPlugin { string GetPluginName();//获取插件的名字 string Run(string strArgs);//插件的具体执行时候调用的方法 }
定义一个标准 那么其他想给本人程序编写插件的人 就必须按照上面的方式去实现
此时本人就可以编写一个TestPlugin.dll 大致如下:
public class TestPlugin : IPlugin { public string GetPluginName() { return "TestPlugin"; } public string Run(string strArgs) { return "string is [" + strArgs + "]"; } }
然后本人主程序运行的时候 就可以去遍历(假设插件目录为./Plugin)Plugin目录下的全部dll文件 假设有一个TestPlugin.dll文件
public static IPlugin GetInterface(string strFileName) { Assembly asm = Assembly.LoadFile(strFileName); foreach (var t in asm.GetTypes()) { if (t.GetInterface("IPlugin") != null) { return (IPlugin)Activator.CreateInstance(t); } } return null; } IPlugin i = GetInterface("绝对路径\TestPlugin.dll"); 假设本人的程序中有一个右键菜单.菜单项.Add(I.GetPluginName(),i/*假设I会保存到菜单项Tag属性中*/); //然后对应菜单项的点击事件中 private void XXX_Click(object sender,EventArgs e){ ((IPlugin)(sender as 菜单项).Tag).Run("this is a test"); }
通过接口的方式去调用插件 而不关心插件的具体实现是什么功能
就像PS软件中有很多滤镜插件一样 PS并不需要去关心你插件是什么功能 它只需要定义一个接口 例如:
public interface IPlugin { string GetPluginName();//获取插件的名字 Bitmap Run(Bitmap bmp);//插件的具体执行时候调用的方法 }
它只需要关心 当本人执行这个插件的时候 本人会给你一张图然后你处理完返回一张图给本人就是 至于这个插件的功能是 将人美化还是丑化还是把图形变成模糊那是实现着需要做的事情 而不是定义接口的人需要去做的事情 所以接口并不需要具体的实现 而是需要声明一堆的标准 让别人来实现