C# 创建即时类的合理方法
如果类的instant使用了许多where,我就不知道在哪里声明它。C# 创建即时类的合理方法,c#,.net,C#,.net,如果类的instant使用了许多where,我就不知道在哪里声明它。 假设我有一个名为Order的表单,在该表单中我执行了四项任务,如插入、更新、删除和填写订单数据。 这四个任务的逻辑都在单独的类文件中,比如FinalOrder.cs 这里,在示例中,fo是为名为finalolder的类即时创建的,并且将不同的方法从FinalOder调用到Order表单中。 以下是参考代码: FinalOrder fo = new FinalOrder(); private void Order_L
假设我有一个名为Order的表单,在该表单中我执行了四项任务,如插入、更新、删除和填写订单数据。
这四个任务的逻辑都在单独的类文件中,比如FinalOrder.cs
这里,在示例中,fo是为名为finalolder的类即时创建的,并且将不同的方法从FinalOder调用到Order表单中。
以下是参考代码:
FinalOrder fo = new FinalOrder();
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
private void Order_Load(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.DiscardOrder();
}
FinalOrder fo;
public Order()
{
InitializeComponent();
fo = new FinalOrder();
}
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
第一种方式:
FinalOrder fo = new FinalOrder();
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
private void Order_Load(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.DiscardOrder();
}
FinalOrder fo;
public Order()
{
InitializeComponent();
fo = new FinalOrder();
}
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
第二种方式:
FinalOrder fo = new FinalOrder();
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
private void Order_Load(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.DiscardOrder();
}
FinalOrder fo;
public Order()
{
InitializeComponent();
fo = new FinalOrder();
}
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
第三种方式:
FinalOrder fo = new FinalOrder();
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
private void Order_Load(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
FinalOrder fo = new FinalOrder();
fo.DiscardOrder();
}
FinalOrder fo;
public Order()
{
InitializeComponent();
fo = new FinalOrder();
}
private void Order_Load(object sender, EventArgs e)
{
dgvOrder.DataSource = fo.FetchOrders();
}
private void btnNewOrder_Click(object sender, EventArgs e)
{
fo.NewOrder();
}
private void btnUpdateOrder_Click(object sender, EventArgs e)
{
fo.UpdateOrder();
}
private void btnDiscardOrder_Click(object sender, EventArgs e)
{
fo.DiscardOrder();
}
请给我解释一下,在记住内存分配的情况下,哪种方法是好的,为什么?第一种和第三种方法是相同的;当创建
表单
实例时,两者都将实例化FinalOrder
如果应用程序中有许多
insert
/delete
/update
操作,则使用第一种或第三种方法来防止每次调用这些方法时实例化FinalOrder
。第一种和第三种方法是相同的;当创建表单
实例时,两者都将实例化FinalOrder
如果应用程序中有许多
插入
/删除
/更新
操作,然后使用第一种或第三种方法来防止每次调用这些方法时实例化FinalOrder
。我认为这取决于FinalOrder
的特性和创建它的类。例如,如果创建它的类可以由多个线程访问,则您可能不希望它作为成员变量,除非FinalOrder
是线程安全的
(在您的示例中,它看起来像是在web表单上创建的,并且作为成员变量是安全的。)
另外,
FinalOrder
对象中的操作可能会更改对象的状态(必须查看功能的实现),这可能会更改未来操作的工作方式,而且它的工作方式与每次使用前重新创建它的方式不同。我想说,它取决于FinalOrder
和创建它的类的特性。例如,如果创建它的类可以由多个线程访问,则您可能不希望它作为成员变量,除非FinalOrder
是线程安全的
(在您的示例中,它看起来像是在web表单上创建的,并且作为成员变量是安全的。)
另外,
FinalOrder
对象中的一个操作可能会改变对象的状态(必须看到函数的实现),这可能会改变未来操作的工作方式,并且不会像每次使用前重新创建它那样工作。我认为您的“订单”表单只用于一个订单。所以,如果是第二种方式更好。如果你打算以第一种或第三种方式多次插入/更新/删除,效果会更好,因为他们只使用了一个实例。我认为你的“订单”表单只用于一个订单。所以,如果是第二种方式更好。如果您打算以第一种或第三种方式多次插入/更新/删除,因为它们只使用了一个实例。为什么不使用Singleton模式,或者您可以通过在FinalOrder类中写入返回FinalOrder类实例的属性来共享FinalOrder类的实例。因此,您可以避免在另一个类上创建实例。为什么不使用Singleton模式,或者您可以通过在FinalOrder类中写入返回FinalOrder类实例的属性来共享FinalOrder类的实例。因此,您可以避免在另一个类上创建实例。如果FinalOrder
是一个简单的类,它不使用任何昂贵的资源,那么我将使用第二种方法,它可以缩短对象生命周期,并封装在函数中以便于重用
如果
FinalOrder
使用非托管资源或IDisposable
则我会选择
第四条路
如果FinalOrder的实例化非常昂贵,然后,我可以考虑一个私有成员,用于一个通用的代码>终结命令< /Case>实例,但是理想地我会避免这个。 < P>如果<代码> FielAlgord是一个不使用任何昂贵资源的简单类,那么我将用第二种方式来保持对象生命周期短,并封装在简单重用的函数中。
如果
FinalOrder
使用非托管资源或IDisposable
则我会选择
第四条路
如果最后命令的实例化非常昂贵,那么我可以考虑一个私有成员,用于一个共同的代码>最终命令< /代码>实例,但是理想地我会避免这个。