[英]Why am I getting a conversion error here?
適配器類和目標類都實現相同的接口...為什么不能將它們視為相同的對象?
interface ISmartPhone
{
string Name { get; set; }
string Type { get; set; }
void ShowTextWithImage();
}
public class BasicFlipPhoneAdapter : ISmartPhone
{
IBasicPhone basicPhone;
public BasicFlipPhoneAdapter(IBasicPhone basicPhone)
{
this.basicPhone = basicPhone;
}
public string Name { get; set; }
public string Type { get; set; }
public void ShowTextWithImage()
{
basicPhone.ShowBasicText();
}
}
public class iPhone : ISmartPhone
{
public string Name { get; set; }
public string Type { get; set; }
public void ShowTextWithImage()
{
Console.WriteLine("O.o cool image!");
}
}
發生錯誤:
iPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
因為它們不是同一對象類型。 BasicFlipPhoneAdapter
不是 iPhone
。 您應該能夠做的是:
ISmartPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
請注意flipPhoneAdapter
變量的類型-它是ISmartPhone
,而不是iPhone
。
嘗試ISmartPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
它們不是同一對象 。 但是它們可以在您的ISmartPhone界面中成形。 您可以將BasicFlipPhoneAdapter
和iPhone
實例都轉換為ISmartPhone
並使用公開的簽名。
由於兩者均源自ISmartPhone
,因此您當然可以將BasicFlipPhoneAdapter
和iPhone
視為ISmartPhone
,例如,
ISmartPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
但是,您不能將iPhone
隱式視為BasicFlipPhoneAdapter
。 它們具有相同的基本類型,但除此之外可以有所不同。
它應該是
ISmartPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
iPhone不是BasicFlipPhoneAdapter的超級類型
僅僅因為兩個類實現相同的接口並不意味着它們是可互換的。
iPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
無效,因為您正在嘗試將類型為iPhone
的變量分配給BasicFlipPhoneAdapter
類的實例。 另一方面,您可以具有對實現該接口的任何類進行操作的方法。 以這個函數為原型:
public void DoSomethingPhoneLike(ISmartPhone phone) {
// ... do things with phone, like phone.ShowTextWithImage()
}
我們肯定需要有關ISmartPhone擴展內容的更多詳細信息,但是您似乎想說的是所有可能是“ flipPhone”的物品都是iPhone。 僅基於您提供的代碼,我假設所有“ flipPhone”實例均為ISmartPhone,因此如果您進行更改,
iPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
至
ISmartPhone flipPhoneAdapter = new BasicFlipPhoneAdapter(flipPhone);
它應該工作。 或者,如果ISmartPhone確實擴展了IBasicPhone,則將flipPhoneAdapeter的類型更改為IBasicPhone。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.