首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态构造方法与构造函数

静态构造方法与构造函数
EN

Stack Overflow用户
提问于 2013-11-26 13:50:49
回答 3查看 651关注 0票数 4

在.NET框架中,我经常看到用静态函数代替构造函数来构造新对象的成语。

例如,对于BigInteger,没有接受字符串的构造函数,所以这是不可能的:

代码语言:javascript
复制
BigInteger i = new BigInteger("1000000103453543897");

但是有一个静态的解析函数。

代码语言:javascript
复制
BigInteger i = BigInteger.Parse("1000000103453543897");

为什么这样的类设计经常被选中?

我唯一能想到的就是少了一个要创建的对象,然后再扔掉它。这是主要原因吗?还是有其他原因?

代码语言:javascript
复制
BigInteger(string value)
{
  BigInteger result = new BigInteger(); // this one just returned in a Parse function

  // compute bigint

  // copy result to this
  data = new uint[maxLength];
  for (int i = 0; i < result.Length; i++)
    data[i] = result.data[i];

  Length = result.dataLength;  
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-26 13:54:03

研究工厂方法模式可能有很多原因。

对于您的例子,很多人认为在构造函数中/从构造函数中调用重要的逻辑是一种糟糕的做法(我不想从构造函数中抛出异常,除非它是缺少的参数)。使用工厂方法允许实现,保证在对象构造时运行,而不是在构造函数中运行。

票数 3
EN

Stack Overflow用户

发布于 2013-11-26 13:57:54

没有接受字符串的构造函数

没有技术上的原因可以解释为什么你不能这样做。设计者只是选择不复制已经存在的代码,并且没有增加任何实用价值--它仍然是一行代码,你想要做什么就更清楚了,通过传递错误类型来减少错误数量等等。

它还使它与没有非默认构造函数(不能说是int i = new int(4))的其他数字类型一致;

底线是--这种构造函数中的值需要超过实现、测试、文档和发布新功能的成本。

票数 2
EN

Stack Overflow用户

发布于 2013-11-26 13:57:47

有关答案,请参见@Moho,Factory方法模式。

我个人认为BigInteger.Parse更好地涵盖了它。在本例中,您有一些值--字符串,您希望它将其转换为BigNumber。带有字符串参数的构造函数不会告诉wat将发生什么。据您所知,它只是使用字符串执行Console.WriteLine,而不是执行不同的操作。Parse告诉你更多的..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20218898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档