比方说,你有两个不同的C#类A,并B说,虽然不是来自同一个基类派生你分享一些对方法的同名.例如,两个类都有一个connect和一个disconnect方法,以及其他几个类.我希望能够编写一次适用于这两种类型的代码.
这是我想要做的简化示例:
public void make_connection(Object x)
{
x.connect() ;
// Do some more stuff...
x.disconnect() ;
return ;
}
Run Code Online (Sandbox Code Playgroud)
当然,这不会编译,因为Object类没有connect或disconnect方法.
有没有办法做到这一点?
UPDATE.我应该从一开始就明确这一点:我只有A和B的DLL,而不是源代码.
Zac*_*son 26
您可以使用界面来完成您想要执行的操作.
interface IConnectable
{
void Connect();
void Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
双方A并B应实施IConnectable.然后使用IConnectable而不是Object作为方法的参数类型,你应该全部设置.
public void MakeConnection(IConnectable connectable)
{
connectable.Connect();
// Do some more stuff...
connectable.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
编辑:由于您没有源代码,因此您有以下几种选择:
dynamic关键字,(如果您使用的是.NET 4.0)if/ elsestatements 的解决方案A和B并让他们实现接口(或使用通用抽象基类为他们)例如:
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
}
Run Code Online (Sandbox Code Playgroud)
(BWrapper会是相似的,只是使用B而不是A)
然后你可以创建包装器并将它们传递进去MakeConnection.这取决于你想要的方式.根据您的情况,一种方法可能比其他方法更容易.
Max*_*Max 11
这将在C#4中起作用:
public void make_connection(dynamic x)
{
x.connect() ;
// Do some more stuff...
x.disconnect() ;
return ;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7696 次 |
| 最近记录: |