“你必须在奇怪的情况下添加对程序集的引用”编译器错误

时间:2011-08-18 11:09:19

标签: c# overloading

我有两个应用程序App1和App2。 App1添加了对App2的引用,App2添加了对System.Drawing的引用。

在App2中有一个带有两个重载的函数,第一个是 protected ,其参数来自System.Drawing.Bitmap,第二个是 public 有一个整数参数。

namespace App1Namespace
{
    class Program
    {
        static void Main(string[] args)
        {
            App2Namespace.StaticClass.Func(4);

namespace App2Namespace
{
    public class StaticClass
    {
        protected static void Func(System.Drawing.Bitmap bitmapParam) { }
        public static void Func(int intParam) { }

构建App1时,将抛出以下编译时错误:

  

错误1类型'System.Drawing.Bitmap'在程序集中定义   没有引用。您必须添加对程序集的引用   'System.Drawing,Version = 4.0.0.0,Culture = neutral,   公钥= b03f5f7f11d50a3a”。

虽然具有Func param的Bimap受到保护,但App1需要引用System.Drawing

问题是为什么App1需要System.Drawing?以及为什么只有在调用第二个重载时才出现此错误,并且在调用另一个重载(例如,带有两个参数)时不会出现此错误?

注意:当第一个重载变为私有时,错误将消失。

2 个答案:

答案 0 :(得分:1)

原因可能是因为您将StaticClass声明为普通班级。因此可以在任何引用程序集中覆盖该类(因此使用protected几乎对静态方法有意义)。如果所有方法都是真正的静态方法,那么将类本身设为静态,并将范围从protected更改为internalprivate

答案 1 :(得分:0)

它可能只是需要一个引用,因为你的App2Namespace.StaticClass.Func可以在App1命名空间的类中继承(因为它受到保护)。如果发生这种情况,它还需要引用System.Drawing。