当前位置:编程学习 > C#/ASP.NET >>

60分啦。。。接口多态——请帮我举个例子

   原来:
      代码所有类,只实现只实现一个接口

   现在:
      要求,每个类多实现一个行为(接口)

请问,怎么添加,最好能帮我写个例子


备注:接口多态,怎么调用

--------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 没看明白什么意思...

--------------------编程问答-------------------- 丢,说到这过你就不用玩C#了,

让我们回归到大学(计算机专业的话应该是大一吧,记得)的C++课程里的:

计算三角型,四边型,圆的周长和面积 (体积计算很无聊的,暂时不考虑了)

现在有个接口,声明两个行为: 计算周长,计算面积


然后下面有三个类,分别为三角型类,四边型类,圆类

这三个类都要继承上面那个接口的,也就是说,三个类必须要自己实现自己的那两个行为(计算周长,计算面积)

下面是各类实现的行为(因为是直接继承接口的,所以这两个行为的函数名称,也就是行为名称都要与接口的相同)



接口:
           int 计算周长();

           俘点型 计算面积();

下面是各类的实现



三角型类: 接口
      
           public int 计算周长()
           {
               //三角型周长算法
                  return 结果;
           }
           

           public 俘点型 计算面积()
           {
              //计算三角弄面积
           }

四边型类:接口
           public int 计算周长()
           {
               //四边型周长算法
                  return 结果;
           }
           

           public 俘点型 计算面积()
           {
              //计算四边型面积
           }



圆类:接口

          public int 计算周长()
           {
               //圆周长算法
                  return 结果;
           }
           

           public 俘点型 计算面积()
           {
              //计算圆面积
           }


//下面是调用接口的例子


int result1=0;//保存周长结果

俘点型 result2=0.00;//保存面积结果

接口 接口实体;//这个就是接口实体,现在只是声明,并没有new哦,记好这个哦


swith(type)
{
   case"三角型":
       {
             接口实体=(接口)new 三角型类();//这里要注意了,new上个三角型类实体后,要把它强制转换为接口实体哦,自己看看吧,那个强制转换
                break;
        }

      case"四边型":
       {
             接口实体=(接口)new 四边型类();
                break;
        }
      .......
}

//现在通过上面的语句,我们的接口就可以使用了

result1=接口实体.计算周长();//周长结果,不管你是哪种类型的,这就是多态
result2=接口实体.计算面积();//面积结果,不管你是哪种类型的


以上只是一个我大学时的知识,不懂楼主了不了解

一般接口用于像流水线类似的操作上可能会更好些,我个人认为 --------------------编程问答-------------------- 比如说原来是
Public class A: I1
{
...
}

现在要增加一个接口,就写:
Public class A: I1,I2
{
....
}


嗯,我承认我废话。但是lz还问了什么呢?

什么叫做接口多态? --------------------编程问答-------------------- 不知道你说的“接口多态”是个什么东西?

面向对象设计的多态,是指对象在运行时可以表现为不同的类型(inte易做图ce也看作一种类型),用在声明为只有那种类型的变量才能运行的程序中。

接口多态是什么意思? --------------------编程问答-------------------- 实现接口就必须实现接口里的方法??? --------------------编程问答--------------------

    public inte易做图ce IFirstInte易做图ce
    {
        void DoFirstThing();
    }
    public inte易做图ce ISecondInte易做图ce
    {
        void DoSecondThing();
    }
    public class FirstBaseClass : IFirstInte易做图ce, ISecondInte易做图ce
    {
        public void DoFirstThing()
        { 
            //do something
        }
        public void DoSecondThing()
        { 
            //do something
        }
        public void DoFirstBaseThing()
        { 
            //do something
        }
    }


接口多态:


            FirstBaseClass mycl = new FirstBaseClass();
            IFirstInte易做图ce ifirst = mycl;//接口变量
            ISecondInte易做图ce isecond = mycl;//接口变量
            ifirst.DoFirstThing();//接口多态
            isecond.DoSecondThing();//接口多态
            ((FirstBaseClass)ifirst).DoFirstBaseThing();//强制转换
            ((FirstBaseClass)isecond).DoFirstBaseThing();//强制转换
