C# 创建即时类的合理方法

C# 创建即时类的合理方法,c#,.net,C#,.net,如果类的instant使用了许多where,我就不知道在哪里声明它。 假设我有一个名为Order的表单,在该表单中我执行了四项任务,如插入、更新、删除和填写订单数据。 这四个任务的逻辑都在单独的类文件中,比如FinalOrder.cs 这里,在示例中,fo是为名为finalolder的类即时创建的,并且将不同的方法从FinalOder调用到Order表单中。 以下是参考代码: FinalOrder fo = new FinalOrder(); private void Order_L

如果类的instant使用了许多where,我就不知道在哪里声明它。

假设我有一个名为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
则我会选择

第四条路

如果最后命令的实例化非常昂贵,那么我可以考虑一个私有成员,用于一个共同的代码>最终命令< /代码>实例,但是理想地我会避免这个。