我发现自己需要类似这样的东西:
// This could just as well be a concrete class.
//
// It is an interface for the sake of this example.
public interface Quark
{
void Do();
}
public class Strange : Quark
{
public virtual void Do()
{
// Something is done
}
public void DoSpecificThing()
{
MessageBox.Show("Specific Thing!");
}
}
public class Charm : Quark
{
public virtual void Do()
{
// Something else is done
}
public void DoAnotherSpecificThing()
{
MessageBox.Show("Another Specific Thing!");
}
}
在另一个文件中:
internal class ReUsableCode<BaseType> : BaseType // <- not allowed
{
public override void Do()
{
// Let's pretend this is around 2000 lines of
// 90's-style Win32 message spaghetti.
MessageBox.Show(base.GetType().ToString() + " did!");
base.Do();
}
}
public class LibraryStrange : ReUsableCode<Strange>
{
}
public class LibraryCharm : ReUsableCode<Charm>
{
}
在某个函数中:
LibraryStrange imStrange = new LibraryStrange();
LibraryCharm imCharmed = new LibraryCharm();
imStrange.Do();
imStrange.DoSpecificThing();
imCharmed.Do();
imCharmed.DoAnotherSpecificThing();
在C++中,我只需要创建一个模板就可以实现上述功能。
由于C#不支持多重继承,并且出于上述原因,这在C#中是不可能实现的。那么,如何在不复制和粘贴或强制所有内容继承自单个基类的情况下重用词汇上相同的实现呢?
这旨在减少库中所有用户控件所继承的System.Windows.Forms
对象并以完全相同的方式重写WndProc
的维护工作量(代码都复制粘贴了,我正在尝试消除或集中它们)。
注意:我的C#工作量不是很大,所以如果这个问题看起来很基础或者滥用了这个领域的术语,请谅解。