我试图抛弃一个变量。基本上我将派生类存储在接口变量中。
这导致编译时错误:
错误1无法隐式转换类型' Xamarin.Auth.Account'到了#cc; IAccount'。存在显式转换(您是否错过了演员?)
所以我将变量转换为接口。如果我将其转换为接口,我将丢失任何派生类的功能吗?
public interface IAccount
{
}
public class Account : Xamarin.Auth.Account, IAccount
{
}
...Inside view model
private IAccount _account;
_account = eventArgs.Account; // causes compiler error
_account = (IAccount)eventArgs.Account; // solution but will I loose functionality?
// eventArgs.Account = Xamarin.Auth.Account data type
答案 0 :(得分:3)
演员阵容不能“失去功能”;没有办法改变对象是哪个类。它可能会失败,但它不会改变任何东西。
但是,出于这个原因,允许隐含地向下转换;你实际上不会得到那个错误。
听起来eventArgs.Account
实际上是Xamarin.Auth.Account
,它没有实现你的界面;因此,您的转换将失败(除非您碰巧知道它在运行时确实是您的Account
类的实例)。
答案 1 :(得分:1)
检查eventArgs中对象的类型是YourNamespace.Account还是Xamarin.Auth.Account?
我认为它是Xamarin.Auth.Account,它不会继承IAccount,因此无法转换为它。我建议将您的Account类转换为代理(包装器)类,该类在其构造函数中使用Xamarin.Auth.Account类。
public interface IAccount
{
}
public class Account : Xamarin.Auth.Account, IAccount
{
public Account(Xamarin.Auth.Account account) :
base(account.Username, account.Properties, account.Cookies)
{
}
}
_account = new YourNamespace.Account(eventArgs.Account);
另一种选择,也许不是继承Xamarin.Auth.Account,您可以在Xamarin.Auth.Account类中将您的Account类中的方法实现为extension methods