引用另一个实例化的对象?

时间:2013-09-03 02:44:06

标签: c# reference constructor

我有一个名为Star的课程,它有一个

public List<Planet> Planets = new List<Planet>();

有一种方法可以创建具有所需变量的行星,但我想要了解行星类中可以访问的恒星的一些信息。

现在有4个变量我构建了'Planet Class'但是我需要来自'Planet Class'中'Star Class'的大约6个变量。

有没有办法在行星类中引用父星?以及如何将参考传递给地球?

谢谢!

5 个答案:

答案 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,它由ClassAStarDwarfStar等继承。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>>();