【发布时间】:2020-12-24 02:37:59
【问题描述】:
所以我有一个应用程序将 websocket 请求发送到服务器并记录响应以供以后查看。我希望用户能够检查他们想要记录的响应。我有获取所有不同响应类型的方法,并且每种响应类型都实现了 IWebSocketResponseData。然后我有一个方法可以根据传入的 CheckBoxData 列表返回所有响应类型,它会从服务器获取所有已检查的响应,并且应该返回 List
public async Task<List<IWebSocketResponseData>> GetData(List<CheckBoxData> dataToGet)
{
var toReturn = new List<IWebSocketResponseData>();
foreach (var data in dataToGet)
{
var method = GetType()
.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
.SingleOrDefault(m => m.ReturnType.GenericTypeArguments.Contains(data.ResponseType));
IWebSocketResponseData response = await (Task<IWebSocketResponseData>)method.Invoke(this, null);
toReturn.Add(response);
}
return toReturn;
}
public async Task<ModuleInfoResponse> GetModuleInfo()
{
await SendAsync(JsonConvert.SerializeObject(new
{
type = "fetch",
item = "modinfo"
}));
return await ReceiveAsync<ModuleInfoResponse>();
}
public async Task<NetworkSettingsResponse> GetNetworkSettings()
{
await SendAsync(JsonConvert.SerializeObject(new
{
type = "fetch",
item = "network"
}));
return await ReceiveAsync<NetworkSettingsResponse>();
}
GetData 下面的两个方法是将从 GetData 方法调用的方法的示例。请记住 ModuleInfoResponse 和 NetworkSettingsResponse 都实现了 IWebSocketDataResponse 这基本上只是一个标签,即
public interface IWebSocketDataResponse { }
这给了我一个 InvalidCastException 尝试从任何具体响应类(即 ModuleInfoResponse、NetworkSettingsResponse...)进行转换...为什么?
编辑:我意识到方法没有空检查,因为我知道我会为此得到一些热量
【问题讨论】:
标签: c# .net polymorphism