如何访问UpCasted对象中的字段?我不能使用Console.WriteLine来打印SuperPower
对象的Guy
属性
namespace Test
{
class Guy
{
public int Power { get; set; }
}
class BigGuy : Guy
{
public int SuperPower { get; set; }
}
class Program
{
static void Main(string[] args)
{
Guy guy = new Guy();
BigGuy bigGuy = new BigGuy();
bigGuy.SuperPower = 4;
guy = bigGuy;
Console.WriteLine(guy.SuperPower); // Visual studio doesn't accept this line.
}
}
}
当我调试时,我收到一个错误:
'Guy' does not contain a definition for 'SuperPower'
为什么我无法访问guy.SuperPower
字段?
答案 0 :(得分:0)
在访问guy
类的字段之前,您必须将BigGuy
强制转换为BigGuy
:
Console.WriteLine(((BigGuy)guy).SuperPower);
答案 1 :(得分:0)
因为变量的类型是Guy
。这意味着您只能访问Guy
类型上声明的属性。
想象一下,如果你有第二个子类:
class FastGuy : Guy
{
public int SpeedPower { get; set; }
}
guy = bigGuy;
guy = new FastGuy();
您可以访问的属性会根据您分配的值而更改。这意味着它无法在编译时进行类型检查。
通常,将类型声明为某种不太具体的类型是这样的,即使具体类型可能是子类,您也可以对该对象进行操作,就好像它是该类型一样。