在不使用多重继承的情况下避免代码重复
Posted
技术标签:
【中文标题】在不使用多重继承的情况下避免代码重复【英文标题】:Avoiding code repetition without using multiple inheritance 【发布时间】:2013-01-02 06:28:46 【问题描述】:class A : N
void sinefunc()
//some stuff here
class B : N
void sinefunc()
//some stuff here
class C : N
void sinefunc()
//some stuff here
sinefunc()
是一个常用函数。但是,A、B 和 C 类存在于不同的
解决方案下的项目。这些类已经继承了一个公共类 N,现在,
-
为避免代码重复,
sinefunc()
可以移到这些类之外。
但是,由于不允许多重继承。什么是有效的方法或
使功能通用的可行方法? (请注意,我不想把sinefunc()
在 N 班。它已经写好了,我不想打扰那个班。
【问题讨论】:
【参考方案1】:(请注意,我不想将 sinefunc() 放在 N 类中。它的 已经写好了,我不想打扰那堂课)
如果不将函数移至 N
类,则无法这样做。您可以拥有一个具有方法签名的接口,但是您必须在每个类中定义实现。
一种方法是为类N
编写一个扩展方法,您可以在继承的类中使用它。
编辑:
定义一个静态类来保存扩展方法,例如:
public static class ExtensionClass
public static void sinefunc(this N obj)
// your code
以后你可以这样称呼它:
static void Main(string[] args)
A objA = new A();
objA.sinefunc();
记住要包含保存扩展方法的命名空间,否则它将不可见。您可以阅读更多信息:Extension methods MSDN
【讨论】:
扩展方法是在不更改 N 的情况下将函数添加到 N 的多个子类的“C#onic”方式。也就是说,如果您有多个具有相同功能的子类,它似乎真的将其移入 N是正确的做法。 感谢您告诉我扩展方法 Habib。这里很新。一些代码示例将不胜感激。 感谢 Habib.. 这很有帮助。现在正在尝试实施。【参考方案2】:您可以创建一个中间类作为N
的外观:
class A : X
class B : X
class C : X
class X : N
protected void sinefunc()
//some stuff here
【讨论】:
你的意思是多级继承? 谢谢你的另一种方式!【参考方案3】:如果 sinefunc() 是一个普通函数,你为什么不把它放到另一个类中。例如,您可以在 Utility 类中将其设为静态方法
【讨论】:
以上是关于在不使用多重继承的情况下避免代码重复的主要内容,如果未能解决你的问题,请参考以下文章