【问题标题】:I created two constructors but can only create an instance using one of them我创建了两个构造函数,但只能使用其中一个创建实例
【发布时间】:2015-12-01 02:04:47
【问题描述】:

编辑: 我在这里与公司财产合作,这个概念对阅读这篇文章的人来说应该是有意义的: 我有 2 个用于 EFImport 的构造函数,一个有 2 个参数,另一个有 3 个参数。我的建议是我的带有 2 个参数的构造函数没有被识别。我正在使用 new 关键字,并使用具有 3 个参数的构造函数以完全相同的方式初始化对象,并且它运行良好。但是没有识别出带有 2 个参数的构造函数。再说一次,我不能在这里专门放代码,但我要问的是这个概念。

我需要使用两个不同的构造函数,一个需要一个额外的参数,一个不需要那个参数。我不确定为什么我无法真正到达只有两个参数的构造函数。

我有以下构造函数:

public EFImport(string empId, Class A instanceA, IEnumerable<ClassB> instanceB)
{
     //do stuff here
}

public EFImport(string empId, Class A instanceA)
{
     //do other different stuff here
}

我正在尝试这样调用构造函数:

Public HttpResponseMessage Post([FromBody]string fEmp)
{
     //do stuff here
     //call constructor here:
     //NEW keyword is used here
     var fileImp = new EFImport(empId, instanceA, instanceB);
     //this works just fine
}

Public HttpResponseMessage Put([FromBody]string empImportId)
{
     //do stuff here
     //call constructor here:
     //NEW keyword used here
     var fileImp = new EFImport(empId, instanceA);
     //Here it gives me the error stated below
}

错误 509 'EFImport' 不包含采用 2 个参数的构造函数

我到底做错了什么?两个构造函数都是公共的,具有 3 个参数的构造函数工作得很好,但是编译器看不到构造函数采用 2 个参数。我是否忽略了一些非常简单的事情?

【问题讨论】:

  • 不应该是ClassA而不是Class A吗?整洁很重要。
  • 你确定你发布的代码可以编译吗?
  • @stephen.vakil 从技术上讲,该代码是公司财产,因此我实际上无法使用原始代码。让我看看我是否可以详细说明代码
  • 显然var EFImport(empId, instanceA) 没有任何意义。 真实代码是否读到类似var whatever = new EFImport(empId, instanceA);的内容?

标签: c# oop constructor


【解决方案1】:

我似乎不知道你在做什么:

var EFImport(empId, instanceA)

这段代码有一些问题:

  • 您正在错误地实例化对象。在 C# 中,如果你想创建一个新对象,你会使用:

    TypeOfVar nameOfVar = new TypeOfVar();
    

    var nameOfVar = new TypeOfVar();
    

    有关如何在 C# 中使用构造函数的更多信息,请访问:https://msdn.microsoft.com/en-us/library/ace5hbzh.aspx

  • 您似乎也缺少分号;)

【讨论】:

  • 我编辑了代码以表明我实际上正确地实例化了对象。我在问一个与错误相关的特定问题 - 为什么无法识别具有 2 个参数的构造函数。这就是我要问的。
【解决方案2】:
var obj = new EFImport(empId, instanceA);

var obj = new EFImport(empId, instanceA, instanceB);

应该可以。

【讨论】:

  • should work. 为什么?如何解释 OP 代码中的问题,他如何修复它以及为什么它应该工作。
  • 我认为操作员不会读取它,就像 Google 上 c# constructor 的结果一样。我可以告诉他,他必须使用 new 关键字来实例化对象,并且他必须将其分配给一个变量以进一步使用它,但 TL;DR。
  • I don't think the op will read,那么您发帖的目的是什么。给我们解释一下?我们已经可以自己解决问题了。
  • @Tarabas 首先我确实读过这个,其次我使用了新的关键字。底线是我有 2 个构造函数,一个接受 3 个参数,另一个接受 2 个参数。我有一个错误,说我没有与该对象关联的构造函数,它只接受 2 个参数。我用的是new关键字,你这种居高临下的语气很不受欢迎,似乎有违本站的理念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2020-04-06
相关资源
最近更新 更多