【问题标题】:How to instantiate an extended class with a different base implementation?如何实例化具有不同基本实现的扩展类?
【发布时间】:2013-04-09 01:05:53
【问题描述】:

我正在使用包含对象及其扩展的基类的二进制文件。我想实例化该对象,但要让它使用我自己的基类实现。我可以在基类中看到我需要扩展哪些方法。

问题在于基类实现了一个名为“WriteFeed”的方法,该方法需要网络连接并将数据写入网络流。我希望它使用我的实现,以便 WriteFeed 可以转储数据到控制台。

我无法更改现有的二进制文件,只能更改我使用和实例化它的方式。

【问题讨论】:

  • 我无法想象有什么办法可以做到这一点。

标签: c# .net inheritance reflection


【解决方案1】:

我唯一的建议是使用复合方法。我不确定这是否能满足您的需求或者您是否具有可见性访问权限,但它可能会起作用。

public class SomeBaseClassInSomeBinary
{
   protected virtual void Method1(...) {}
   protected virtual void WriteFeed (...) {}
} 

public class SomeClassInSomeBinary: SomeBaseClassInSomeBinary
{
   protected override void Method1(...) { base.Method1(...); }
   protected override void WriteFeed (...) { base.WriteFeed (...); }
} 

// **** your code
public class MyCode: SomeBaseClassInSomeBinary
{
     private SomeClassInSomeBinary Composite = new SomeClassInSomeBinary();

     protected override void Method1(...) { Composite.Method1(...); }
     protected override void WriteFeed (...) { your implementation }
}

}

您现在需要做的就是使用您的对象。

希望这会有所帮助。

【讨论】:

  • 谢谢你的想法,但我认为这行不通。问题是实例化的类调用了它自己的 base.WriteFeed() 这就是为什么我需要换掉基类的实现。
  • 没问题。很难确切地看到您的问题/担忧。我随时为您提供帮助。
  • 我实际上正在做的只是将基类更改为没有任何专门的“写入”方法,而是传入一个写入适配器(或处理程序,如果您更喜欢该术语)。这意味着当我在本地测试它时,我将传递一个测试适配器,而在生产中我将传递生产适配器代码。
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 2021-02-19
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多