C#接口问题

twlyy 2016-05-19 10:05:15
为什么接口里的方法都是抽象方法呢?
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2016-05-20
  • 打赏
  • 举报
回复
那叫做声明 本身并不需要实现什么功能而是要继承他的类去实现具体的功能 就好比说 我定义了一个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);//插件的具体执行时候调用的方法
}
它只需要关心 当我执行这个插件的时候 我会给你一张图然后你处理完返回一张图给我就是 至于这个插件的功能是 将人美化还是丑化还是把图形变成模糊那是实现着需要做的事情 而不是定义接口的人需要去做的事情 所以接口并不需要具体的实现 而是需要声明一堆的标准 让别人来实现
ajh99990 2016-05-20
  • 打赏
  • 举报
回复
并不能叫做抽象方法,严格来说那个叫声明。 至于你问为什么是因为你不清楚他的作用,不知道在什么情况下要用到。所以这个最好的回答就是 “等你用到的时候你就知道了” 不用过于纠结,继续往下学,一定要多写程序。
threenewbee 2016-05-19
  • 打赏
  • 举报
回复
接口不能实现方法,只能包含方法申明。不叫“抽象方法”。
Poopaye 2016-05-19
  • 打赏
  • 举报
回复
为什么你头上都是头发呢?
CqCoder 2016-05-19
  • 打赏
  • 举报
回复
接口里的不是抽象方法 还有属性 所引起等 抽象类里面才有抽象方法,当然你可以把接口当成特殊的抽象类

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