无法将源类型转换为目标类型

2024-02-02

我已经让这个子类实现了我的接口,并且在满足合同方面没有错误。但是,当我尝试在子类的构造函数中设置当前会话时,当它尝试将变量类型与 GetCurrentSession() 返回的类型进行比较时,我收到此编译时错误:

“无法将源类型 IAPISession 转换为目标类型 FacebookSession”

好吧,为什么? Facebook 是一个 IAPISession...对吗???多态性在起作用是我的想法,所以它应该对这种比较感到满意。这里不确定。

public class FacebookSession : IAPISession
{
    private FacebookSession currentSession;

    private FacebookSession()
    {
        currentSession = GetCurrentSession();
    }

    ...more code

    public IAPISession GetCurrentSession()
    {
        // my logic is here...whatever that may be
    }
     ... more code
 }

Updated

这是我的实际界面:

public interface IAPISession
{
    #region Properties

    int SessionID { get; }

    string UserID { get; }

    bool SessionHasExpired { get; }

    DateTime ExpirationDate { get; }

    void LogOut(); // expires the session & sets SessionHasExpired

    #endregion Properties

    #region Methods

    IAPISession GetCurrentSession();

    #endregion Methods

}

该接口将在我们的任何 API 包装器项目中使用(例如 FlickrSession 等)


是的,这需要明确的演员表。您正在接收通用(界面)会话,但您想要使用特定的(Facebook)方法/字段。

You might设想一个场景GetCurrentSession()返回不同类型的IAPISession!

  • use currentSession = (FacebookSession) GetCurrentSession();

  • use a try围绕演员的块 抓住这个可能性。我假设你的 如果不是这样,代码会变得混乱 一种FacebookSession, 那么你 需要处理这种情况。

Addition

只是为了澄清:

FacebookSession fbSess;
IAPISession     genSess;
FacebookSession getFbSession() { ... return this; }
IAPISession     getSession()   { ... return this; }

genSess = getSession();        // legal
genSess = getFbSession();      // legal - implicit cast works as FacebookSession 
                               // is always a kind of IAPISession
fbSess  = getFbSession();      // legal
fbSess  = getSession();        // ILLEGAL - not all IAPISession's will be
                               // kinds of FacebookSession
fbSess  = (FacebookSession) getSession();
                               // legal, but might throw a class cast exception
                               // if it isn't a FacebookSession.

同样,

genSess = fbSess;              // ok, implicit cast to generic type
fbSess  = genSess;             // ILLEGAL, it may not be a FacebookSession
fbSess  = (FacebookSession) genSess; 
                               // legal but can throw an exception
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将源类型转换为目标类型 的相关文章

