我希望有一个抽象类Server
,其中一个名为Initialize
的抽象方法通过引用传递对IConnection
的引用。从那里,从中派生的类应该能够基本上专门化IConnection
对象及其Initialize
的实现。这很好,除了我还想有两个抽象方法:DataSent
和DataReceived
,我想在签名中使用特殊类型,也许是通过泛型。
这就是我想要的东西:
public override void Initialize(ref IConnection connection)
{
connection = new MySpecialConnection(connection);
}
public override void DataSent(MySpecialConnection connection, byte[] data)
{
}
public override void DataReceived(MySpecialConnection connection, byte[] data)
{
}
有一种简单的方法吗?几天以来,我一直在玩仿制药,而且我在网上谈过的任何人都没有能够提出解决方案。
对于那些认为你看到解决方案的人:当我尝试使用泛型时,它非常复杂,并且由于方差问题,它只是不想正常工作。
答案 0 :(得分:1)
为什么不呢?
abstract class Server<T> where T : IConnection
{
public abstract void Initialize(ref IConnection conn);
public abstract void DataSent(T conn, byte[] data);
public abstract void DataReceived(T conn, byte[] data);
}
class SpecialServer : Server<SpecialConnection>
{
public override void Initialize(ref IConnection conn)
{
conn = new SpecialConnection(conn);
}
public override void DataSent(SpecialConnection conn, byte[] data)
{
//things
}
public override void DataReceived(SpecialConnection conn, byte[] data)
{
//stuff
}
}