我知道你不能在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应用程序,因此假设不同的函数位于不同的位置以便于维护。
由于这样做,它使维护非常困难。有没有一些聪明的方法,我还没有?
任何建议表示赞赏,
感谢。
答案 0 :(得分:3)
对于此特定问题,请使用界面:
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();
}
答案 1 :(得分:0)
您需要扩展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的基类中公开所有必要的函数。