解决方案 »
- 求:算法
- 跪求大神!编写C#控制台程序
- DataGridView二维表头且支持排序的问题?
- TreeView添加事件
- webBrowser中的一个文件下载地址链接,怎么模拟自动点击右键的“目标另存为(A)”然后自动确定下载文件
- winform中datagridview合并单元格的问题--在线等待
- 难!!!使用Office Outlook 发送邮件时附带了附件winmail.dat(内包含几个小标签),但是在其他机器用Office Outlook 时邮件正文内容却没有
- 动态生成的pictureBox有N个,怎样对选定的pictureBox,进行操作?
- 如何判断网页报没报错
- 请问查找字符串中的数字有什么办法吗?
- ComboBox.text InvalidArgument= 0 的值对于 index 无效
- 请教:DataGridViewTextBoxColumn更改为DataGridViewComboBoxColumn
IAsyncResult ar2 = ad2.BeginInvoke(1, null, null);
delegate void AsyncDelegate(int i, string s) ; // line 1
delegate void AsyncDelegate(int i) ; // line2 这是声明了两个相同的类,会忽视后面的类ps(我试过,后面AsyncDelegate ad1 = new AsyncDelegate()只能接受2个参数的方法,也就是(int ,string))。这是个人浅显的理解,不知道对不对。
delegate void AsyncDelegate(int i) ; // line2这种代码能够编译通过?你编出c#编译器根本就会报错、根本不让你编译通过的这个代码来说c#怎么怎么地,是何用意呢?
如果你说这是个类,为何不用class来定义?而用delegate?说明delegate是一种特殊的东西,可以作为方法指针(或者说引用)。那么在实际应用中,我需要定义两个不同的方法,并且异步调用。假如定义一个可以通过,为何不能定义第二个?有人说名称想通了就不能声明第二个,那么我实际需要第二个又怎么办?按照一般的思维,即使是按照类来定义,那么换个名字总可以定义第二个吧?但问题是,换个名字就不是异步的了,就要用别的语法。这让人怎么理解呢?只能说这种语法在同一个变量范围内,只能使用一次,这是一种限制!那么我觉得这样的语法是失败的。声明,没说C#是失败的,c#有很多好的地方,就事论事,不想打架,我也是C#程序员。有问题就该讨论,不要急着否认,讨论出个结果就是进步,否则C#为何还要升级版本的?
如果写成类,很长的,而且固定的模式,所以由编译器完成就可以了,是一种简化应该是。
c#中有object类型。所以如果一个函数可以传一个参数object,
那么他其实就等于可以传任意个,任意类型的参数。
你的问题可以处理一下参数要么另定义一个类型,
复杂一点可以定义成object。
关键是按照这个语法,我要声明两个具有不同参数个数,且具有异步执行能力的代理是无法实现的。
举个例子,比方说我要声明某个类的两个变量,这是没有问题的,因为变量的名字不同。但是我如何声明两个参数个数不同的AsyncDelegate类型的代理呢?因为这种语法不允许我添加类似变量名的东西,所以区分不开,所以造成一段代码只能声明一种签名的代理。
关键是按照这个语法,我要声明两个具有不同参数个数,且具有异步执行能力的代理是无法实现的。
举个例子,比方说我要声明某个类的两个变量,这是没有问题的,因为变量的名字不同。但是我如何声明两个参数个数不同的AsyncDelegate类型的代理呢?因为这种语法不允许我添加类似变量名的东西,所以区分不开,所以造成一段代码只能声明一种签名的代理。
你为什么要求这两个委托类型同名?从设计到实现它们都没有同名的理由。
关键是按照这个语法,我要声明两个具有不同参数个数,且具有异步执行能力的代理是无法实现的。
举个例子,比方说我要声明某个类的两个变量,这是没有问题的,因为变量的名字不同。但是我如何声明两个参数个数不同的AsyncDelegate类型的代理呢?因为这种语法不允许我添加类似变量名的东西,所以区分不开,所以造成一段代码只能声明一种签名的代理。
你为什么要求这两个委托类型同名?从设计到实现它们都没有同名的理由。
我要是不用这个名字,就不让我异步,我就得改用别的语法。
关键是按照这个语法,我要声明两个具有不同参数个数,且具有异步执行能力的代理是无法实现的。
举个例子,比方说我要声明某个类的两个变量,这是没有问题的,因为变量的名字不同。但是我如何声明两个参数个数不同的AsyncDelegate类型的代理呢?因为这种语法不允许我添加类似变量名的东西,所以区分不开,所以造成一段代码只能声明一种签名的代理。
你为什么要求这两个委托类型同名?从设计到实现它们都没有同名的理由。
我要是不用这个名字,就不让我异步,我就得改用别的语法。
代码都是人写的,谁阻止你调用BeginInvoke了?还是说你用了别人的类库,而别人只接受特定的委托签名?事情讲清楚,还能做朋友。
delegate void AsyncDelegate<parameterType>(parameterType value);
static void someMethod1(int i, string s) { }
static void someMethod2(int i) { } AsyncDelegate<int, string> ad1 = someMethod1;
IAsyncResult ar1 = ad1.BeginInvoke(1, "str", null, null);
AsyncDelegate<int> ad2 = someMethod2;
IAsyncResult ar2 = ad2.BeginInvoke(1, null, null);
关键是按照这个语法,我要声明两个具有不同参数个数,且具有异步执行能力的代理是无法实现的。
举个例子,比方说我要声明某个类的两个变量,这是没有问题的,因为变量的名字不同。但是我如何声明两个参数个数不同的AsyncDelegate类型的代理呢?因为这种语法不允许我添加类似变量名的东西,所以区分不开,所以造成一段代码只能声明一种签名的代理。
你为什么要求这两个委托类型同名?从设计到实现它们都没有同名的理由。
我要是不用这个名字,就不让我异步,我就得改用别的语法。
代码都是人写的,谁阻止你调用BeginInvoke了?还是说你用了别人的类库,而别人只接受特定的委托签名?事情讲清楚,还能做朋友。
我刚才没说清,我说不让异步的意思是换个名字的话,就没有了异步的能力,而且语法出错。这位兄台解决了我的疑问,刚刚试过,可以了。
之前说“乱”,看来有些鲁莽,还是没有想到的个异步代理如何用泛型来解决,现在对觉得“乱”字不爽的朋友表示歉意。
帖子加分到100,回馈大家,谢谢!