c# - 重型构造函数或使用方法

标签 c#

这两种方法都对我有用,但我不确定从“良好实践”的角度来看建议是什么。

我有一个类在我的库中执行各种控制功能,因此需要初始化各种对象和属性。

是否可以将所有这些逻辑放在类的构造函数中,还是应该将其放在“Initialise”方法中。

public MyClass()
{
    mSubObjectA = new mSubObjectA();
    mSubObjectA.DoStuff();
    mSubObjectA.DoMoreStuff();

    mSubObjectB = new mSubObjectB();
    mSubObjectC = new mSubObjectC();

    if (something)
    {
        DoStuff();
    }
    else
    {
        MagicHappens();
    }
}

最佳答案

就我个人而言,我希望收到的元素能够完全投入使用。另一方面,在构造函数中做大量工作确实有点味道。

一种替代方法是编写静态工厂方法(或工厂类*),它可以在调用构造函数之前完成它需要的所有工作,然后使构造函数本身非常简单。您可以根据需要选择是否公开简单构造函数。

* 工厂类可以提高可测试性,并允许潜在的不同工厂实现。另一方面,此时您正在进行相当高的抽象级别,这可能会让人分心。

关于c# - 重型构造函数或使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336758/

相关文章:

c# - ASP.NET - Razor 从模型中获取图像

c# - Process.Start 崩溃无一异常(exception)

c# - 使用 ng-file 的 AngularJS HTTP POST

c# - 有没有办法动态确定启动时在 Azure webjob 中触发的队列数量和名称?

c# - 如何使 Redis 缓存在部署在 IIS Express 上但在本地主机上工作的 asp.net 核心 Web 上工作

c# - 从 MediaElement 控件读取自定义编码的网络流

c# - 使用数据读取器处理 excel 文件 : ExecuteReader() buffers entire file

c# - 名称 <...> 在 namespace clr-namespace <...> 中不存在

c# - NHibernate 搜索 - 多个 Web 服务器

c# - 路径的 Controller ...未找到或未实现 IController