| add方法将具有同样的签名,但这个类仍然能通过编译,是否会引起调用混淆将在这个类实例化和调用add方法时判定。请看下面调用代码: Node<int, int> node = new Node<int, int>(); object x = node.add(2, 11); 这个Node的实例化引起了三个add具有同样的签名,但却能调用成功,因为他优先匹配了第三个add。但假如删除了第三个add,上面的调用代码则无法编译通过,提示方法产生的混淆,因为运行时无法在第一个add和第二个add之间选择。 Node<string, int> node = new Node<string, int>(); object x = node.add(2, "11"); 这两行调用代码可正确编译,因为传入的string和int,使三个add具有不同的签名,当然能找到唯一匹配的add方法。 由以上示例可知,C#的泛型是在实例的方法被调用时检查重载是否产生混淆,而不是在泛型类本身编译时检查。同时还得出一个重要原则: 当一般方法与泛型方法具有相同的签名时,会覆盖泛型方法。 泛型类的方法重写 方法重写(override)的主要问题是方法签名的识别规则,在这一点上他与方法重载一样,请参考泛型类的方法重载。
|
| 共12页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 11 [12] 下一页 |
评论加载中…