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

标签 c# generics inheritance

我想要一个抽象类 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/

相关文章:

c# - 从 WinForms WebBrowser 控件获取页面高度

c# - 一个类中的测试是否保证不会同时执行?

Java递归泛型类通配符匹配

c# - 单例对象中的多个 Elasticsearch 连接在 Controller 类中获取一个特定的单例 Elasticsearch

c# - 如何以通用方式耦合两个类?

java - 如何将通用数据类型传递给方法以及如何创建正确的方法来使用它?

java - 一个接口(interface)有两个类型参数。我可以实现两种类型相同的接口(interface),以便它们兼容吗?

java - java中的装饰器设计模式

java - 接口(interface)、继承和子类型

c# - 如果我们只有一系列没有独立工作的调用,MVC4 async await 有什么好处?