为什么未使用的重载需要项目参考?

杰里米·K

我正在寻找一种解释,为什么当使用未创建的包含未引用类的构造函数重载该类中的其他构造函数时,该重载会生成编译时错误,并且为什么该构造函数可以正确运行。

这是一些演示此问题的示例代码。

// Console Project - references CL1 but not CL2
static void Main(String[] args)
{
    var rc1 = new ReferencedClass(); // compiles and runs
    var rc2 = new ReferencedClass(1); // wont compile. Needs CL2 reference
    var rc3 = new ReferencedClass(0, ""); // compiles and runs
}

// Class Library 1 (CL1) - references CL2
public class ReferencedClass
{
    private UnreferencedClass _unreferencedClass;
    public ReferencedClass()
    {
        _unreferencedClass = new UnreferencedClass();
    }

    public ReferencedClass(Int32 id)
    {
        _unreferencedClass = new UnreferencedClass();           
    }

    public ReferencedClass(UnreferencedClass uf)
    {
        _unreferencedClass = uf;
    }

    public ReferencedClass(Int32 id, String name)
    {
        _unreferencedClass = new UnreferencedClass();
    }
}

// Class Library 2 (CL2)
public class UnreferencedClass {}

在所有情况下,都不会使用带有未引用类的构造函数,那么为什么在Int32重载的构造函数上构建失败

亨里克

在重载解析期间,编译器需要该类型。

参见此处:https : //connect.microsoft.com/VisualStudio/feedback/details/817276/error-cs0012-the-type-is-defined-in-an-assembly-that-is-not-referenced-issued-一种未使用的扩展方法

连接链接的解释答案:

在将程序中的名称“ ReferencedClass”赋予含义的过程中,编译器将遵循其查找规则来确定必须检查的方法集。作为重载解析的一部分,将两个采用一个参数的构造函数进行检查。为了确定哪种调用有意义,编译器必须了解构造函数签名中的所有类型。如果由于缺少参考而找不到某些类型,则编译器不会简单地丢弃候选对象,而是要求用户提供缺少的参考。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是Windows服务必须安装的项目安装程序,还是为什么需要项目安装程序

来自分类Dev

为什么需要重载方法?

来自分类Dev

为什么重载ostream的operator <<需要引用“&”?

来自分类Dev

为什么需要运算符重载?

来自分类Dev

为什么需要获取参考以获取lambda中的参考?

来自分类Dev

使用 GetEncoder() 需要什么参考?

来自分类Dev

为什么Rust编译器没有检测到未使用的借用参考?

来自分类Dev

为什么C ++编译器没有优化未使用的参考变量?

来自分类Dev

为什么有时即使我的项目未直接使用Nuget依赖项,也有时需要添加它们?

来自分类常见问题

为什么重载函数的函数指针需要static_cast?

来自分类Dev

为什么在运算符重载中需要引用?

来自分类Dev

为什么需要重新声明重载的虚拟函数?

来自分类Dev

为什么在重载分配中使用return * this?

来自分类Dev

为什么在运行时未实现重载?

来自分类Dev

<<重载运算符,为什么它不能仅返回类类型(无参考)

来自分类Dev

为什么在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?

来自分类Dev

Android Studio-为什么未使用/不需要导入语句?

来自分类Dev

如何解决错误:此服务需要项目ID,但无法确定

来自分类Dev

Django rest Framework-需要项目列表,但类型为“ QuerySet”

来自分类Dev

为什么不能使用指针使用->调用重载()

来自分类Dev

每个HTML div需要项

来自分类Dev

为什么decltype无法与重载函数一起使用?

来自分类Dev

为什么使用varargs的重载方法会导致StackOverflowError?

来自分类Dev

为什么不能对类使用运算符重载?

来自分类Dev

为什么使用varargs的重载方法会导致StackOverflowError?

来自分类Dev

为什么在Delphi项目中需要midas.dll?

来自分类Dev

为什么我们的Android项目需要多个清单?

来自分类Dev

为什么在 WIN32 项目中需要 MyRegisterClass() 函数?

来自分类Dev

为什么会出现“非标准语法;使用'&'创建指向成员的指针”和“没有重载函数需要2个参数”的错误?

Related 相关文章

  1. 1

    是Windows服务必须安装的项目安装程序,还是为什么需要项目安装程序

  2. 2

    为什么需要重载方法?

  3. 3

    为什么重载ostream的operator <<需要引用“&”?

  4. 4

    为什么需要运算符重载?

  5. 5

    为什么需要获取参考以获取lambda中的参考?

  6. 6

    使用 GetEncoder() 需要什么参考?

  7. 7

    为什么Rust编译器没有检测到未使用的借用参考?

  8. 8

    为什么C ++编译器没有优化未使用的参考变量?

  9. 9

    为什么有时即使我的项目未直接使用Nuget依赖项,也有时需要添加它们?

  10. 10

    为什么重载函数的函数指针需要static_cast?

  11. 11

    为什么在运算符重载中需要引用?

  12. 12

    为什么需要重新声明重载的虚拟函数?

  13. 13

    为什么在重载分配中使用return * this?

  14. 14

    为什么在运行时未实现重载?

  15. 15

    <<重载运算符,为什么它不能仅返回类类型(无参考)

  16. 16

    为什么在 Visual Studio 的 OpenCV 项目中使用 /MT 时仍然需要 dll?

  17. 17

    Android Studio-为什么未使用/不需要导入语句?

  18. 18

    如何解决错误:此服务需要项目ID,但无法确定

  19. 19

    Django rest Framework-需要项目列表,但类型为“ QuerySet”

  20. 20

    为什么不能使用指针使用->调用重载()

  21. 21

    每个HTML div需要项

  22. 22

    为什么decltype无法与重载函数一起使用?

  23. 23

    为什么使用varargs的重载方法会导致StackOverflowError?

  24. 24

    为什么不能对类使用运算符重载?

  25. 25

    为什么使用varargs的重载方法会导致StackOverflowError?

  26. 26

    为什么在Delphi项目中需要midas.dll?

  27. 27

    为什么我们的Android项目需要多个清单?

  28. 28

    为什么在 WIN32 项目中需要 MyRegisterClass() 函数?

  29. 29

    为什么会出现“非标准语法;使用'&'创建指向成员的指针”和“没有重载函数需要2个参数”的错误?

热门标签

归档