gpt4 book ai didi

c# - 如何为类的继承者专门化参数类型?

转载 作者:行者123 更新时间:2023-11-30 18:01:38 26 4
gpt4 key购买 nike

我想要一个抽象类 Server,它有一个名为 Initialize 的抽象方法,它通过引用传递对 IConnection 的引用。从那里,派生自它的类应该能够从本质上专门化 IConnection 对象及其 Initialize 的实现。这很好,除了我还想有两个抽象方法:DataSentDataReceived 并且我想在它们的签名中使用专门的类型,也许是通过泛型。

我想要这样的东西:

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/

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