大鸟:比如,我们定义了一个基类的方法,它需要一个 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中最垃圾的设计。