C# 访问堆栈对象 属性
C# access to stack object property
在这种情况下如何访问对象 属性?
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
此处您将 asd.Pop()
的值分配给类型为 object
的变量。
object
是所有对象的根(所有对象都继承自它并可以转换为它),因此没有关于它是什么的真实信息。就像现实生活中的任何物体都是 thing
.
此处的解决方案是将 araba2
声明为 Araba
类型,这样您就可以访问下一行的所有属性。
我不知道 ArrayTypedStack
的实现以及 Pop()
方法是什么样的(它是 return 类型)所以这可能会给你一个错误,说它不能将对象转换为 Araba 类型。这是 .NET 中实现的类型安全。您必须让 .NET 相信它是 Araba
类型,这可以通过转换
Araba araba2 = (Araba)asd.Pop();
如果从 Pop()
编辑的对象 return 不是 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;
}
那么,您的 araba2 变量的类型是 object
。因此,无论它包含的实例的实际类型如何,通过 object
变量 araba2 您只能访问由类型 object
提供的成员。 =23=]
要访问 Araba
类型提供的成员(并假设 araba2 变量中的实例是类型 Araba
的实例),araba2 变量本身应该是 Araba
类型,或者 araba2 的值需要转换为 Araba
.
因此,
var araba2 = asd.Pop();
或
var araba2 = (Araba) asd.Pop();
上面的第一个示例代码行要求 Pop 方法的 return 类型是 Araba
(或从 Araba
).无论 Pop 的 return 类型如何,只要由 Pop[=41= 编辑的值 return ,后一个代码行示例都可以工作] 是一个实际的 Araba
实例(或者是可以转换为 Araba
实例的东西)。
在这种情况下如何访问对象 属性?
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
此处您将 asd.Pop()
的值分配给类型为 object
的变量。
object
是所有对象的根(所有对象都继承自它并可以转换为它),因此没有关于它是什么的真实信息。就像现实生活中的任何物体都是 thing
.
此处的解决方案是将 araba2
声明为 Araba
类型,这样您就可以访问下一行的所有属性。
我不知道 ArrayTypedStack
的实现以及 Pop()
方法是什么样的(它是 return 类型)所以这可能会给你一个错误,说它不能将对象转换为 Araba 类型。这是 .NET 中实现的类型安全。您必须让 .NET 相信它是 Araba
类型,这可以通过转换
Araba araba2 = (Araba)asd.Pop();
如果从 Pop()
编辑的对象 return 不是 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;
}
那么,您的 araba2 变量的类型是 object
。因此,无论它包含的实例的实际类型如何,通过 object
变量 araba2 您只能访问由类型 object
提供的成员。 =23=]
要访问 Araba
类型提供的成员(并假设 araba2 变量中的实例是类型 Araba
的实例),araba2 变量本身应该是 Araba
类型,或者 araba2 的值需要转换为 Araba
.
因此,
var araba2 = asd.Pop();
或
var araba2 = (Araba) asd.Pop();
上面的第一个示例代码行要求 Pop 方法的 return 类型是 Araba
(或从 Araba
).无论 Pop 的 return 类型如何,只要由 Pop[=41= 编辑的值 return ,后一个代码行示例都可以工作] 是一个实际的 Araba
实例(或者是可以转换为 Araba
实例的东西)。