
/**//**********************************************************************
*接口
*接口成员的几个注意点:
*1. 不能有静态成员;
*2. 接口成员默认访问方式是public,但前面不能写任何修饰符.
*3. 接口成员不能同名,如果是接口继续接口,可以对父接口中的方法重新声明,我们说接口
* 成员覆盖了继承而来的成员,编译器不会报错,但会给出警告.关闭警告的方法是在成员
* 定义前面加上 new(见例1)
*4. 子接口不一定要继承父接口的全部方法,但实现方法时,一定要全部实现.(见例2)
*5. 显式的接口实现(见例3)
* 使用显式接口的两个目的:
* 1) 一个类只在内部使用该接口,而类的使用都不会直接使用到该接口;
* 2) 避免了接口成员之间因为同名而发生混淆.如果一个类希望对名称和返回类型相同的
* 接口成员彩不同的实现方式,就必须使用显式接口成员执行体.
* 显式接口的访问方式:
* 1) 不能通过类的实例访问;
* 2) 通过接口的实例访问.
*6. 接口映射(见例4)
* 映射过程:
* 1) 如果C中存在一个显式的接口成员执行体,则由它来实现Member;
* 2) 如果1)不成立,但C中存在一个非静态的隐式的接口成员执行体,则由它来实现Member;
* 3) 如上述条件还不满足,则到类C的基类列表中寻找,如基类D,用它来替代C,然后重复1)2)
* 步骤(见例5);
* 4) 还没找到,就报错吧.(辛苦了辛苦了 -_-!)
* 接口映射时,还要注意一点:
* 1) 显式说明的接口成员最优先实现;
***********************************************************************/
//例1
publice interface AudioMedia
...{
void Play();
}
public interface Audio:AudioMedia
...{
new void Play();
}
//例2
public interface AudioMedia
...{
void Play();
}
public interface Audio:AudioMedia
...{
void Close();
}
public class MP3:Audio
...{
public void Play()
...{}
public void Close()
...{}
}
//例3
public interface AudioMedia
...{
void Play();
}
public interface Audio:AudioMedia
...{
void Close();
}
public class Mp3:Audio
...{
void AudioMedia.Play() //注意写法,且不需要public
...{
Console.WriteLine("Mp3 is playing...");
}
void Audio.Close() //注意写法,且不需要public
...{
Console.WriteLine("Mp3 is closeing...");
}
}
public static void Main()
...{
Mp3 mp3 = new Mp3();
AudioMedia am = (AudioMedia)mp3;
am.Play(); //通过接口的实例访问
Audio a = (Audio)mp3;
a.Close(); //通过接口的实例访问
}
//例4
public interface IInterface
...{
void Member();
}
public class C:IInterface
...{
public void Member() //隐式
...{}
//void IInterface.Member() //显式
//{}
}
//例5
public class D
...{
public void Member()
...{}
}
public interface IInterface
...{
void Member();
}
public class C:D,IInterface //类C中没有实现Member,就到它的基类中找
...{
}
5257

被折叠的 条评论
为什么被折叠?



