我有一个名为Star的课程,它有一个
public List<Planet> Planets = new List<Planet>();
有一种方法可以创建具有所需变量的行星,但我想要了解行星类中可以访问的恒星的一些信息。
现在有4个变量我构建了'Planet Class'但是我需要来自'Planet Class'中'Star Class'的大约6个变量。
有没有办法在行星类中引用父星?以及如何将参考传递给地球?
谢谢!
答案 0 :(得分:0)
您可以在Planet类中包含Star的引用。然后,您可以创建一个采用该引用的构造函数,如下所示:
public class Planet
{
private Star orbits;
...
public Planet(Star orbits)
{
this.orbits = orbits;
...
}
...
}
然后你可以在Star中实例化它:
public List<Planet> Planets = new List<Planet>(this);
答案 1 :(得分:0)
有很多方法可以实现这一点,只有一个想法:
如何为你的contstructor创建一个参数:
private List<Star> _solarSystem;
Planet(List<Star> solarSystem)
{
this._solarSystem = solarSystem;
}
从OO的角度来看,最好不要列出一个类。我假设您发布的代码也在某个类中,那么您的类如何调用?
private SolarSystem _solarSystem;
Planet(SolarSystem solarSystem)
{
this._solarSystem = solarSystem;
}
答案 2 :(得分:0)
典型的解决方案是将类实现的接口注入依赖类(依赖注入)。你的情况就是这样:
internal interface IStar
{
void Method1();
string Property1 { get; }
...
}
internal abstract class Star : IStar
{
protected Star()
{
foreach(string planetName in planetNames)
{
Planet p = new Planet(planetName, this);
Planets.Add(p);
}
}
public void Method1()
{
...
}
public string Property1
{
get { return string.Empty; }
}
}
internal class Planet
{
string name;
IStar parentStar;
internal Planet(string name, IStar parentStar)
{
this.name = name;
this.parentStar = parentStar;
}
}
以这种方式执行此操作允许您传入实现IStar
的不同类(如果需要)。也许你有基础抽象类Star
,它由ClassAStar
,DwarfStar
等继承。Planet
并不关心你传递的是什么类型的星,如只要它实现IStar
接口。这促进了松耦合,使您的代码更易于维护。
答案 3 :(得分:0)
class Star
{
private List<Planet> planets = new List<Planet>();
public List<Planet> Planets
{
get
{
return this.planets;
}
}
public void AddPlanet(Planet planet)
{
this.planets.Add(planet);
planet.Parent = this;
}
}
class Planet
{
public Star Parent { get; internal set; }
}
答案 4 :(得分:0)
使用这样的字典:
IDictionary<Star, IList<Planet>> planetSystems = new Dictionary<Star, IList<Planet>>();