C#-接口

/**********************************************************************
 *接口
 *接口成员的几个注意点:
 *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,就到它的基类中找
{    
}
 

你可能感兴趣的:(c,Class,interface,audio,编译器)