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

本文关键字:静态方法 方法 受保护 调用 | 更新日期: 2023-09-27 18:15:08

我最近选择了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非静态字段需要对象引用,方法或属性C:'Users'xxx'AppData'Local'Temporary TestingProject.Class1.ValidateInput(字符串)"Projects'ClassProject'Class1.cs 14 28 ClassProject

然后,我发现了这个小宝石,它确实解决了这个问题:

var CurrClass = new Class1();

,并像这样调用受保护的方法:

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

让我惊讶的是,这是调用内部非静态私有方法的唯一可用方式,所以我的总体问题是:

是否有一种方法可以调用非静态方法,这些方法是受保护的/私有的,而不需要初始化一个新变量来包含当前对象?

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

问题是您的Main方法是静态的。如果没有对象的实例,静态方法就不能访问非静态方法,即使在同一个类中也是如此。这就是拥有静态方法的全部意义所在:你没有一个具体的对象可以使用。