我在ProjectA
中添加了对ProjectB
的引用,并继承了Class1
中的Class2
。在这里,我可以访问Sample1
中的两种方法(Sample2
和Class2
)。
但如果我在ProjectB
中添加ProjectC
的引用并尝试访问Sample1
,则会出现编译时错误。
我怀疑:如果我在ProjectA.Class1
中继承ProjectB.Class2
,这意味着Class1
中的方法副本应该在Class2
中,那么为什么Sample1
方法是即使我添加了对ProjectC.Class3
的引用,<{1}}中也不可用?
ProjectB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProjectA
{
public class Class1
{
public void Sample1()
{
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjectA;
namespace ProjectB
{
public class Class2 : Class1
{
public void Sample2()
{
Class2 obj = new Class2();
}
}
}
答案 0 :(得分:1)
在最后ProjectC
个程序集中,您有Class2 obj = new Class2();
。这意味着Class2
和 汇编Class2
的所有(直接和间接)基类的程序集,包括{的程序集{1}}需要从Class1
引用。
ProjectC
的实例,如Class2
,拥有从基类继承的方法,如obj
,以及直接在Sample1
中声明的方法({{1} }}),但我怀疑这与你的问题相关&#34;。
添加:以下是BCL中的类的示例。使用Visual Studio(或任何IDE)创建一个新的空项目。默认情况下,新项目将引用BCL程序集Class2
,但不引用BCL程序集Sample2
。然后使用这个程序:
System.dll
编译器将发出错误CS0012:类型&#39; System.Configuration.ConfigurationSection&#39;在未引用的程序集中定义。您必须添加对程序集的引用,System.Configuration,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39;。原因很清楚System.Configuration.UriSection
class是在您引用的程序集,而它的直接基类System.Configuration.ConfigurationSection
(在错误文本中提到)是在您不使用的程序集中定义的。
System.Configuration.dll
的程序集需要引用两个程序集(并隐式using System.Configuration;
namespace N
{
static class Program
{
static void Main()
{
new UriSection();
}
}
}
,类N.Program
的程序集。)
答案 1 :(得分:0)
嗯,这很简单 - ProjectA 不链接到ProjectB - 它只被引用。同样,Class2
根本没有Sample1
的实现,仅在Class1
中实现。如果您在Class2
中覆盖了该方法,则会发生变化。但是,当然,再次,如果你从那里调用基本方法,它将再次引用Class1
中的方法,而不是复制它。
因此,当您引用ProjectB时,您还需要引用ProjectA。一切都在.NET中动态链接(除非你添加一个单独的合并步骤,这通常不是最好的主意)。