繁体   English   中英

在C#替代中扩展两个基类

[英]Extending two base classes in C# alternative

我知道你不能在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的基类中公开所有必要的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM