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

时间:2012-01-19 05:29:29

标签: 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)
{

}

有一种简单的方法吗?几天以来,我一直在玩仿制药,而且我在网上谈过的任何人都没有能够提出解决方案。

对于那些认为你看到解决方案的人:当我尝试使用泛型时,它非常复杂,并且由于方差问题,它只是不想正常工作。

1 个答案:

答案 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
    }
}