【问题标题】:How do I replace a method from base class in C#?如何在 C# 中替换基类中的方法?
【发布时间】:2023-01-08 21:21:38
【问题描述】:

我有一个名为Broadcaster 的基类,它可以使用 TCP 广播任何信息(字节数组)。现在我想创建一个名为ScreenBroadcaster 的类,它派生自Broadcaster,并且可以播放屏幕截图。

但是我遇到了以下问题。类 Broadcaster 有一个方法 Broadcast(byte[] data) 应该在 ScreenBroadcaster 中替换为 Broadcast() (它应该从屏幕上播放数据)。我不知道该怎么做,请帮助我!

我知道关键字override,但它不允许更改要覆盖的方法的签名,因此在这种情况下不起作用。

【问题讨论】:

  • 是的,你不能改变方法的签名,但你可以创建一个新的Broadcast(),它会用屏幕上的数据调用base.Broadcast(byte[] data)。这样,当你使用那个类时,你可以调用ScreenBroadcaster.Broadcast(),它会自动从屏幕上获取数据并广播,或者ScreenBroadcaster.Broadcast(byte[] data)

标签: c# inheritance


【解决方案1】:

你不能实施确切地你想要什么。为什么?考虑这个示例代码:

byte[] data = new byte[] { 0, 1, 2, 3 };
Broadcaster bcaster = new ScreenBroadcaster();
bcaster.Broadcast(data);

这是绝对正确的。任何对 Broadcaster 的引用都可以引用 ScreenBroadcaster,因为它派生自 Broadcaster。但是ScreenBroadcaster(如果它是按照你想要的方式实现的)没有在这里调用的方法Broadcast(byte[])执行环境(.NET Framework)应该做什么?不知道。所以你想要的在 C# 中是不允许的。

但你为什么不离开ScreenBroadcaster中的方法Broadcast(byte[] data)?您甚至可以在 Broadcast() 中使用它来避免代码重复,如 cmets 中所述。

public void Broadcast() {
  byte[] data;
  // Fill "data" with an image from screen
  Broadcast(data);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多