请问:当接口作为函数参数的时候,代表什么意思?

解决方案 »

  1.   

    没啥特别意思,任何对象都可以当参数使用接口有可能是封装内部逻辑,让调用者并不用关心函数内部是如何实现的,这样做一是规范调用代码,而是减轻调用者理解业务逻辑的难度(实际上,使用接口你根本不用去关心人家内部是如何做的,传给他接口就成)比如:传统的一个函数 checkuser(string name,string password);你调用时需要先知道这个函数让你传了两个参数接口 Icheckuser
    {
    string name;
    string passwrod;
    }内部逻辑: checkuser(接口icheckuser user)
    {
    if(user.name=="" && user.password=="")
    {
    //do something
    }
    }当你在页面也继承该接口实现(页面和内部类都继承同一接口,这样可以保证程序员都使用同样的规范)
    这样调用代码就可以规范成:
    form :Icheckuser  //继承并实现接口string name{
    get{return TextBox1.Text;}
    set {TextBox1.Text=value;}       
    }string password{
    get{return TextBox2.Text;}
    set {TextBox2.Text=value;}       
    }
    checkuser((Icheckuser)this); //这里你不用管内部是如何的,你只管实现你自己该管的事情就行了
      

  2.   

    我可能是概念有点混乱,楼上的兄弟用 Icheckuser user,其中的user是接口Icheckuser的实例吗?接口不是不能实例化的吗?
      

  3.   

    比如你有个接口
    interface IMove
    {
        void Move();
    }
    对于人,动物来说都可以Move所以
    class Person : IMove
    [
      public void Move()
      {
         Console.WriteLine("Person move.");
       }
    }
    class Animal: IMove
    [
      public void Move()
      {
         Console.WriteLine("Animal move.");
       }
    }
    这是你可以这样调用IMove接口
    public Test
    {
        public void Run(IMove obj)
        {
             obj.Move();
        }
    }
    如果这是你的需求变了,比如又增加了Car类
    class Car: IMove
    [
      public void Move()
      {
         Console.WriteLine("Car move.");
       }
    }
    因为你是针对接口编程的,所以你不需要关心Car或者外星人或者火箭类,这既是面向对象的ocp原则,对修改关闭(针对Run方法)对扩展开发(针对新增的汽车,外星人,火箭类)
      

  4.   


    Icheckuser user=(Icheckuser)this//这里不是new而是接口转换,this是在前面new的interface(接口)
    [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
    一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性 索引器. 
    一个接口可从一个或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表中。被继承的接口称为该接口的显式基接口。当接口具有一个或多个显式基接口时,在该接口声明中,接口标识符后跟一个冒号以及由逗号分隔的基接口标识符列表。接口的基接口是显式基接口及其基接口。换言之,基接口集是显式基接口、它们的显式基接口(依此类推)的完全可传递的闭包。接口继承其基接口的所有成员。接口成员是通过 I.M 和 I[A] 形式的成员访问和索引访问表达式访问的,其中 I 是接口类型的实例,M 是该接口类型的方法、属性或事件,A 是索引器参数列表。接口可以由类和结构实现。为了指示类或结构实现接口,在该类或结构的基类列表中包含了接口标识符。在实现类或结构中定位接口成员的实现的过程称为接口映射。