随机推荐

  • 为什么在将 next.js 与环境变量一起使用时我的 API 密钥可见?

    我遵循 next js 文档并在 now 服务器上添加了自定义 api 密钥 问题是当我跑步时now dev然后转到 源 选项卡 我可以在那里看到我的 api 密钥 api 密钥保存在 env build文件 这是我的代码 index js
  • 在mysql中查找数据库中具有最大行数的表

    正如问题标题所示 我想找到特定数据库中具有最大行数 条目 的表 我已经能够使用下面的查询提取特定数据库中所有表的名称 SELECT TABLE NAME FROM information schema tables WHERE TABLE
  • 如何用resteasy开发认证?

    我正在制作小型网络服务 1 我决定使用resteasy 来制作它 但我需要知道使用 Resteasy 开发身份验证的最佳实践是什么 Web 服务应该发送什么样的响应 响应通常是 XML 还是什么格式 XML 响应应该是什么格式 顺便提一句
  • 使用 ggplot2 绘制多元高斯轮廓

    我正在尝试使用已知均值和协方差的二维高斯分布的轮廓来增强绘图 理想情况下 我只需要指定函数 它将以 2D 形式绘制 例如stat function二维除外 我可以用geom raster通过生成概率网格 我可以用吗geom contour2
  • “嵌套 foreach”与“lambda/linq 查询”性能(LINQ 到对象)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 从性能角度来看 您应该使用 嵌套 foreach 或 lambda linq 查询 尽可能编写最清晰的代码 然后进行基准测试和分析以发
  • 如何在 UWP 上的 Xamarin.Forms WebView 中启用 WebGL?

    我是 Xamarin Forms 新手 尝试在 Windows 10 x64 v1803 计算机上使用 UWP 使用 WebView 但我不知道如何让它与 WebGL 一起使用 使用 WebGL 的网站要么显示一条消息 您的视频卡不支持 W
  • 是否有符合 IEEE754(r) 标准的 Java 实现?

    是否有任何完全兼容的 IEEE754r 实现可用于 Java 为 Java 选择省略的所有功能提供支持 或者更确切地说 高级语言通常喜欢省略 Traps 粘性旗帜 定向舍入模式 加长 长双 四精度 DPD 密集小数 在任何人弄错之前先澄清一
  • 将 TintColor 设置为 MKAnnotationView 图像

    我正在写一份申请iOS 7 0 我想使用的新功能是 imageWithRenderingMode 我有一个带有以下代码的地图注释 MKAnnotationView annotationView MKAnnotationView annota
  • `?` 运算符只能在返回 `Result` 或 `Option` (或实现 `std::ops::Try` 的其他类型)的函数中使用

    我正在做我的作业 其中包括与 Rust 中的数据库建立连接 我正在使用最新版本的 mysql crate mysql 18 2 0 当我打印池变量时 我的数据库连接成功 我为表学生编写了自己的代码 但收到错误 然后我粘贴文档代码 我收到以下
  • 在 html 页面上一次播放一个视频

    我有一个 html 页面 我使用了视频标签来在线播放视频 我使用了两个视频标签 但是当我播放这两个视频时 两个视频同时播放 我想要一个解决方案 如果我播放一个视频 然后单击第二个视频 那么第一个视频应该暂停 第二个视频开始播放 任何帮助 将
  • 是否可以在 El Capitan 上运行 Xcode 6.3?

    我真的很想尝试 El Capitan 但我不知道是否可以在其上运行旧的 Xcode 因为它现在对我来说至关重要 有人尝试过吗 在终端上运行此命令 Applications Xcode app Contents MacOS Xcode dev
  • Visual Studio 操作系统的条件编译

    我知道有一种方法可以有条件地编译目标框架 例如 if net461 elif 但是有没有一种方法可以针对特定操作系统进行条件编译 像目标 os MAC或目标 os win 如果有人可以指导我如何实现它的文档或教程 第2部分 另外 有没有办法
  • Spring 注释:使用 thymeleaf 对 bean 内部对象属性进行表单验证

    Thymeleaf 有没有办法验证 bean 对象属性中的属性 考虑一下我们确实有一个 Department 类 如下所示 public class Departement Id GeneratedValue strategy Genera
  • 如何获取Web应用程序服务的使用指标数据?

    我正在尝试执行 REST API 以从部署在 Azure 上的 Web 应用程序获取使用指标数据 Hi 我正在尝试执行 REST API 以从部署在 Azure 上的 Web 应用程序获取使用指标数据 https management az
  • php随机名称

    HI 为文件夹创建随机名称的最佳方法是什么 它将用于存储文档的文件夹名称 但是将创建大量文件夹 因此如果可能的话 每次都需要唯一 长度应该在 7 个字符左右 您也可以尝试 PHP 的uniqid http us php net manual
  • ASP.NET WebAPI 将 urlencoded 正文中的空字符串作为 null 传递

    我有一个简单的 ApiController public HttpResponseMessage Put int orderid FromBody Order order Do something useful with order Not
  • EF4 Code First、TDD、CRUD 和事务

    过去 我在创建数据访问 存储库代码时为简单的 CRUD 操作编写了单元测试 如下所示 using var connection new WhateverConnection connectionString connection Open
  • PHP cURL 内容类型未设置

    我想连接一个简单的网络服务 为了发布一些XML 这将在网络服务端正确进行 我需要准备一个正确的请求 我在用cURL对于这样的 try ch curl init if FALSE ch throw new Exception failed t
  • 我该怎么做才能在 WordPress 中获得实际的准备好的语句

    我的公司希望在他们的网站上使用 WordPress 我主要关心的是准备好的语句的使用 根据this https wordpress stackexchange com a 139431 我自己难以置信地阅读了源代码 WordPress 清理
  • 无法将源类型转换为目标类型

    我已经让这个子类实现了我的接口 并且在满足合同方面没有错误 但是 当我尝试在子类的构造函数中设置当前会话时 当它尝试将变量类型与 GetCurrentSession 返回的类型进行比较时 我收到此编译时错误 无法将源类型 IAPISessi