c# - 为什么在这种情况下会出现“类型是在未引用的程序集中定义的”?
问题描述
考虑以下导致的情况:
“ConnectionStringSettingsCollection”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Configuration, Version ...”的引用。
程序集 A.dll:
// References System.Configuration
public class Foo
{
public Foo(int value)
{
// ...
}
// ConnectionStringSettingsCollection is defined in System.Configuration
public Foo(ConnectionStringSettingsCollection connString)
{
// ...
}
}
程序集 B.dll:
// References A.dll and _not_ System.Configuration
public class Bar
{
void SomeMethod()
{
var aFoo = new Foo(3); // Complains
}
}
该行var aFoo = new Foo(3);
抱怨上面提到的错误消息,这是清晰易懂的。
但是我不明白,为什么当类型没有公开公开任何属性也没有任何方法返回该类型的任何内容时,我必须System.Configuration
在程序集中引用。B.dll
解决方案
该类型没有公开公开任何属性,也没有任何方法可以返回该类型的任何内容
这不是真的。该Foo
类型有一个公共构造函数,该构造函数期望该类型作为其参数:
public Foo(ConnectionStringSettingsCollection connString)
因此,它是类型(和程序集)公共合同的一部分。在程序集中B
,编译器需要完全理解这个契约,以便能够解析和调用正确的方法、属性、构造函数等。
推荐阅读
- c++ - '/usr/include/glib-2.0/glib/gurifuncs.h 从 glib-2.0 中丢失
- python - 具有复合索引 Mongodb 的高查询目标
- python - pandas groupby 并按排名列获取 val
- javascript - 试图为作为函数的变量提供一个值
- javascript - 通过javascript更改复选框并将值传递给php
- laravel - NGINX 不接受大于 1MB 的文件
- css - 防止 Safari 在拖动鼠标时切换到文本光标
- android - 如何在我的数据库中显示所有评论
- php - 评论和回复系统
- java - java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.util.Iterator java.util.List.iterator()”