簡體   English   中英

C#可能在當前類中調用受保護的非靜態方法的方法嗎?

[英]C# Possible method to call protected non-static methods in current class?

我最近選擇了C#作為另一種語言,以將我的知識進一步理解為其他語言,但是當嘗試適應該語言的語法時,在使用public static void Main();時遇到了這個問題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(string)'需要對象引用C:\\ Users \\ xxx \\ AppData \\ Local \\ Temporary Projects \\ ClassProject \\ Class1.cs 14 28 ClassProject

因此,我發現了這個能解決問題的小寶石:

var CurrClass = new Class1();

並這樣調用了protected方法:

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

確實讓我感到驚訝的是,這是調用內部非靜態私有方法的唯一可用方法,所以我的總體問題是:

有沒有一種方法可以調用受保護/私有的非靜態方法,而無需初始化新變量來包含當前對象?

問題是您的Main方法是靜態的。 如果沒有對象的實例,即使在同一類中,靜態方法也無法訪問非靜態方法。 這就是擁有靜態方法的全部要點:您沒有要使用的具體對象。 它不在其他實例方法的范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM