首页 > 其他 > 详细

接口的日常实现

时间:2019-04-24 10:03:49      阅读:101      评论:0      收藏:0      [点我收藏+]

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();

实例:

using System;
public interface IPerson
{
  string Name
  {
      get;
      set;
  }
  void Show(string name);
}
public interface IStudent
{
  string StudentId
  {
      get;
      set;
  }
  void Show(string studentid);
}
public class Student: IPerson, IStudent
{
  private string _name;
  public string Name
  {
      get
      {
        return _name;
      }
      set
      {
        _name = value;
      }
  }
  private string _studentid;
  public string StudentId
  {
      get
      {
        return _studentid;
      }
      set
      {
        _studentid = value;
      }
  }
  void IPerson.Show(string name)
  {
      Console.WriteLine("姓名为{0}", name);
  }
  void IStudent.Show(string studentid)
  {
      Console.WriteLine("学号为{0}", studentid);
  }
}
class Program
{
  static void Main()
  {
      Student s = new Student();
      Console.WriteLine("输入姓名");
      s.Name = Console.ReadLine();
      Console.WriteLine("输入学号");
      s.StudentId = Console.ReadLine();
      IPerson per = s;
      per.Show(s.Name);
      IStudent stu = s;
      stu.Show(s.StudentId);
  }
}
总结:

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

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

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

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

接口的日常实现

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!