从Xamarin.iOS的泛型基类继承错误

本文关键字:基类 继承 错误 泛型 Xamarin iOS | 更新日期: 2023-09-27 18:07:28

我正在开发Xamarin。iOS应用程序,它将通过RESTful API连接到web服务。我目前正在为API客户端层编写响应和业务对象,但是我遇到了一个问题。

考虑以下两个示例API结果:

{  
  "data":{  
    "id":"gwaMR",
    "animated":false,
    "size":11762,
    "link":"http:'/'/i.imgur.com'/gwaMR.jpg"
  },
  "success":true,
  "status":200
}

错误

{  
  "data":{  
    "error":"Unable to find an image with the id, vycVV",
    "request":"'/3'/image'/vycVV",
    "method":"GET"
  },
  "success":false,
  "status":404
}

因为成功的数据信息和错误细节在各自的场景中都共享"data"键,所以我用c#编写了以下对象:

public class BaseBusinessObject<D> where D:BaseBusinessObjectData
{
    public D Data { get; set; }
    public int Status { get; set; }
    public bool Success { get; set; }
}
public class BaseBusinessObjectData
{
    public string Error { get; set; }
    public string Method { get; set; }
    public string Request { get; set; }
}
public class ImageObject : BaseBusinessObject<ImageObjectData>
{
}
public class ImageObjectData : BaseBusinessObjectData
{
    public string ID { get; set; }
    public bool Animated { get; set; }
    public int Size { get; set; }
    public string Link { get; set; }
}

在进行API调用时(使用RestSharp的自动对象反序列化),我提供对象类型ImageObject作为预期的结果类型。然而,我实际上还不能走那么远。当尝试编译这些响应对象类型时,我得到以下错误:

/用户/willseph/GitHub/回购/浏览器名称/API/API.cs(46255 +):错误CS0305:使用泛型类型"AppName"。BaseBusinessObject"要求' 1'类型参数(CS0305)

但是,当我将相同的代码放入标准c#库(仍然在Xamarin Studio中)时,它编译得很好。

作为一种解决方案,我可以通过使用隐藏和一个新的Data成员从代码中删除泛型:

public class BaseBusinessObject
{
    public BaseBusinessObjectData Data { get; set; }
    public int Status { get; set; }
    public bool Success { get; set; }
}
public class BaseBusinessObjectData
{
    public string Error { get; set; }
    public string Method { get; set; }
    public string Request { get; set; }
}
public class ImageObject : BaseBusinessObject
{
    public new ImageObjectData Data { get; set; }
}
public class ImageObjectData : BaseBusinessObjectData
{
    public string ID { get; set; }
    public string Link { get; set; }
    public int Size { get; set; }
    public bool Animated { get; set; }
}

编译得很好,并产生预期的行为。有人知道是什么导致了这个问题吗?

从Xamarin.iOS的泛型基类继承错误

我尝试在包含原始错误类(虽然重命名以不引起冲突)的解决方案旁边添加一个单独的临时文件,并且它似乎正在编译。

我不确定是什么问题,但我想这是我的电脑引起的一些奇怪的侥幸或异常。