C# 一个类生成另一个类的实例。这些实例需要使用原始类中的信息,如何组织?

C# 一个类生成另一个类的实例。这些实例需要使用原始类中的信息,如何组织?,c#,C#,我对面向对象编程相当陌生,但组织程序仍然有困难 我正在模拟c#的一个工厂。我有一个模拟类的实例。初始化时,构造函数创建机器类的多个实例 模拟类有一个事件列表。Machine类具有需要将事件添加到此列表的方法。现在,我看到的唯一方法是将模拟的引用传递给机器构造函数。然而,这些对我来说似乎很混乱,我觉得必须有更好的方式来组织这一切 public class Simulation { public LinkedList<Event> event_list = new LinkedL

我对面向对象编程相当陌生,但组织程序仍然有困难

我正在模拟c#的一个工厂。我有一个
模拟
类的实例。初始化时,构造函数创建
机器
类的多个实例

模拟
类有一个事件列表。
Machine
类具有需要将事件添加到此列表的方法。现在,我看到的唯一方法是将模拟的引用传递给
机器
构造函数。然而,这些对我来说似乎很混乱,我觉得必须有更好的方式来组织这一切

public class Simulation
{
    public LinkedList<Event> event_list = new LinkedList<Event>();

    public Simulation()
    {
        Machine m1 = new Machine(this);
        Machine m2 = new Machine(this);
    }

    static void Main(string args[])
    {
        Simulation sim = new Simulation();
    }
}

public class Machine
{
    public Simulation sim;

    public Machine(Simulation sim)
    {
        this.sim = sim;
    }

    public void Schedule_Event()
    {
        sim.event_list.AddLast(new Event(etc etc));
    }
}

public class Event
{
}
公共类模拟
{
public LinkedList event_list=新建LinkedList();
公共模拟()
{
机器m1=新机器(本);
机器m2=新机器(本);
}
静态void Main(字符串参数[])
{
Simulation sim=新模拟();
}
}
公共类机器
{
公共模拟sim卡;
公共机器(模拟sim)
{
this.sim=sim;
}
公共无效时间表(事件)
{
模拟事件列表AddLast(新事件等);
}
}
公开课活动
{
}

是否有一种方法可以将事件添加到
模拟。事件列表
,而无需通过
参考?从某种意义上说,每台机器都“属于”模拟类,我想以某种方式说明这一点。

对我来说似乎没什么问题,我只是将事件列表实现隐藏在模拟类中:

public class Simulation
{
    private LinkedList<Event> event_list = new LinkedList<Event>();

    public void addEven(Event x) {event_list.Add(x); }
}

只允许
Machine m1=Simulation.CreateNewMachine()

您可以在
Machine
中有一个返回
事件
对象的方法,然后
Simulation
可以将其添加到
事件列表

public class Simulation
{
    public LinkedList<Event> event_list = new LinkedList<Event>();

    public Simulation()
    {
        Machine m1 = new Machine();
        Machine m2 = new Machine();

        event_list.AddLast(m1.GetEvent());
        event_list.AddLast(m2.GetEvent());
    }

    static void Main(string args[])
    {
        Simulation sim = new Simulation();
    }
}

public class Machine
{
    public Machine() {}

    public Event GetEvent()
    {
        return new Event(etc etc);
    }
}
公共类模拟
{
public LinkedList event_list=新建LinkedList();
公共模拟()
{
机器m1=新机器();
机器m2=新机器();
event_list.AddLast(m1.GetEvent());
event_list.AddLast(m2.GetEvent());
}
静态void Main(字符串参数[])
{
Simulation sim=新模拟();
}
}
公共类机器
{
公共计算机(){}
公共事件GetEvent()
{
返回新事件(等);
}
}
您可以使用更类型的方法,使用
操作

将公共操作添加到计算机:

public class Machine
{
    public Action<Event> EventAdded;

    private void Schedule_Event()
    {
        if(EventAdded != null)
            EventAdded(new Event());
    }
}
公共类机器
{
增加了公众行动;
私人无效时间表(事件)
{
if(EventAdded!=null)
添加事件(新事件());
}
}
并在创建时订阅操作:

public class Simulation
{
    public LinkedList<Event> event_list = new LinkedList<Event>();

    public Simulation()
    {

        Machine m1 = new Machine() { EventAdded = AddEvent };
    }

    static void Main(string[] args)
    {
        Simulation sim = new Simulation();
    }

    public void AddEvent(Event e)
    {
        event_list.AddLast(new Event(etc etc));
    }
}
公共类模拟
{
public LinkedList event_list=新建LinkedList();
公共模拟()
{
机器m1=新机器(){EventAdded=AddEvent};
}
静态void Main(字符串[]参数)
{
Simulation sim=新模拟();
}
公共事件(事件e)
{
事件列表AddLast(新事件(等));
}
}
那么,两个对象之间唯一的契约就是
事件
类型。

为什么要将机器与模拟结合起来?
public class Simulation
{
    public LinkedList<Event> event_list = new LinkedList<Event>();

    public Simulation()
    {

        Machine m1 = new Machine() { EventAdded = AddEvent };
    }

    static void Main(string[] args)
    {
        Simulation sim = new Simulation();
    }

    public void AddEvent(Event e)
    {
        event_list.AddLast(new Event(etc etc));
    }
}