我已经让这个子类实现了我的接口,并且在满足合同方面没有错误。但是,当我尝试在子类的构造函数中设置当前会话时,当它尝试将变量类型与 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
!
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(使用前将#替换为@)