【发布时间】:2012-08-11 08:52:32
【问题描述】:
我对 C#.NET 还是比较陌生,所以我确信我缺少一些明显的东西,但这里是:我无法从特定类中获取一些变量。
有问题的类如下所示:
class AridPlanet : Arid
{
public const int area = 95;
}
如你所见,这个类继承自以下类:
abstract class Arid : Astro
{
public const int metal = 2;
public const int gas = 2;
public const int crystals = 0;
public const int fertility = 5;
}
继承自以下类:
abstract class Astro
{
public int metal;
public int gas;
public int crystals;
public int fertility;
public int area;
}
我尝试获取以下变量:
class Base
{
private int metal;
private int gas;
private int crystals;
private int fertility;
private int area;
private List<Structure> structures = new List<Structure>();
private int position;
private Astro selectedAstro;
public Base(Astro astro, int position)
{
this.selectedAstro = astro;
this.metal = selectedAstro.metal;
this.gas = selectedAstro.gas;
this.crystals = selectedAstro.crystals;
this.fertility = selectedAstro.fertility;
this.area = selectedAstro.area;
this.position = position;
//Code ommited
}
}
astro 参数作为特定的 astro 类型传递给 Base 构造函数,例如 AridMoon。
当我运行代码查看 Base 变量分配给什么时,我看到它们都分配给了 0。对我来说,这表明代码正在尝试从 @ 的最顶层超类分配变量987654329@ 即Astro。
但是,正如我所理解的继承,编译器应该先查看指定的类,然后再转到超类。
对出了什么问题有任何想法吗?我确定这是我误解的简单事情。
【问题讨论】:
-
常量不是变量(或字段——这将是正确的术语)。
-
你可能想看看你的编译器警告...
-
当然,它们不会改变,所以常量是有意义的,或者
readonly我不完全确定其中的区别。无论哪种情况,我都无法获取和分配值。 -
编译器说:
Warning 1 'AEBaseCalcCSharp.GaiaMoon.area' hides inherited member 'AEBaseCalcCSharp.Astro.area'. Use the new keyword if hiding was intended.不完全确定这告诉我什么,谁能解释一下?
标签: c# .net inheritance polymorphism