C#在当前类中调用受保护的非静态方法的可能方法?

时间:2014-07-27 00:42:08

标签: c# methods

我最近选择了C#作为另一种语言来进一步了解其他语言,但是在尝试习惯语言的语法时,我在使用public static void Main();并调用时遇到了这个问题同一个类里面的方法。我的代码如下:

namespace TestingProject
{
    class Class1
    {
        public static void Main()
        {
            System.Console.WriteLine("This is nothing but a test \n Input 'test'");
            var UserInput = System.Console.ReadLine();
            string Input = this.ValidateInput(UserInput);
            System.Console.WriteLine(Input);
            System.Console.WriteLine();

        }
        protected string ValidateInput(string Variable)
        {
            var VarReturn = (string)null;
            if (string.Equals(Variable, "test"))
            {
                VarReturn = "Correct \n";
            }
            else
            {
                VarReturn = "Incorrect \n";
            }
            return VarReturn;
        }


    }
}

因此,根据我的研究结果,您发现无法使用this语法从静态函数调用内部私有方法。

所以我尝试了self但这没有用(假设python,PHP等语言允许self),所以尝试了以下内容:

string Input = TestingProject.Class1.ValidateInput(UserInput);

要提供以下信息:

  

错误1非静态字段需要对象引用,   方法或财产   ' TestingProject.Class1.ValidateInput(字符串)' C:\用户\ XXX \应用程序数据\本地\临时   Projects \ ClassProject \ Class1.cs 14 28 ClassProject

那么,我发现这个小宝石确实解决了这个问题:

var CurrClass = new Class1();

并将受保护的方法称为:

var CurrClass = new Class1();
string Input = CurrClass.ValidateInput(UserInput);

令我感到惊讶的是,这是调用内部非staic私有方法的唯一可用方法,所以我的整体问题是:

有没有办法调用受保护/私有的非静态方法而不初始化一个新变量来包含当前对象?

1 个答案:

答案 0 :(得分:2)

问题是您的Main方法是静态的。静态方法即使在同一个类中也不能访问非静态方法,而无需具有该对象的实例。这就是拥有静态方法的全部要点:您没有具体的对象可供使用。它超出了其他实例方法的范围。