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

C# 如何为类的继承者专门化参数类型?,c#,generics,inheritance,C#,Generics,Inheritance,我想要一个抽象类服务器,它有一个名为Initialize的抽象方法,通过引用传递对IConnection的引用。由此派生的类应该能够专门化IConnection对象,并实现Initialize。这很好,只是我还想有两个抽象方法:DataSent和DataReceived,我想在它们的签名中使用专用类型,可能是通过泛型 这就是我想要的: public override void Initialize(ref IConnection connection) { connection = ne

我想要一个抽象类
服务器
,它有一个名为
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
    }
}
抽象类服务器,其中T:IConnection
{
公共摘要无效初始化(参考IConnection conn);
公共抽象void DataSent(T conn,byte[]data);
接收到公共抽象无效数据(T conn,字节[]数据);
}
类SpecialServer:服务器
{
公共覆盖无效初始化(参考IConnection conn)
{
conn=新的特殊连接(conn);
}
公共覆盖无效数据源(特殊连接连接,字节[]数据)
{
//事物
}
接收到公共覆盖无效数据(特殊连接连接,字节[]数据)
{
//东西
}
}

Initialize()
中的
连接
似乎是一个属性。它是否必须与
DataSent()
DataReceived()
的参数
连接
区分?它不必区分,但为了便于使用,应该区分。否则,如果需要任何状态信息,您将不得不“as”从IConnection中抛出到更专业化的类型。这样做的目的是摆脱SocketAsyncEventArgs.UserToken中的状态标记,专门化整个类型来表示连接的状态。我太傻了,代码中的方差修饰符卡在了一个不合适的地方。我想当你有疑问的时候,再写一遍吧!我现在觉得很傻:)@MichaelJ.Gray没关系。我觉得写这篇文章很傻,因为我觉得我在问题中遗漏了什么。