【问题标题】:one namespace cannot find class in the other namespace一个命名空间在另一个命名空间中找不到类
【发布时间】:2012-05-27 12:10:12
【问题描述】:

我是 c# .Net 的新手。在我的解决方案中,两个命名空间不能互相看到。

我有项目 A,其中包含部分类 c1 和一些方法。 具有不同命名空间的项目 B 也有一个部分类 c1,项目 A 中的一些同名方法和其他一些方法。

我在项目 A 中添加了对项目 B 的引用,在项目 A 类中包含使用命名空间 B。

但还是在 A 中,我不能从 B 中使用类 c1 中的内容,我只能从 A 本身中看到类 c1 的方法。我想在 A 的两个项目中使用 c1 的方法。

有人可以帮我解决这个问题吗?我正在使用 .Net 框架 4

【问题讨论】:

  • 所以我通过更改它们的类中的属性和命名空间部分使这两个项目具有相同的命名空间。它们仍然是两个不同的项目,只有相同的命名空间。那行得通吗?我只想在项目A中使用B中的c1的一些方法,其中c1的方法也在A中定义,有一些重叠..

标签: c# .net-4.0 reference namespaces partial-classes


【解决方案1】:

B 可能是另一个命名空间中的完整类,但仅定义为特定文件中的部分类。正如@tzerb 提到的,你不能在两个不同的命名空间中有两个相同的部分类——由于命名空间不同,类名本身(完全限定)是不同的。

如果您只需要在 A 类中使用 B 类的方法(并可能覆盖它们),您可以使用继承:

class A: B
{
    // override methods from B
    // or call base.<method> when needed
}

或收容:

class A
{
    private B _b;

    // construct and use _b methods directly
}

如果A 使用继承B,否则使用包含。

【讨论】:

  • 还是不同的项目。要让项目 A 从项目 B 中引用某些内容,它需要编译 B 并将其包含在 A 中。一旦你编译了一个类,你就不能再在 partial 定义中使用它 - 你根据我的回答,现在可以包含或继承它。
  • 谢谢yamen,事情是A和B是两个项目,有很多类和相同的命名空间。在项目 A 中:命名空间 Example1{ public partial class c1{ public void getsomething(){return result1;} } } 在项目 B 中:命名空间 Example1{ public partial class c1{ public void getsomethingElse(){return result2;} } } 我想要能够在 projectA 中调用 getsomething() 和 getsomethingElse(),但我现在看不到 getsomethingElse(),因为它在不同的项目中......
  • 创建对象B:var b = new B(),然后在class A中调用它:b.getSomethingElse()
  • “一旦你编译了一个类,你就不能再在部分定义中使用它——你现在可以包含或继承它”——好的,谢谢,我想我明白了现在..:)
  • 但是 A 和 B 实际上是相同的命名空间,相同的类名,只是不同的项目名称...我无法在 A 中创建 B 的实例,因为它们具有相同的名称..我只是想在项目 A 中调用 getSomethingElse() .. 这可能吗?
【解决方案2】:

部分类必须共享一个命名空间。这两个称为 c1 的部分类是完全不同的类。

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2017-07-21
    相关资源
    最近更新 更多