gpt4 book ai didi

处理具有相同方法名称的不同类的 C# 代码

转载 作者:可可西里 更新时间:2023-11-01 03:04:15 25 4
gpt4 key购买 nike

假设您有两个不同的 C# 类 AB,虽然它们不是从同一基类派生的,但它们共享一些相同的方法名称。例如,这两个类都有一个 connect 和一个 disconnect 方法,以及其他几个方法。我希望能够编写一次适用于两种类型的代码。

这是我想做的一个简化示例:

public void make_connection(Object x)
{
x.connect() ;
// Do some more stuff...
x.disconnect() ;
return ;
}

当然,这不会编译,因为 Object 类没有 connectdisconnect 方法。

有办法吗?

更新。我应该从一开始就明确这一点:我只有 A 和 B 的 DLL,没有源代码。

最佳答案

你可以使用一个界面来完成你想做的事情。

interface IConnectable
{
void Connect();

void Disconnect();
}

AB 都应该实现IConnectable。然后使用 IConnectable 而不是 Object 作为您的方法的参数类型,您应该已经准备就绪。

public void MakeConnection(IConnectable connectable)
{
connectable.Connect();

// Do some more stuff...

connectable.Disconnect();
}

编辑:由于您没有源代码,您有几个选择:

  1. 使用 Max 的解决方案,即使用 dynamic 关键字,(如果您使用的是 .NET 4.0)
  2. 使用 Steve 的使用转换和 if/else 语句的解决方案
  3. AB 创建包装类并让它们实现接口(interface)(或为它们使用公共(public)抽象基类)

例如:

class AWrapper : IConnectable
{
private A obj;

public AWrapper(A obj)
{
this.obj = obj;
}

public void Connect()
{
this.obj.Connect();
}

public void Disconnect()
{
this.obj.Disconnect();
}

// other methods as necessary
}

(BWrapper 类似,只是使用 B 而不是 A)

然后您可以创建包装器并将它们传递给 MakeConnection。这取决于你想怎么做。根据您的情况,一种方法可能比其他方法更容易。

关于处理具有相同方法名称的不同类的 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com