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没关系。我觉得写这篇文章很傻,因为我觉得我在问题中遗漏了什么。