C# 如何将方法返回类型设置为与其当前所在的类相同
中级C#程序员在这里。我正在编写一个网络包装器,希望每种类型的数据包都能够定义自己的“OpenPacket”方法,该方法将接收与当前类相同类型的类的参数。我还需要另一个方法“WriteToPacket”,它将返回与其当前类相同类型的数据包 MessagePacket类的WriteToPacket将返回MessagePacket。我将使用继承并只返回一个数据包类型,但每个数据包都有不同的变量。此外,我正在将其开发为一个库,因此我希望能够在dll之外定义新的数据包类型 我有一个包类型的接口C# 如何将方法返回类型设置为与其当前所在的类相同,c#,class,networking,C#,Class,Networking,中级C#程序员在这里。我正在编写一个网络包装器,希望每种类型的数据包都能够定义自己的“OpenPacket”方法,该方法将接收与当前类相同类型的类的参数。我还需要另一个方法“WriteToPacket”,它将返回与其当前类相同类型的数据包 MessagePacket类的WriteToPacket将返回MessagePacket。我将使用继承并只返回一个数据包类型,但每个数据包都有不同的变量。此外,我正在将其开发为一个库,因此我希望能够在dll之外定义新的数据包类型 我有一个包类型的接口 publ
public interface IPacket_Type<T> where T : class
{
T OpenPacketFromMessage(NetIncomingMessage msg) ;
NetOutgoingMessage PackPacketIntoMessage(NetOutgoingMessage msg, T packet);
}
公共接口IPacket\u类型,其中T:class
{
T打开packetfromMessage(NetIncomingMessage msg);
NetOutgoingMessage PackPacketIntoMessage(NetOutgoingMessage msg,T packet);
}
我把它当作包的一部分
public class TestPacket : Packet, IPacket_Type<TestPacket> {
public int testInt;
public TestPacket(string packet_name) : base(packet_name){}
public TestPacket OpenPacketFromMessage(NetIncomingMessage msg)
{
TestPacket packet = new TestPacket(packet_name);
packet.testInt = msg.ReadInt32();
return packet;
}
public NetOutgoingMessage PackPacketIntoMessage(NetOutgoingMessage msg, TestPacket packet)
{
msg.Write(packet_name);
msg.Write(packet.testInt);
return msg;
}
}
公共类测试包:包,IPacket\u类型{
公共智力测验;
publictestpacket(字符串packet\u name):基(packet\u name){}
公共测试包OpenPacketFromMessage(NetIncomingMessage消息)
{
TestPacket数据包=新的TestPacket(数据包名称);
packet.testInt=msg.ReadInt32();
返回包;
}
公共NetOutgoingMessage包PackageToMessage(NetOutgoingMessage消息,测试包)
{
msg.Write(数据包名称);
msg.Write(packet.testInt);
返回味精;
}
}
在服务器端收到类名后,我希望能够实例化这样的类。例如,创建一个TestPacket实例,而不是一个数据包实例。我考虑这样做的一种方法是创建一个返回其当前类型的包类,因此允许我将其用作基,始终返回类的类型
任何帮助都将不胜感激,谢谢 在下面的代码中,我将向您展示一些如何使用同一类实例的示例:
公共类示例{
//此方法返回示例类的相同实例
公共示例ReturnSampleInstance(){
归还这个;
}
//此方法使用其他数据创建类的全新实例
public Sample ReturnAnotherSampleInstance(){
var样本=新样本();
//使用新的示例实例执行一些逻辑或填充一些数据
返回样品;
}
//此方法接收同一类的实例并返回它
公共示例ReceivesSampleInstance和Returnit(示例sampleInstance){
返回样本实例;
}
}
如果希望使用接口,并且接口的方法将返回类型作为实现类,则可以按如下方式执行:
//通用接口
公共接口很简单{
t使用接口()实现GetCurrentInstance;
}
//类,该类实现接口并将自身作为泛型参数传递给ISample接口
公共类示例:ISample{
//此方法返回示例类的相同实例
公共示例ReturnSampleInstance(){
归还这个;
}
//此方法使用其他数据创建类的全新实例
public Sample ReturnAnotherSampleInstance(){
var样本=新样本();
//使用新的示例实例执行一些逻辑或填充一些数据
返回样品;
}
//此方法接收同一类的实例并返回它
公共示例ReceivesSampleInstance和Returnit(示例sampleInstance){
返回样本实例;
}
//通过接口的方法获取类的当前实例
公共示例GetCurrentInstanceUsingAnterface(){
归还这个;
}
}
你好,谢谢你的回复!是的,我最初考虑过这样做,但现在每个数据包都使用一个接口,其中需要描述返回方法。我已经使用了泛型,但是稍后我需要检索类类型。同样的事情也可以使用泛型类型来完成。你能提供更多的上下文吗?我想我已经明白你想要什么了。如果您想让界面返回实际实现的实例,可以使用通用参数TImplementation来实现,我编辑了代码,向您展示了我如何使用更具体的信息更新文章。你能看一看吗?如果你让包基类类型泛型,以接受一个实现,就像接口一样?