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