--------------------编程问答-------------------- 去google“接口多态”都不出结果,不知lz何以发明了“接口多态”这个词汇。

例如有两个方法:
public void 点灯(I2 obj){
.....
}

public void 点灯(I9 obj)
{
.....
}

你可以用一个声明为A类型的变量(已经实例化)x作为参数去调用“点灯”方法,这就是多态。编译器知道根据类型的不同而调用不同的方法,尽管多个方法的名字都叫做“点灯”,也能区分到底应该调用哪一个方法。 --------------------编程问答-------------------- 注意我说的是变量x,而它声明为类型A。所以,这不仅仅是重载,同时也是多态。

多态会有不同的形式,但是总之是根据类型之间的“继承”关系来自动判断该调用哪一个方法(或者读写哪一个属性),而不需要你写明。实际上,当你扩展时,你也不可能预先写明。例如在写“点灯”方法时根本不知道将来I2这个类(设计时inte易做图ce和class是不区分的)会被A类继承。 --------------------编程问答-------------------- 继承和多态是一个问题的两面,不要割裂来看。现在几乎所有结构化编程流派,全都用OOPL工具了,所以许多编程“范例”表面上看是用了面向对象语法,实际上花了无数的心思、设计了又臭又长的一些模式去实践所谓“去继承独尊组合”的教条,原因就是他们不理解为什么一个对象既可以继承又可以重写父类方法。他们不理解为什么需要借助已经成功的系统通过扩展来让子类继承父类的系统关联和功能地位,写出的代码就像堆积的垃圾山一样。 --------------------编程问答-------------------- C#入门经典的第三版中,8.2.3多态性 中有讲到一个“接口的多态性”,想必LZ说的是这个吧。 --------------------编程问答--------------------
我承认,我还不明白 --------------------编程问答-------------------- 就像10楼sp1234讲的“继承和多态是一个问题的两面,不要割裂来看”,那就把接口多态性,看成继承的多态性,不就结了吗?
我是这样理解,哈。 --------------------编程问答-------------------- 楼应该问的 就是 多台

父类对象被子类初始化

同样的方法产生的作用不一样 --------------------编程问答-------------------- 看看多态,不甚了解 --------------------编程问答-------------------- 晕,吃完饭上回,再看楼上的几位老大的回贴,感觉自己还真是对多态有点晕晕的感觉 --------------------编程问答-------------------- lz应该说的是   策略设计模式吧。。。。。让类保存接口类型的对象,对象引用的是实现接口的类
--------------------编程问答-------------------- 晕, 看了这么多  都没有看明白LZ的问题到底是什么意思! --------------------编程问答-------------------- 我也没明白lz想表达啥意思。。
友情帮顶一个。。 --------------------编程问答-------------------- 一楼已经把接口的精要都讲得很清楚了,不过楼主如果你是学生的话显然你们老师应该是不会考你们这么深度的问题,如果你只是需要一个类实现多个接口的方法,把一楼的代码改一下贴给你:

inte易做图ce IMyInte易做图ce1
    {
        void Method1();
    }
    inte易做图ce IMyInte易做图ce2
    {
        void Method2();
    }
    class MyClass:IMyInte易做图ce1,IMyInte易做图ce2
    {

        
        //实现IMyInte易做图ce1
        public void Method1()
        {
            Console.WriteLine("Call MyClass Method1");
        }

      //实现IMyInte易做图ce2
        public void Method2()
        {
            Console.WriteLine("Call MyClass Method2");
        }

}

class Program
    {
        static void Main(string[] args)
        {
           //调用接口
            IMyInte易做图ce1 obj1 = new MyClass();
            obj1.Method1();
            IMyInte易做图ce2 obj2 = new MyClass();
            obj2.Method2();
        }
    }

    
--------------------编程问答-------------------- 路过,帮顶下
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,