c#中的类型问题
一个代理的问题
一条程序
mydelegate d1 = mydelegate.combine(d1,d2);
combine方法返回的是delegate类的实例啊,怎么能让派生类的d1去引用它呢?
问题点数:20、回复次数:9Top
1 楼diandian82(点点(nothing))回复于 2006-07-01 21:41:43 得分 0
markTop
2 楼diandian82(点点(nothing))回复于 2006-07-01 21:42:02 得分 5
public static Delegate Combine (
Delegate a,
Delegate b
)
C++
public:
static Delegate^ Combine (
Delegate^ a,
Delegate^ b
)
J#
public static Delegate Combine (
Delegate a,
Delegate b
)
JScript
public static function Combine (
a : Delegate,
b : Delegate
) : Delegate
参数
a
最先出现其调用列表的委托。
b
最后出现其调用列表的委托。
返回值
新的委托,它的调用列表将 a 和 b 的调用列表按该顺序连接在一起。如果 b 为空引用(在 Visual Basic 中为 Nothing),则返回 a,如果 a 为空引用,则返回 b,如果 a 和 b 均为空引用,则返回空引用。Top
3 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-07-01 22:15:51 得分 0
不要试图从Delegate类继承。况且你也无法继承,所以讨论这个问题是没有意义的。
但是如果是别的类型,你可以重写Combine方法来解决问题……Top
4 楼yyyaaa(是啊啊)回复于 2006-07-01 22:31:59 得分 0
mydelegat是C#自动继承于Delegate类的啊!
“不要试图从Delegate类继承。况且你也无法继承,所以讨论这个问题是没有意义的。”不懂是什么意思Top
5 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-07-01 22:41:28 得分 0
mydelegate d1 = mydelegate.combine(d1,d2);
修改为:
d1 += d2;Top
6 楼yyyaaa(是啊啊)回复于 2006-07-02 10:55:20 得分 0
楼上的“+=”被C#重载了
它也是调用了combine函数。Top
7 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-07-02 11:35:47 得分 0
你到底想要知道什么?实现这样的效果可以直接用+=而不用Combie,并且,delegate并不是如你所想的那样重载了+=运算符。Top
8 楼yyyaaa(是啊啊)回复于 2006-07-02 11:42:46 得分 0
我的意思是:
1)d1是mydelegate类的,它为什么可以引用delegate类的对象Top
9 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-07-02 11:53:16 得分 15
我说了,+=并不是:
mydelegate d1 = mydelegate.combine(d1,d2);Top




