日期:2014-05-20  浏览次数:20911 次

接口应用的疑惑
大鸟:比如,我们定义了一个基类的方法,它需要一个 Integer 参数,而后来又确定该参数应该为 Long 数据类型。我们无法安全更改原始类,因为为从原始类派生的类所设计的应用程序可能无法进行正确编译。这一问题会扩大化,因为单个基类会影响几百个子类。”
菜鸟:“那用重载原始类并采用一个Long类型的参数,不就能解决这个问题了吗?”
大鸟:“这个么?”我想了一下,“可是,这样不一定能达到满意的效果,因为一个派生类可能需要对采用整数的方法进行重写,如果取 Long 数据类型的方法不能被重写,该派生类可能无法正常运行。”
菜鸟:“那用接口怎么做?”
大鸟:“办法就是发布接受新数据类型的更新接口。"

原始类:
  public class BaseClass   
  {   
  public virtual void MethodA(int a_i_parameter)   
  {   
  Console.WriteLine("BaseClass:MethodA");   
  }   
  }

请教一下大家,上面所说的发布接受新数据类型的更新接口做法是怎样的?大家交流交流帮忙解决我的困惑。

我的想法是:保留原来int参数的方法,然后在以后需要用到long参数的方法就继承接口实现long参数方法的重写,还是在基类直接继承新建的接口,然后再由子类自由重写。


public interface myInterface
{
 void MethodA(long a_l_parameter)   
}
------解决方案--------------------
在你需要这个功能的地方实现
引用:
新建的接口


而不是在最顶层去实现或者用接口去继承,如果你这么做了,你依然要更改成百上千的类。

接口的意思是:功能。

------解决方案--------------------
定义相关接口, 需要的类实现该接口
------解决方案--------------------
你的话题很有意思,让我想起了以前我们讨论的一个话题(CSDN上找不到了),意思是这样的:

 class A
 {
    public void ExeC()
   {
     ... 
   }
 }
  class B:A
  {
    public new void ExeC()
    {
     ...
    }

在使用B时如果为
   A t=new B();
   t. ExeC();
    这时执行的是基类的方法,而如果我们这样定义
[code]
  Interface IA 
  {
    void ExeC();
  }
  
  class A
  {
    public  void ExeC()
   {
     ... 
   }
  }
  class B:A,IA
  {
     public new void ExeC()
     {
      ... 
     }
   }
[/code]
 如果使用
   IA t=new B();
   t.ExeC() 运行的是B中的方法。很有趣的。
------解决方案--------------------
那个叫做“重载原始类”?真够乱的。

基本上这是.net中最垃圾的设计。