我想要一个抽象类 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)
{
}
有没有简单的方法来做到这一点?几天来我一直在研究泛型,但在网上与我交谈过的人都无法提出解决方案。
对于那些认为自己看到了解决方案的人:当我尝试使用泛型执行此操作时,它非常复杂,并且由于方差问题,它只是不想正常工作。
最佳答案
为什么不只是这个?
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
}
}
关于c# - 如何为类的继承者专门化参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921460/