如何准确调用具有不同修饰符的方法

How are Methods with different modifiers called exactly

这是我的第一个 post。我正在尝试 运行 这个 C# 代码,但我得到了一个不需要的输出:

当我运行下面的代码:

class Car1
    {
        public void PublicHelperMethod()
        {
            Console.WriteLine("Inside Public helper method");
            Console.WriteLine("Calling Private Helper method.." + PrivateHelperMethod());
        }

        private string PrivateHelperMethod()
        {
            Console.WriteLine("Private Helper Method Called!");
            return "Now Inside Private Helper method";
        }
    }

我希望输出按此顺序

Inside Public helper method

Calling Private Helper method..Private Helper Method Called!

Now Inside Private Helper method

但我得到以下输出:

Inside Public helper method

Private Helper Method Called!

Calling Private Helper method..Now Inside Private Helper method

我错过了什么?为什么顺序变了? 提前致谢。

这完全是因为 C# 计算表达式的方式。

让我们逐个调用这个方法。

Console.WriteLine("Inside Public helper method");

简单易用,打印 Inside Public helper method

Console.WriteLine("Calling Private Helper method.." + PrivateHelperMethod());

在这里,C# 看到你想要打印一些东西。但是你要打印的东西是"Calling Private Helper method.." + PrivateHelperMethod()。这意味着它必须在打印之前先知道 PrivateHelperMethod 的 return 值。要知道 return 值,必须调用该方法。在 PrivateHelperMethod 里面,我们有

Console.WriteLine("Private Helper Method Called!");

同样,一个简单的。只打印 Private Helper Method Called!.

然后 PrivateHelperMethod returns 一个值。该值附加到 Calling Private Helper method..。现在您要打印的所有内容都已完成评估,它会打印 Calling Private Helper method..Now Inside Private Helper method.

what do I do to get the desired output without having two Console.WriteLine statements?

class Car1
{
    public void PublicHelperMethod()
    {
        Console.WriteLine("Inside Public helper method");
        Console.WriteLine("Calling Private Helper method.." + PrivateHelperMethod());
    }

    private string PrivateHelperMethod()
    {
        return "Private Helper Method Called!\nNow Inside Private Helper method";
    }
}

考虑一下 Console.WriteLine("Calling Private Helper method.." + PrivateHelperMethod()); 这行是为了在控制台中打印一些东西吧?并且要打印的值将是一个连接的字符串,对吗?因此,在打印之前,它将检查第二个字符串以执行连接,并将控件移至 PrivateHelperMethod,以便打印 Private Helper Method Called!

嗯,那是因为在执行 PublicHelperMethod 中的第二个 WriteLine 之前,您的 PrivateHelperMethod 会运行。

你可以做的是:

class Car1
{
    public void PublicHelperMethod()
    {
        Console.WriteLine("Inside Public helper method");
        Console.WriteLine("Calling Private Helper method..");
        Console.WriteLine(PrivateHelperMethod());        
    }

    private string PrivateHelperMethod()
    {
        Console.WriteLine("Private Helper Method Called!");
        return "Now Inside Private Helper method";
    }
}

你可以这么写:

public void PublicHelperMethod()
    {
        Console.WriteLine("Inside Public helper method");
        Console.WriteLine("Calling Private Helper method.." + PrivateHelperMethod());
        Console.WriteLine("Private Helper Method Called!");
    }

    private string PrivateHelperMethod()
    {
        return "Now Inside Private Helper method";
    }

你在它调用时写 "Private Method Called",工作就完成了。