C#: Problem trying to resolve a class when two namespaces are similar
I'm running into an issue where I can't make a reference to a class in a different namespace. I have 2 classes:
namespace Foo
{
public class Class1 { ... }
}
namespace My.App.Foo
{
public class Class2
{
public void SomeMethod()
{
var x = new Foo.Class1; // compile error!
}
}
}
The compile error is:
The type or namespace name 'Class1' does not exist in the namespace 'My.App.Foo'
In this situation, I can't seem to get Visual Studio to recognize that "Foo.Class1" refers to the first class. If I mouse-over "Foo", it shows that its trying to resolve that to "My.App.Foo.Class1"
If I put the line:
using Foo;
at the top of the .cs file that contains Class2, then it also resolves that to "My.App.Foo".
Is there some trick to referencing开发者_如何学JAVA the right "Foo" namespace without just renaming the namespaces so they don't conflict? Both of these namespaces are in the same assembly.
You can use global::
to globally qualify a namespace: global::Foo.Class1
should work,.
You could also alias global::Foo
to make things easier. At the top of your source file, below your using statements, add:
using AliasClass1=global::Foo.Class1;
Now you can use:
AliasClass1 c = new AliasClass1();
// and so on.
Of course, you can use a better name than AliasClass
:-)
var x = new global::Foo.Class1();
In addition to LBushkin's answer, you might be interested in these articles by Eric Lippert :
Do not name a class the same as its namespace, Part One
Do not name a class the same as its namespace, Part Two
Do not name a class the same as its namespace, Part Three
Do not name a class the same as its namespace, Part Four
They are not directly related to your problem, but they give an interesting insight on naming strategies
精彩评论