正文

C#语法详细解释---接口[3]2008-09-17 01:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/37343.html

分享到:

调用 n.Add(1) 选择 IInteger.Add,方法是应用 错误!未找到引用源。 节的重载决策规则。类似的,调用 n.Add(1.0) 选择 IDouble.Add插入显式强制转换后就只有一个候选方法了因此没有多义性。

在下面的示例中

interface IBase
{
void F(int i);
}

interface ILeft: IBase
{
new void F(int i);
}

interface IRight: IBase
{
void G();
}

interface IDerived: ILeft, IRight {}

class A
{
void Test(IDerived d) {
     d.F(1);                 // Invokes ILeft.F
     ((IBase)d).F(1);        // Invokes IBase.F
     ((ILeft)d).F(1);        // Invokes ILeft.F
     ((IRight)d).F(1);       // Invokes IBase.F
}
}

IBase.F 成员被 ILeft.F 成员隐藏。因此即使在通过 IRight 的访问路径中 IBase.F 似乎没有被隐藏调用 d.F(1) 仍选择 ILeft.F

多重继承接口中的直观隐藏规则简单地说就是如果成员在任何一个访问路径中被隐藏那么它在所有访问路径中都被隐藏。由于从 IDerived ILeft IBase 的访问路径隐藏了 IBase.F因此该成员在从 IDerived IRight IBase 的访问路径中也被隐藏。

1.1 完全限定接口成员名

接口成员有时也用它的完全限定名 (fully qualified name) 来引用。接口成员的完全限定名是这样组成的声明该成员的接口的名称后跟一个点再后跟该成员的名称。成员的完全限定名将引用声明该成员的接口。例如,给定下列声明

interface IControl
{
void Paint();
}

interface ITextBox: IControl
{
void SetText(string text);
}

Paint 的完全限定名是 IControl.PaintSetText 的完全限定名是 ITextBox.SetText

在上面的示例中不能用 ITextBox.Paint 来引用 Paint

当接口是命名空间的组成部分时该接口的成员的完全限定名需包含命名空间名称。例如

namespace System
{
public interface ICloneable
{
     object Clone();
}
}

这里Clone 方法的完全限定名是 System.ICloneable.Clone

阅读(2325) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册