正文

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

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

分享到:

·          如果 S 包含一个与 I M 匹配的显式接口成员实现的声明那么此成员就是 I.M 的实现。

·          否则如果 S 包含与 M 匹配的非静态的 public 成员声明则此成员就是 I.M 的实现。

如果不能为在 C 的基类列表中指定的所有接口的所有成员找到实现则将发生编译时错误。请注意,接口的成员包括那些从基接口继承的成员。

根据接口映射的含义类成员 A 在下列情况下与接口成员 B 匹配

·          A B 都是方法并且 A B 的名称、类型和形参表都相同。

·          A B 都是属性A B 的名称和类型相同并且 A B 具有相同的访问器如果 A 不是显式接口成员实现则它可以具有其他访问器

·          A B 都是事件并且 A B 的名称和类型相同。

·          A B 都是索引器A B 的类型和形参表相同并且 A B 具有相同的访问器如果 A 不是显式接口成员实现则它可以具有其他访问器

接口映射算法中隐含着下列值得注意的特征

·          在类或结构成员中确定哪个实现了接口成员时显式接口成员实现比同一个类或结构中的其他成员具有更高的优先级。

·          接口映射不涉及非公共成员和静态成员。

在下面的示例中

interface ICloneable
{
object Clone();
}

class C: ICloneable
{
object ICloneable.Clone() {...}

public object Clone() {...}
}

C ICloneable.Clone 成员成为 ICloneable Clone 的实现这是因为显式接口成员实现优先于其他成员。

如果类或结构实现两个或更多个接口而这些接口包含具有相同名称、类型和参数类型的成员则这些接口成员可以全部映射到单个类或结构成员上。例如

interface IControl
{
void Paint();
}

interface IForm
{
void Paint();
}

class Page: IControl, IForm
{
public void Paint() {...}
}

在此IControl IForm Paint 方法都映射到 Page 中的 Paint 方法。当然也可以为这两个方法提供单独的显式接口成员实现。

如果类或结构实现一个包含被隐藏成员的接口那么一些成员必须通过显式接口成员实现来实现。例如

interface IBase
{
int P { get; }
}

interface IDerived: IBase
{
new int P();
}

此接口的实现将至少需要一个显式接口成员实现可采取下列形式之一

class C: IDerived
{
int IBase.P { get {...} }

int IDerived.P() {...}
}

class C: IDerived
{
public int P { get {...} }

int IDerived.P() {...}
}

class C: IDerived
{
int IBase.P { get {...} }

public int P() {...}
}

当一个类实现多个具有相同基接口的接口时为该基接口提供的实现只能有一个。在下面的示例中

interface IControl
{
void Paint();
}

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

阅读(1989) | 评论(0)


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

评论

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