当前位置: 首页 > 知识库问答 >
问题:

如何在C#中为接口提供新的行为?

尉迟墨竹
2023-03-14

我想修改实现特定接口的类实例的行为。修改由修改器对象执行。最终,原始类实例仍应保留其所有其他行为。设置如下:

接口和实现类如下所示:

interface IFuncA
{
  double DoSomethingA();
}
interface IFuncB
{
  int DoSomethingB(string str);
}

class ImplementsAB : IFuncA, IFuncB
{
  void DoSomethingA() => 3.14;
  int DoSomethingB(string str) => str.Length;
}

有一些修改器类根据下面的psuedoCode工作。这是我想不明白的部分。

// Unknown how to make this work.
class ModifiesFuncB
{
  int Multiplier;
  int ModifiedDoSomethingB(string str) => Multiplier * str.Length;

  ModifiesFuncB(int multiplier)
  {
    Multiplier = multiplier;
  }

  IFuncB Modify(IFuncB funcB)
  {
    // This is pseudo-code.
    funcB.DoSomethingB = ModifiedDoSomethingB;
  }
}

下面是一些示例代码,使用修饰符修改实现IFUNCB接口的对象上的行为。

ImplementsAB myObj = new ImplementsAB();
ModifiesFuncB modifier = new ModifiesFuncB(2);

Console.WriteLine(myObj.DoSomethingA());        // Outputs 3.14
Console.WriteLine(myObj.DoSomethingB("hello")); // Outputs 5

myObj = modifier.Modify(myObj);

Console.WriteLine(myObj.DoSomethingA());        // Outputs 3.14
Console.WriteLine(myObj.DoSomethingB("hello")); // Outputs 10

是否有解决方案、软件设计模式或通用方法来完成此操作?这可能是一个完全错误的方式,但示范我应该做的将是一个很大的帮助。提前道谢!

共有1个答案

勾向文
2023-03-14

您可能正在寻找

Decorator模式-“动态地将附加的resposities附加到一个对象。Decorator提供了一个灵活的替代子类化来扩展功能。”(Gamma,Erich,等人,“可重用的面向对象软件的元素”,《设计模式》,马萨诸塞州:Addison-Wesley Publishing Company(1995))。

 类似资料:
  • 有些接口没有被开放,但是也想要通过网关来访问,SOP提供一个固定的请求格式来访问。 请求格式: http://ip:port/rest/服务id/your_path,其中http://ip:port/rest/为固定部分,后面跟微服务请求路径。 下面是一个微服务的接口例子 @RestController @RequestMapping("food") public class Traditiona

  • 为了防止实现细节泄漏,可以实现,而不是返回,然后需要从接口实现。因此,无论内部数据结构如何管理,对元素的访问都是通过进行的。 对于Java8,可能希望将添加到。(另请参阅《Java8lambdas》一书中关于支持的建议)。虽然添加方法并不困难(我也读过关于为什么Iterable不提供流的问题),但奇怪的是Java没有为添加接口来镜像思想。(好吧,可能有一个不同的名称,因为是为了永远使用CORBA的

  • 所以我有一个叫做PlayingCard的类,它创建了一个包含int秩和int花色(模拟扑克牌)的对象。 然后我需要创建一个名为PackBuilder的程序,该程序应该模拟使用我的类构建一副卡片。 问题是我不知道如何给每个对象起一个新名字。我想到了类似这样的数组: 但是它说cardDeck已经定义好了(我不确定我是否做得不对,或者使用数组是否不起作用) 我想要的命名方案类似于“card1”“card

  • 文件位置:GatewayWorker/Lib/Gateway.php LibGateway类是Gateway/BusinessWorker模型中给客户端发送数据的类。 提供了单发、群发以及关闭客户端连接的接口。 提示 GatewayWorker提供的所有接口都是支持分布式调用的,所以业务代码不需要任何更改,直接就可以分布式部署。

  • 它还说在上面的代码注释,URL必须是白名单,我如何才能创建电子邮件和添加到firebase白名单链接? 我很感激你的好心帮助。 提前谢了。

  • 本文向大家介绍pybind11: C++ 工程提供 Python 接口的实例代码,包括了pybind11: C++ 工程提供 Python 接口的实例代码的使用技巧和注意事项,需要的朋友参考一下 C/C++ 工程提供 Python 接口,有利于融合进 Python 的生态。现在 Python 在应用层,有其得天独厚的优势。尤其因为人工智能和大数据的推波助澜, Python 现在以及未来,将长期是最