在這種情況下如何訪問 objects 屬性?
Araba araba = new Araba();
araba.Renk = "mavi";
araba.fiyat = 12345;
// I created this class and it working normally
ArrayTypedStack asd = new ArrayTypedStack(10);
asd.Push(araba);
object araba2 = asd.Pop();
araba2. //cant access
uj5u.com熱心網友回復:
在這里,您將 的值分配給asd.Pop()型別的變數object。
object是所有物件的根(所有物件都從它繼承并可以轉換為它),因此沒有關于它是什么的真實資訊。就像現實生活中的任何物件都是thing.
這里的解決方案是將 宣告araba2為 type Araba,這將使您可以訪問下一行的所有屬性。
我不知道該方法的實作ArrayTypedStack以及該Pop()方法的外觀(它是回傳型別),因此這可能會給您一個錯誤,說它無法將物件轉換為 Araba 型別。這是在 .NET 中實作的型別安全。您必須說服 .NET 它屬于 type Araba,這可以通過強制轉換
Araba araba2 = (Araba)asd.Pop();
Pop()如果回傳的物件不是 type ,這仍然會在運行時出錯Araba,在這種情況下,您可以要求 .NET 嘗試強制轉換它,有幾個選項:
object popResult = asd.Pop();
if (popResult is Araba) {
Araba araba2 = (Araba)popResult;
}
// can be written as follows:
if (popResult is Araba araba3) {
araba3.fiyat = 65432;
}
// can also be done as follows
Araba araba4 = asd.Pop() as Araba;
if (araba4 != null) {
araba4.fiyat = 84368;
}
uj5u.com熱心網友回復:
好吧,您的araba2變數是object. 因此,無論它包含的實體的實際型別如何,通過object變數araba2您只能訪問由 type 提供的成員object。
要訪問該Araba型別提供的成員(并假設araba2變數中的實體是 type 的實體Araba),araba2變數本身應該是 type Araba,或者araba2的值需要強制轉換為Araba。
因此,
var araba2 = asd.Pop();
或者
var araba2 = (Araba) asd.Pop();
上面的第一個示例代碼行要求Pop方法的回傳型別是Araba(或派生自 的型別Araba)。只要 Pop 回傳的值是一個實際的實體(或者是可轉換為實體的東西),后面的代碼行示例將不管Pop的回傳型別如何。ArabaAraba
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474216.html
