首页 > 解决方案 > 将对象实例化为属性与大多数方法中的对象实例化

问题描述

使用 C# webforms 和包含的代码示例,将程序的对象实例化为类属性的正确方法或缺点/优点是什么(选项 1)?或者在每种方法中都将使用对象/s(选项 2)?考虑到有更多的方法和对象,虽然大多数方法会使用对象,但也有一些方法不会。

更新:

选项1:

public partial class MyPage : MyBasePage
{
    //Declared as an attribute and instantiated at init
    private MyClass MC;

    protected void Page_Init(object sender, EventArgs e)
    {
        MC = new MyClass();
        DoSomeStuff();
        DoMoreStuff();
        DoSomethingElse();
    }

    private void DoSomeStuff()
    {
        // Do stuff with MC
    }

    private void DoMoreStuff()
    {
        //Do more stuff MC
    }

    private void DoSomethingElse()
    {
        //Do some stuff WITHOUT MC
    }
}

选项 2:

public partial class MyPage : MyBasePage
{
    protected void Page_Init(object sender, EventArgs e)
    {        
        DoSomeStuff();
        DoMoreStuff();
        DoSomethingElse();
    }

    private void DoSomeStuff()
    {
        //Declared and instantiated on every method that needs it
        MyClass MC = new MyClass();
        // Do stuff with MC
    }

    private void DoMoreStuff()
    {
        //Declared and instantiated on every method that needs it
        MyClass MC = new MyClass();
        //Do some stuff with MC
    }

    private void DoSomethingElse()
    {
        //Do some stuff WITHOUT MC
    }
}

更新:Sham 提供的第三个选项怎么样?

private MyClass _MC;
private MyClass MC
{
    get
    {
        if(_MC == null)
        {
            _MC = new MyClass();
        }
        return _MC;
    }
}

标签: c#asp.netwebformsinstantiation

解决方案


1 是否比另一个更好并不重要。它更多的是关于你到底想要做什么。因此,在方法中声明它并在该方法中使用它意味着它仅在该范围内可用。如果您在类级别声明,然后在该类的各种方法中使用它,那么您在使用它时必须更加小心。让我举个例子。

在选项 2 中,您可以:

private void DoMoreStuff()
{
    //Declared and instantiated on every method that needs it
    MyClass MC MC = new MyClass();
    //Do some stuff with MC
}

这意味着 MC 仅在 DoMoreStuff 内部可用。如果您在另一个方法中创建另一个 MyClass MC MC(不是很好的命名顺便说一句),那将是一个完全不同的 MC 实例,与第一个无关。

但是,如果您使用选项 1,则每种方法都可以访问它,但每个方法也可以更改它。因此,如果 MC 有一个名为“Age”的属性,它是一个 int,一个方法将其设置为 23,然后另一个方法检查该属性,它应该是 23。另一种方法可能会在稍后出现并更新该属性并将其设置为 64 等. 然而,这对于诸如服务之类的东西很有用,它提供了通用的做事方法。

所以,这真的取决于 MC 的用途以及如何使用它。它是否为您的 MyPage 提供某种服务,您希望各种方法能够访问,例如日志记录,或者它只是保存数据的东西,比如可能具有姓名、年龄、身高等内容的人类?


推荐阅读