我们如何实现具有相同方法名称的两个接口?

时间:2010-10-26 12:45:44

标签: c#-4.0

我有一个问题,我们如何实现具有相同方法名称的接口

 interface ISample2
{
  string CurrentTime();
     string CurrentTime(string name);
}
 interface ISample1
{
     string CurrentTime();
}

我确实喜欢这个。这是对的吗?

class TwoInterfacesHavingSameMethodName:ISample1,ISample2
{
    static void Main(string[] sai)
    {
        ISample1 obj1 = new TwoInterfacesHavingSameMethodName();
        Console.Write(obj1.CurrentTime());
        ISample2 obj2 = new TwoInterfacesHavingSameMethodName();
        Console.Write(obj2.CurrentTime("SAI"));
        Console.ReadKey();
    }

    #region ISample1 Members

    string ISample1.CurrentTime()
    {
        return "Interface1:" + DateTime.Now.ToString();
    }

    #endregion

    #region ISample2 Members

    string ISample2.CurrentTime()
    {
        return "Interface2:FirstMethod" + DateTime.Now.ToString();
    }

    string ISample2.CurrentTime(string name)
    {
        return "Interface2:SecondMethod" + DateTime.Now.ToString() + "" + name;
    }

    #endregion
}

这一行的含义是什么:

ISample1 obj1 = new TwoInterfacesHavingSameMethodName();

我们是为Class还是Interface创建对象。在Interface中编写方法的基本用法是什么。

2 个答案:

答案 0 :(得分:5)

当您显式实现接口时,只有在从对该接口的引用中调用它时,才会调用显式实现。

所以如果你要写:

  TwoInterfacesHavingSameMethodName obj1 = new TwoInterfacesHavingSameMethodName();
  obj1.CurrentTime();

你会收到一个错误。

但是

ISample1 obj1 = new TwoInterfacesHavingSameMethodName();
ISample2 obj2 = new TwoInterfacesHavingSameMethodName();
obj1.CurrentTime();
obj2.CurrentTime();

会奏效。

如果你想在TwoInterfacesHavingSameMethodName上调用这个函数,你也必须隐式地实现这个接口。例如:

public string CurrentTime()
{
   return "Implicit";
}

答案 1 :(得分:0)

是的,你所做的是正确的。 要回答第二个问题,您始终要创建类的对象并键入接口。 在接口中使用写入方法是强制所有类来实现该方法。