Can';t调用公共方法c#

Can';t调用公共方法c#,c#,class,methods,private,public,C#,Class,Methods,Private,Public,我无法查看或调用publicMethod()方法作为选项,它说它在当前上下文中不存在 任何原因,用一个有限的理论例子 错误1'Main':成员名称不能与其封闭类型相同 把代码扔进一个新项目,砰!谢谢大家 试试这个: namespace ConsoleApplication3 { public class EncapulationTest { public static void publicMethod() { Consol

我无法查看或调用
publicMethod()
方法作为选项,它说它在当前上下文中不存在

任何原因,用一个有限的理论例子

错误1'Main':成员名称不能与其封闭类型相同

把代码扔进一个新项目,砰!谢谢大家

试试这个:

namespace ConsoleApplication3
{
    public class EncapulationTest
    {
        public static void publicMethod()
        {
            Console.WriteLine("This is the public method from the EncapsulationTest class!");
        }

        private static void privateMethod()
        {
            Console.WriteLine("This is the private method from the EncapsulationTest class!");
        }

    }
   public class Main
    {
       public static void Main()
       {
           publicMethod();
           Console.ReadLine();
       }
    }

问题是您直接调用了
publicMethod
。与名称空间一样,类彼此位于不同的名称作用域中,因此虽然同一类中的方法可以单独通过名称引用,但另一个类中的方法必须显式指定该类。例如,如果项目中的多个类具有方法<代码>公共方法< /代码> -因此,调用必须是显式的。 请注意,虽然C#5.0只要求显式的类名,但在C#6.0中,现在可以使用语句指定带有
的类,以允许以这种方式指定其他类的方法。看


请注意,错误说明
名称不能与封闭类型相同,这是由于同时命名类和方法
Main
。这是一个例外,因为它的语法非常接近,因此是不允许的。这就是为什么大多数模板会将
Main
方法放入
程序
类,而不是
Main
类。

publicMethod
是类
EncapulationTest
的静态成员。从类
程序
中的代码来看,编译器应该知道
publicMethod
在哪里?它是否应该搜索它能看到的每个类以查找
publicMethod
?如果找到多个,它会做什么

您需要告诉它该方法属于哪个类:

public static void Main()
{
   EncapulationTest.publicMethod();
}
现在它知道您请求的是
publicMethod
,它是类
EncapulationTest
的静态成员


请注意,在
EncapulationTest
类本身中,您不需要添加类型,因为编译器将始终在当前作用域中查找。还要注意,如果它是一个实例而不是一个静态方法,则不需要类型,而需要具有该方法的类型的对象。

EncapulationTest.publicMethod()
OP可能从解释中学到更多。完全同意。另外,如果OP编译了他的代码,请阅读编译器错误消息,如果这还不足以理解,请阅读完整的解释,我们甚至不必看到这个问题出现。我不知道关于6.0。谢谢。@Matt请注意,.NET 4.6和vs 2015预览版是beta版的,如果您有一台额外的机器可以使用它-始终是了解最新函数性的最好方法。还要注意实例/静态的是,实例方法可以作用于同一类中的其他实例方法和静态方法,但是静态方法不能以这种方式引用实例方法,因为它们缺少实例。
EncapulationTest.publicMethod();