继承自不同的程序集

时间:2014-05-22 09:47:18

标签: c# oop

我在ProjectA中添加了对ProjectB的引用,并继承了Class1中的Class2。在这里,我可以访问Sample1中的两种方法(Sample2Class2)。

但如果我在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();
        }
    }
}

2 个答案:

答案 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中动态链接(除非你添加一个单独的合并步骤,这通常不是最好的主意)。