—— from S1 Nyan (NOKIA Lumia 630) 我猜的, 你需要的是win32 api, 我没学过
不过python 或者 java 都有专门的库去调用这些系统接口 Java看了一眼表示
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
看起来委托类似于Java中的反射机制
或者可以理解成每个委托方法都是一个大方法中的一块,这个大方法则使用委托名来switch
而接口嘛,是一个虚方法,只声明方法形态,不包含任何实现内容
不同的对象可以分头实现这个接口,实现不同的动作
要说有什么区别的话,接口是面向对象的一环,接口的实现是每个对象的任务,实现方式当然就有对象自己的特点(比如Animal.eat() -> Cat.eat() / Dog.eat())
而委托则是依靠参数来区分实现的,更接近于面向过程的思路 本帖最后由 ostcollector 于 2015-8-20 20:59 编辑
我的理解就是函数指针
不过由于类型安全,更像C++的functor
菜鸟同样表示关注。。。 有没有大神能够通俗易懂得解释一下的。。只是迷迷糊糊感觉像是函数指针一样的 呃,简单来说接口与委托都是项目内自己用的东西,算是一种语法功能或者语法技巧,和数组啊队列啊继承啊之类的一个级别的东西
你后面说的那些,要的是微软给你的windows API
例如最简单的写入个文本:
using System.IO;
FileStream fs = File.Open("文本文档.txt", FileMode.Create, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("php是最好的语言");
sw.Flush();
sw.Close();
fs.Close(); 本帖最后由 右慈 于 2015-8-20 21:24 编辑
c#好久不写了,但是我觉得你混淆了一些概念,c#里面,本身的接口(interface),是c#语言级别的概念,类似与一种协议。举个例子,就是,我们都说好,如果类支持走路(walk)的功能,那么我们就实现IWalkable的接口,这样写起来函数的签名更加精炼准确,也方便编译器帮你检查类型,也方便转换成对应类型来调用相应的方法。
比如我我有个函数,就是控制某个动物走路的,我不用繁琐的声明猪如何走路,羊如何走路,牛如何走路,我可以简单的写成:
void function (IWalkable walkable) {
if (walkable != null) {
walkable.walk();
}
}
你说到的想要和其他应用程序来交互的接口,虽然也是一种类似协议的东西,但是应用级别的,简单来说只要某个应用通过某种方式,暴露一些渠道,让外部能够使用这个应用的某些功能,就可以叫做编程接口(api)。
不同应用的接口实现的方式不同,导致调用的方式也不同,并没有说有一种统一的标准,所以需要具体问题具体分析。
多数win32的应用,可以通过loadlibrary win32 api,加载对应程序的dll,再使用pinvoke(platform invoke)来调用。
还有一些应用,需要通过tcp网络协议来调用。
还有许多网络应用,通过http协议发送信息来调用。
所以你要阅读相关文档来弄清楚到底是如何调用其接口的。
委托其实也算是一种协议,接口可以说是类实现的协议,委托是函数定义的协议,接口方便传递对象,委托方便传递函数。 没用过c#,不过看上去委托就是一种callback
至于操作office...估计要熟悉COM才行,我觉得LZ要是想透过自己的程序操作别的程序,应该去看看autoit 书上的接口是csharp的语言概念
楼主想要的接口是api,这个就得自己搜一下了
c#基本委托基本只能用到event handler,不需要自己直接写委托(当然也有用到的时候,比如在invoke的时候) 目的都是为了抽象
接口面向对象编程中对继承的一种补充(对于类似java C#这种单根继承体系来说
委托如果学过c++可以就理解为c#中实现函数指针的一种方式
至于为什么要用这些 如果书上给的例子理解不了 就先动手写几个程序吧.... 本帖最后由 EraserKing 于 2015-8-20 22:11 编辑
首先看接口(interface)和类(class)
接口是一种约定,它约定了实现了这个接口的类需要实现其中的哪些方法,但是并不负责这些方法应当如何实现。
比如说有一个如下的接口interface IMyInterface
{
public void Method1(string str);
public string Method2(int value);
}那么对于任意一个实现了该接口的类,需要精确地实现这两个方法(签名一致)class MyClass: IMyInterface
{
public void Method1(string str)
{
}
public string Method2(int value)
{
}
}改动任何签名都会导致编译失败
实际意义么,最简单来说,保证你不会出错,不会少写方法……实际上是一种抽象的概括,说明这个类可以做什么……不同的类实现同样的接口,过程和结果也可以不一样。
C#里,只允许继承一个基类,但是可以继承多个接口,避免了C++里多重继承的混乱。
委托么,有点像C里的函数指针,但是安全
比方说public delegate int MyDelegate(int val1, int val2); //定义了一个委托,有两个int参数,有int返回值然后我就可以定义下面两个方法,符合上面定义的委托的形式public int FuncAdd(int val1, int val2)
{
return val1 + val2;
}
public int FuncDel(int val1, int val2)
{
return val1 - val2;
}
然后如下定义委托实例MyDelegate funcAdd = FuncAdd;
MyDelegate funcDel = FuncDel;那么此时调用funcAdd/funcDel的结果就等同于FuncAdd/FuncDel
此外,还可以定义一个方法,接受以上的委托public int Func(MyDelegate myDelegate, int val1, int val2)
{
Console.Write(myDelegate(val1, val2).ToString());
}调用这个方法时,把委托实例传进去。这样,对Func本身不做改动的同时又可以改变程序的行为。Func(funcAdd, 1 ,2);
Func(funcDel, 1, 2);后面如果接触到事件(event),就会发现大量的委托的使用。
接口和委托控制IE、Office?那可能你用AHK或者上面有人说的AutoIt比较好,立杆见影。
API应该叫应用程序接口吧……实际上是别的程序暴露出来的可操作的对象(方法)供你调用。和C#里说的接口不是一回事。
至于说输入输出,读取写入存储
这个现成的几个类,StreamReader, StreamWriter, 再不行FileStream自己写起……这个看两眼MSDN就行了。 本帖最后由 右慈 于 2015-8-20 22:44 编辑
wowow 发表于 2015-8-20 21:39
也就是说,书上所说的接口其实是内部用的,就叫interface
我理解成了API啊,叫中文都是叫接口,其实按原 ...
项目内interface的意义我上面基本上说过了啊,就是定义类如何实现的协议(上面有人用另外一个词“约定”我觉得也不错),实现了对应的interface,就代表该类遵循了某种协议,必定会有协议(interface)中制定的某种方法(method)。
委托就是函数签名的协议,有时候你会需要将函数本身作为参数,传递给另外一个函数,接受函数参数的函数(有点绕口),在调用参数函数的时候,必须清楚的知道被调用的参数函数的签名(signature,就是函数本身支持接受什么参数,返回类型等信息),才能调用。
因此委托就是起到保证函数签名的一致性,保证签名同时对于接受方和传递方都是定义清晰的。
假设func1接受func2作为参数,并且内部会调用func2,那么如果在调用时不知道func2接受什么参数,那么又如何调用呢?
// 这里说,有这么一种函数,接受一个参数,这个参数是字符串类型,返回也是字符串,将这种函数都叫做Delegate1类型的函数。
delegate string Delegate1(string message);
// 这里说,定义另外一个函数func1,这个函数接受一个函数作为参数,函数参数的签名如之前Delegate1所设定的,必须能够接受一个字符串作为参数,并且能够返回一个字符串。
func1(Delegate1 func2){
console.log(func2("abc") + " invoked");
}
// 这里说,我希望func1帮我调用func5和func6
func1(func5 + func6);
// 下面这几段代码会编译失败,因为它在调用时,没有遵循函数签名的“协议”
func3(Delegate1 func2){
console.log(func2(123) + " invoked");
}
func4(Delegate1 func2){
console.log(func2("abc") * 25, "invoked");
}
现实生活中你可能没有遇到类似的需求,所以有点难以理解,就多写一些小东西慢慢就突然明白了。
接口这个你回过头去看看多态polymorphism,先熟练下类的继承吧abstract,用父类生成子类对象,类型互转什么的。委托这玩意可以暂时忽略,不常用的话记不住,反射都比他好记些。 event其实是一种特殊类型的delegate,delegate的功能,用event也可以实现,唯一的区别,是public event能从外部添加被调用函数(onSomething += func1),而触发这个事件(调用delegate)只能从内部发生。这样保证了事件的安全性。
而public delegate,无论内部还是外部,都可以触发(调用) 另外
event只能+=或-=,而不能用=。而普通delegate可以。同样是为了防止外部修改内部的行为。
event可以在interface中声明,而普通delegate不可以。
----发送自 Sony D6603,Android 5.1.1 楼主把概念混淆了。把委托想成类成员就好,尽管有些特性,但和其他类成员区别不大。接口想象成只有声明没有定义的父类,而且是唯一可以多重派生的父类。
----发送自 Sony D6603,Android 5.1.1 说到委托的应用,我记得当初写一个子线程更新主UI的小程序,必须要用到委托才行(否则方法很tricky) 也是看了半天看得云里雾里,强行抄袭了别人的代码没求甚解 cxn 发表于 2015-8-21 08:55
API也是interface啊,是Application Programming Interface的简称
做项目的时候,先搭个大致的框架,就是 ...
C#里面interface是一种语言特性,不要和interface这个单词混一起啦~不然LZ又要晕了 wowow 发表于 2015-8-20 21:39
也就是说,书上所说的接口其实是内部用的,就叫interface
我理解成了API啊,叫中文都是叫接口,其实按原 ...
C# 中类虽然只能从一个直接基类派生,但可以实现多个 Interface。
委托类似函数指针的概念,比如 Linq 查询时我们常用的 Lambda 表达式也是委托。有些情况用好了能令设计变得简洁许多。
比如要从一个商品集合中筛选数据, 查出12寸以下价格2000以下又是包邮的某品牌笔记本,直接的方法就是先按一个条件从集合中查出结果然后在其基础上继续按下一个条件查。如果这些条件都是可变的而且是很多条件的话,也蛮头疼的。但是每个条件的查询其实可以用一个一个的小函数实现类似这样 bool Func(T t),这个时候用委托,把方法串起来,直接调用一次就搞定了。这里我说的通俗了点,实际中会根据条件动态生成类似 Expression<Func<T, bool>> 这样的表达式,很简洁的。
wowow 发表于 2015-8-20 20:05
只是想学习而已,离真正投入生产还很远。
怎么做,做什么,对不对,这些问题光光看书就是一个纸上谈兵的感 ...
你自己都知道症结啦。。。写的太少,光看没用 如果是要在office里实现一些便利功能,还是用office的宏就是vba更方便吧。
如果是操作office文件的话可以试试 Aspose 的库,是C#的,但是是收费的就是了。 楼上好顶赞,我这个学java的已经看懂了
另外问编程问题推荐segmentfault 我教你,你应该用的至少是 VS2008以上吧。
新建 Csharp 项目,随便是 控制台 还是 winform, wpf 也行。
添加引用,.Net 这一页找到 Microsoft.Office.Interop.Word 。
如果没有的话,到 COM 那一页 找到 Microsoft Word 11.0 Object Library, 也可能是 12.0 或者其他,只要你装了 Office 就肯定有的。
点引用的库,看看里面有什么
好像是
Application wordapp = new ApplicationClass();
然后一直下去的。
office类的API可以用楼上说的…叫vsto…提供了office家族的一票API调用 接口是纯虚基类,委托是函数指针
—— 来自 HUAWEI H60-L02, Android 4.4.2 本帖最后由 J.A.R.V.I.S. 于 2015-8-21 23:49 编辑
java和C#里面的interface是对程序逻辑进行抽象的一种手段,是一种语言特性。
你后面说的程序接口叫API,全称是Application Programming Interface,是开放给程序调用者使用的方法。
前者是抽象的,后者是包含实际逻辑的方法(或者说函数)。 我觉得你可以先粗略记个概念,当你有更丰富经验,能站在更抽象的层面来看程序设计的时候后再来看这个,你才能理解一门语言设计这么些特性的目的。
——发送自S1 Pluto 本帖最后由 tommy121 于 2015-8-27 17:03 编辑
interface就是一个约束规范。如果你自己写一个程序用处不大。
如果你是一名包工头。有些搬砖的活儿你不想亲自动手干,那么你可以写一些接口类。在里面定义好里面有哪些属性,方法,方法的参数和返回类型。注释里写清楚功能需求。然后规定,下面某某某这些类必须继承这个接口类。剩下的就交给手下的码农去完成。当然实际情况用interface去规范码农开发只有可行性,没有操作性。
--------------------------------------------------------------------------------------
页:
[1]
2