繁体   English   中英

什么是Initialize方法,我真的需要一个吗?

[英]What's the Initialize method used for and do I really need one?

我对构造函数中通常使用的Initialize方法有点困惑。

为什么我不能把所有内容放在构造函数中,为什么下面的示例调用initialize方法?

    private IAzureTable<Product> _productRepository;

    public ProductService(string dataSourceID)
    {
        Initialize(dataSourceID);
    }

    private void Initialize(string dataSourceID)
    {
        this._productRepository = StorageHelper.GetTable<Product>(dataSourceID);
    }

是否有通常使用的约定?

在这个例子中,我是否需要在Initialize方法中Initialize this词?

为什么我不能把所有内容放在构造函数中,为什么下面的示例调用initialize方法?

你可以把它全部放在构造函数中。 在这个简单的例子中,你应该。 构造函数用于初始化对象。

有时你会遇到更复杂的事情:

  • 有时您需要一个单独的Initialize方法,因为您希望在构造的单独时间调用它。
  • 有时您需要一个,因为您正在编写多个构造函数,并且您希望在它们之间共享一些实现。
  • 有时您的初始化很复杂,并且您希望为它们提供好的名称,以便您知道代码在做什么。 所以你把这些碎片分成了不同的方法。

这些代码都不是这种情况,所以我只是跳过它并将代码抛出到构造函数中。

是否有通常使用的约定?

不会。人们会做最容易阅读和理解的事情,无论需要编写最少的额外代码,以及什么导致代码重复最少。

但是,如果您将Initialize方法Initialize public,而不是从构造函数中调用它,我强烈建议您将其称为Initialize 将其设计为仅调用一次。

在这个例子中,我需要“this”这个词。 在Initialize方法?

不会。除非您有另一个具有相同名称的本地变量,否则您永远不需要使用this来访问类成员。 这是一个案例:

public class Something
{
    private string someValue;

    public class Something(string someValue)
    {
        // must use "this" to access the member variable,
        // because a local variable has the same name
        this.someValue = someValue;
    }
}

您发布的是私有帮助方法 ,而不是类。

它被简单地使用,因此构造函数不会与初始化代码混杂在一起,以便为所做的事情提供一个好名字。

在您的具体示例中,它似乎没什么价值。

首先,如果将功能分离到自己的方法中,代码看起来是可读的。

其次,有时在某些情况下,您可能希望将initialize设置为public,以便开发人员可以在调用构造函数后使用它,因为您不希望代码在构造函数中运行。 如果您有一个表单并且希望在显示表单之前运行一些初始化代码,则通常就是这种情况。

1:使用初始化方法可能有两个方面:

  • 可能存在各种初始化操作,需要将这些操作分解为可管理的块(即构造函数可以继续执行其他操作)
  • 可能需要类重新初始化,在这种情况下,初始化代码必须在构造函数之外的方法中。

在你的具体例子中,虽然它的意义不大。

2:在的情况下, this

再次在你的例子中它的意义不大。 它可以在基类和当前类的属性或方法的实现之间无差别地使用(即你使用base.而不是this.

没有达成一致的标准,但“Initialize”是一个众所周知的单词,任何其他读取代码的人都可以立即识别,并告诉我所有我需要知道的方法的目的。 它可以被称为Bob()但是它的帮助要小得多!

为什么我不能把所有东西放在构造函数中?

您可以,但将其分解为方法有助于使事物更具可读性。 当你的构造函数是一行代码时,它并不是必需的。

在这个例子中,我需要“this”这个词。 在Initialize方法?

在您发布的代码中没有,这是没有必要的。 为什么会这样? 可以通过工具自动生成,可能只是某人使用的约定或风格,可以从需要它的其他地方粘贴...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM