在c#中扩展两个基类
本文关键字:两个 基类 扩展 | 更新日期: 2023-09-27 18:03:48
我知道你不能在c#中扩展两个基类。我想做的是最终扩展默认Windows窗体类的功能,我也不能这样做,因为它不是开源的。
所以我所有的表单都有5个共同的功能。有大量的冗余代码。最重要的是,这个问题正在向外螺旋,因为我有其他类必须调用这些重复的函数。
一个基本的例子如下:
public class A : Form {
B b;
public A() {
b = new B(this);
}
private void back() {
b.go();
}
}
public class B {
public void go(Object obj)
{
//if obj is of type A
//call (A) obj.back();
//if obj is of type C
//call (C) obj.back();
//etc...
}
我像这样在类之间传递的原因是因为它是一个MVC应用程序,所以不同的函数应该在不同的地方,以便于维护。
这样做的结果是,它使得它非常非常难以维护。有没有什么我没想到的聪明方法?
感谢任何建议,
谢谢。
对于这个特定的问题,使用一个接口:
interface IGoBackAndForth { void back(); }
public class A : Form, IGoBackAndForth { }
public class C : ..., IGoBackAndForth { }
public void go(Object obj)
{
var baf = object as IGoBackAndForth;
if (baf != null) baf.back();
}
您不仅需要扩展System.Windows.Forms.Form,还需要应用您自己的接口IHaveAllThoseNavigationFunctions
——或者您想叫它什么就叫什么。
public interface ISupportAllThoseNavigationFunctions
{
NavigableWindowsForm PreviousLocation { get; set; }
void go(NavigableWindowsForm destination);
void back();
}
public partial class NavigableWindowsForm : Form, ISupportAllThoseNavigationFunctions
{
private NavigableWindowsForm PreviousLocation { get; set; }
go(NavigableWindowsForm destination)
{
//...
}
back()
{
go(PreviousLocation);
}
}
public class FormA : NavigableWindowsForm
{
// todo: implement form A specifics
}
public class FormB : NavigableWindowsForm
{
// todo: implement form B specifics
}
这将限制你的重复和暴露所有必要的函数在你现在拥有的NavigableWindowsForm的基类