接口的日常实现

1.隐式实现

public interface IChinese
{
    string Speak();
}
public class Speaker : IChinese
{
    public string Speak()
    {
        return "中文";
    }
}

调用:

IChinese s = new Speaker();
s.Speak();

Speaker s = new Speaker();
s.Speak();

2.显式实现

public interface IEnglish
{
    string Speak();
}
public class Speaker : IEnglish
{
     string IEnglish.Speak()
    {
        return "English";
    }
}

调用:

IEnglish s = new Speaker();
s.Speak();

不允许:不能找到对应的实例对象

Speaker s = new Speaker();
s.Speak();

实例:

 1 using System;
 2 public interface IPerson
 3 {
 4   string Name
 5   {
 6       get;
 7       set;
 8   }
 9   void Show(string name);
10 }
11 public interface IStudent
12 {
13   string StudentId
14   {
15       get;
16       set;
17   }
18   void Show(string studentid);
19 }
20 public class Student: IPerson, IStudent
21 {
22   private string _name;
23   public string Name
24   {
25       get
26       {
27         return _name;
28       }
29       set
30       {
31         _name = value;
32       }
33   }
34   private string _studentid;
35   public string StudentId
36   {
37       get
38       {
39         return _studentid;
40       }
41       set
42       {
43         _studentid = value;
44       }
45   }
46   void IPerson.Show(string name)
47   {
48       Console.WriteLine("姓名为{0}", name);
49   }
50   void IStudent.Show(string studentid)
51   {
52       Console.WriteLine("学号为{0}", studentid);
53   }
54 }
55 class Program
56 {
57   static void Main()
58   {
59       Student s = new Student();
60       Console.WriteLine("输入姓名");
61       s.Name = Console.ReadLine();
62       Console.WriteLine("输入学号");
63       s.StudentId = Console.ReadLine();
64       IPerson per = s;
65       per.Show(s.Name);
66       IStudent stu = s;
67       stu.Show(s.StudentId);
68   }
69 }
总结:

隐示实现对象声明为接口和类都可以访问到其行为,显示实现只有声明为接口可以访问。

如果两个接口中有相同的方法名,那么同时实现这两个接口的类,就会出现不确定的情形,在编写方法时,也不知道实现哪个接口的方法了。为解决这一问题,C#提供了显示接口实现技术,就是在方法名前加接口名称,用接口名称来限定成员。用“接口名.方法名()”来区分实现的是哪一个接口。

注意:显示接口实现时,在方法名前不能加任何访问修饰符。这种方式和普通方法不同,普通方法前不加访问修饰符,默认为私有的,而显式接口实现时方法前不加任何修饰符,默认为公有的,如果前面加上修饰符,会出现编译错误。

调用显示接口实现的正确方式是通过接口引用,通过接口引用来确定要调用的版本。

原文地址:https://www.cnblogs.com/yangzh666/p/10760514.html