当前位置: 代码迷 >> C# >> 关于接口和抽象类的小疑点
  详细解决方案

关于接口和抽象类的小疑点

热度:69   发布时间:2016-05-05 03:58:47.0
关于接口和抽象类的小问题?
本帖最后由 pengwei0417 于 2015-04-21 21:07:48 编辑
我定义一个抽象类:

abstract class tool
    {
      //一个抽像方法  使用
       public abstract void Use();//这个方法没有设定参数
    }


我的问题是继承它的类的Use方法都是固定的没有参数的形式,但具体情况是有些类的Use方法是需要使用参数的,使用的情况不确定,如果在派生类中使用Use(string str)会提示没有找到适合的方法来重写的异常,这种情况如何处理。

------解决思路----------------------
按你这个有的需要,有的不需要,那他们就不是一种情况
对于有需要的,你应该通过其它途径来传递值,比如构造函数就传入值,或者公开某个属性来接收
否则的话,你就不应该认为它们有多态的关系
------解决思路----------------------
告诉你一个面向对象设计的概念。实际上如果非要“纯粹”地去设计方法,所有的方法都应该是没有参数的。然后方法运行的环境变量——是在方法所宿主的对象的属性和字段定义的。也就是说,方法中使用 this.xxxx 来访问当前对象的属性,这就是对象方法的运行机制。而当你发现一定需要参数时,往往意味着对象是可以细分的,例如需要将方法提取出去并且发明新的对象(类),直到所有方法都没有参数。

当然我们都很懒,所以设计了许多有参数的方法。

基于这个认识再来看继承问题:子类本来就应该一直沿用 Use 接口方法语法和语义。子类扩展时,恰好是“tool子类”的属性需要扩展,是不是 Use 方法参数需要扩展。
------解决思路----------------------
重写方法加new关键字不知道行不行
------解决思路----------------------
派生类也可以定义自己的方法,比方说再定义一个带参数的方法,一般来讲,这种情况就不要从一个抽象类继承了,或者修改抽象类,或者修改派生类
  相关解决方案