全局命名空间总是使用命名空间?

时间:2015-11-09 19:58:53

标签: c# namespaces

我觉得这是一个愚蠢的问题,但我似乎无法弄清楚为什么会这样。请考虑以下事项:

    JButton btnNewButton_1 = new JButton("Log In");
    btnNewButton_1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {

            if(Username.equals(textField1.getText())){

                    if(Password.equals(textField2.getText())){
                        // close(LoginGUI);
                        // run(StudentGUI); 

                    **Missing function**

                        msg = "Loged in!";
                    }else{
                        msg = "Login Denied";
                    }
                }else{
                    msg = "Login Denied";
                }   
                JOptionPane.showMessageDialog(null,msg);                    
            }




        });
    btnNewButton_1.setBounds(157, 230, 89, 23);
    frame.getContentPane().add(btnNewButton_1);
}

现在,因为我已声明我想使用myNamespace;为什么编译器顽固地试图使用全局版本而不是命名空间版本?如果要这样做,使用的重点是什么?

我的真实代码当然比这更复杂。在实际代码中,我遇到了(Unity API)中的问题,我在更多这样的情况下遇到编译错误:

// file: A.cs
class A {
    public static string ns = "global";
}


// file: myNamespace\A.cs
namespace myNamespace {
    class A {
        public static string ns = "myNamespace";
    }
}


// in some other file...
using myNamespace;

class myClass {
    public void myMethod() {
        Console.WriteLine(A.ns);
    }
}

// OUTPUT: global

这给了我一个参数例外。不确定这可能与泛型有关吗?我错过了一些非常愚蠢的东西吗?

1 个答案:

答案 0 :(得分:1)

我现在无法测试或查找规范,但我相信解析规则会在名称空间中搜索调用代码。由于您的调用代码位于全局命名空间中,因此会搜索该命名空间。如果您将调用代码放在myNamespace命名空间内,我怀疑您是否得到了您正在寻找的行为。

如果调用代码不在 命名空间中,那么你应该得到一个"模糊类型"编译错误。

另请注意,默认情况下,您的课程为internal,但如果您的课程都在同一个程序集中,则应该是一个问题。