private/实现有多个相同方法的接口

当我们在一个类型中用完全限定接口名来定义一个接口方法时,该方法将被认为是私有方法,---只在该类型中(内部)可以调用,----而不能使用类型本身的引用来调用它。
----但是,当我们将该类型的引用转型为一个接口时,该接口中定义的方法将可以被调用,这时它(用完全限定接口名来定义的接口方法)又成为一个公有方法。---所以,当将gp变量转型为一个IWindow时,IWindow.GetMenu方法将是唯一可以调用的方法。
编译器按照先“完全限定接口成员”后“非完全限定接口成员”
using System;
using System.Collections.Generic;
using System.Text;

namespace App1
{
    
public interface IWindow
    
{
        Object getMenu();
    }

    
public interface IRestaurant
    
{
        Object getMenu();
    }

    
public class GiuseppePizzaria : IWindow, IRestaurant
    
{

        
IWindow Members

        
IRestaurant Members

        
public Object getMenu()//该类型自身的getMenu方法,与接口无关
        {
            Console.WriteLine(
"I'm GiuseppePizzaria's public method!");
            
return "";
        }

    }

    
class Program
    
{
        
static void Main(string[] args)
        
{
            GiuseppePizzaria gp 
= new GiuseppePizzaria();
            
object menu;
            
//调用公有的getMenu方法.使用GiuseppePizzaria引用,
            
//完全限定接口方法将为私有方法,因此不可能被调用.
            menu = gp.getMenu();
            
//调用IWindow的getMenu方法。使用IWindow引用,
            
//因此只有IWindow的getMenu()方法被调用。
            menu = ((IWindow)gp).getMenu();
            
//调用IWindow的getMenu方法。使用IWindow引用,
            
//因此只有IWindow的getMenu()方法被调用。
            menu = ((IRestaurant)gp).getMenu();
            Console.Read();
        }

    }

}


posted @ 2007-12-20 15:22  shuang  阅读(310)  评论(0编辑  收藏  举报