我这里有一个OO问题。我有两个具有共同属性和特定属性的会话。我创建了一个基类并封装了所有常见的属性/方法。两个会话具有一个称为 Ranges 的通用类型,该类型又具有会话的通用属性和特定属性。因此,我认为在这种情况下我可以编程为超类型并在运行时构建实例。
public class Level
{
private readonly Ranges _range;
public Level(Ranges range)
{
_range = range;
}
public Ranges Range
{
get { return _range; }
}
public void CommonMethod()
{
throw new NotImplementedException();
}
public int CommonProperty;
}
public class ALevel : Level
{
public ALevel()
: base(new ARange())
{
}
public int ALevelProperty;
}
public class BLevel : Level
{
public BLevel()
: base(new BRange())
{
}
public int BLevelProperty;
}
public class Ranges
{
public int CommonRangeProperty;
}
public class ARange : Ranges
{
public int ARangeProperty;
public ARange()
{
}
}
public class BRange : Ranges
{
public int BRangeProperty;
}
public class ASession
{
public ASession()
{
Level = new ALevel();
}
public ALevel Level { get; set; }
}
public class BSession
{
public BSession()
{
Level = new BLevel();
}
public BLevel Level { get; set; }
}
当我创建一个会话对象时,它不包含 ASession 的特定 Ranges 属性。我只能访问基类的属性 aSession.Level.Range.CommonRangeProperty = 1; 但无法访问 aSession 的特定属性 aSession.Level.Range.ARangeProperty。
我在这里做错了吗?
public class Test
{
public static void Main(string[] args)
{
ASession aSession = new ASession();
aSession.Level.Range.CommonRangeProperty = 1;
//Not able to see ARangeProperty
}
}