C# 有什么好的理由可以查找<;TKey,远程通讯>;类是否没有公共构造函数?

C# 有什么好的理由可以查找<;TKey,远程通讯>;类是否没有公共构造函数?,c#,.net,oop,C#,.net,Oop,为什么System.Linq.Lookup类中没有公共构造函数 .net framework designer将查找构造函数设为私有的意图是什么?两个可能的原因: 因为它是不可变的,所以所有初始化都必须在构造时完成,因此在这种情况下,工厂方法(Enumerable.ToLookup)比复杂的公共构造函数更合适 因为工厂方法足以创建查找,所以不需要构造函数 最终,设计师不必为不做某事辩护。当存在工厂方法来创建构造函数时,我几乎看不到构造函数的价值。如果您觉得有一个用例,其中构造函数的价值超过了添加

为什么
System.Linq.Lookup
类中没有公共构造函数

.net framework designer将
查找
构造函数设为私有的意图是什么?

两个可能的原因:

  • 因为它是不可变的,所以所有初始化都必须在构造时完成,因此在这种情况下,工厂方法(
    Enumerable.ToLookup
    )比复杂的公共构造函数更合适
  • 因为工厂方法足以创建
    查找
    ,所以不需要构造函数

  • 最终,设计师不必为不做某事辩护。当存在工厂方法来创建构造函数时,我几乎看不到构造函数的价值。如果您觉得有一个用例,其中构造函数的价值超过了添加一个构造函数的成本(包括设计、构建、测试、记录和支持),那么请随意提出建议。

    您需要一个构造函数做什么,而您不能用
    ToLookup
    ?该类是不可变的,所以您所能做的就是创建一个空查找。我的意图是将查找类用作字典,根据需要添加元素。我投票结束这个问题,因为我们无法理解.NET开发人员的想法。@MarkoKrizmanic那么你应该研究一下如何获得一个可以有多个键的字典(因为有很多关于如何实现这一点的信息),与其问为什么
    Lookup
    没有构造函数。@MarkoKrizmanic生成的查找具有唯一的键,每个键都可以映射到多个值。我认为第一个参数无效,有很多类具有不可变的公共构造函数。这两个概念是正交的。@Matthen是的,但在这种情况下,构造函数必须具有创建类所需的所有信息。工厂方法在这种情况下更实用,因为它可以私下(或在这种情况下在内部)修改对象。很公平,感谢您的澄清。