C#应该添加部分构造函数吗?

Ree*_*sey 19 .net c#

这个问题答案让我对.NET框架设计选择感到疑惑.

.NET框架完全支持部分类,接口和方法.有没有令人信服的理由支持部分构造函数没有以同样的方式添加?

这似乎会简化部分类中的类构造.例如,由Windows Forms中的设计者构建的表单构造函数可以直接在构造函数中使用表单构造代码,并将其拆分为两个文件.部分"Initialize()"方法似乎是一种有点常见的模式,在这种情况下可以简化.

我能看到的唯一潜在缺点是构造函数调用顺序缺乏确定性,但在许多情况下,部件的顺序无关紧要.如果是这样,你总是可以避免部分构造函数.

Joe*_*orn 14

我能看到的唯一潜在缺点是构造函数调用顺序缺乏确定性,但在许多情况下,部件的顺序无关紧要.如果是这样,你总是可以避免部分构造函数.

这部分对你的问题比看起来更重要.

如果您真的想了解C#语言是如何组合在一起的,那么您可以做的一件事就是关注Eric Lippert的博客.他从事Microsoft的C#语言工作,并且在选择资源有限的功能方面进行了大量讨论.阅读他的博客一段时间后,您将开始了解功能如何融入语言.

他在一些场合提到的一个因素是,对于该功能将要解决的问题是否已经有一个微不足道的解决方法.因此,回到问题的引用部分,您会提出两个要点:

  1. 缺乏决定论并没有很好的解决方案.如果您可以在帖子中提供优雅的解决方案,那么您将拥有更好的案例.
  2. 已经有一个微不足道的工作了.

把它们放在一起,这不是一个成功的功能.

  • 你说的这个"琐碎的解决方法"是什么? (4认同)

Hea*_*her 10

我会投赞成票,我会举一个具体的例子.

许多使用生成器(例如Linq To SQL)发出代码的技术将/必须发出默认构造函数.但是,我经常也想在构造函数中执行某些操作,例如连接到其中一个数据事件.

没有部分构造函数我不能这样做,因为默认构造函数已经被生成的代码绑定了,我显然不想改变生成的代码来添加我的逻辑.


Meh*_*ari 7

那么,partial类和接口是另一个故事.这个概念可与partial方法相媲美.他们实际上什么都不做,只是告诉编译器这个方法可以存在于某个地方,如果它不删除方法调用.它不允许引入重复方法.

由于构造函数永远不会直接调用,因此拥有这样的概念没有任何意义.我相信当前的初始化模式在大多数情况下都能很好地工作.引入另一部分内容将不必要地使语言更复杂而不会带来显着的好处.