【问题标题】:How can I have both public and private empty constructor? [closed]我怎样才能同时拥有公共和私有的空构造函数? [关闭]
【发布时间】:2018-03-28 14:32:24
【问题描述】:

我怎样才能同时拥有私有和公共的空构造函数?我需要一个空的私有构造函数,因为我首先使用 EF 编写代码。

documentation 说:

实体框架是否需要具有公共空构造函数的对象?

虽然默认生成的类有一个自动提供的公共无参数构造函数,但框架中没有任何东西要求它是公共的。必须有一个无参数的构造函数,但它可以是内部的或私有的。

我的尝试:

    public class ImmediatePayment:Payment
    {
            private ImmediatePayment(){}
        
           //Problem
            public ImmediatePayment():basePayment(0){}
            
        //defining number other then 0 would make ImmediatePayment pointless, I could check the value of DeadlineDaysAfterOrder, but it seems really really nice to have a constructior without a number
            public ImmediatePayment(intDeadlineDaysAfterOrder):basePayment(DeadlineDaysAfterOrder){}
            
    }
            
public class Payment
{
      public int DeadlineDaysAfterOrder {get;private set;}
      
      private Payment(){}
      public Payment(int DeadlineDaysAfterOrder)
      {
      this.DeadlineDaysAfterOrder  = DeadlineDaysAfterOrder;
      }
}

【问题讨论】:

  • 那么你为什么需要public
  • 非常有兴趣了解您为什么认为需要此功能
  • 拥有私有构造函数的要点是不允许对象被公开构造。如果您希望它是公开构造的,那么您不需要私有构造函数。
  • EF Code First 不需要任何显式构造函数(如果这些构造函数是实体)。我认为您需要向我们提供更多背景信息,说明您认为自己需要这个的原因。
  • 这是一个典型的 X-Y 问题。

标签: c# ef-code-first code-first


【解决方案1】:

答案是,你不能在同一个类中同时拥有空的私有和空的公共构造函数。但在这种情况下,您不需要删除 private 构造函数。

必须有无参构造函数,可以是internalprivate。 但它不一定是private,它可以是public,如果它是生成的,这也是默认的。

参考:Entity Framework FAQ: Entity Classes - Does the Entity Framework require objects with public empty constructors?

【讨论】:

  • 我认为它必须是内部的或私有的。应该这样做!
  • @mko,我对这个问题投了赞成票。我希望我们的程序员在需要帮助时伸出援手并提出问题,除非他们不这样做,这会给我们以后的 sprint 带来麻烦。对不起,你拿错了。
  • @mko 没必要粗鲁:) 他做了一个友好的评论,你开始侮辱。也不需要;)
  • @maccettura 已经被删除了。
猜你喜欢
  • 1970-01-01
  • 2017-04-30
  • 2011-02-08
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多