【问题标题】:Functions tutorial not clear enough函数教程不够清晰
【发布时间】:2012-11-13 13:34:07
【问题描述】:

我是 C# 和面向对象语言的绝对初学者,所以我在网上找到了这个教程,并在 functions 上找到了。 现在,它说: 你这样声明函数:

public int AddNumbers(int number1, int number2) 
{
     int result = number1 + number2;
     return result; 
}

但它并没有说这个方法必须在 Main() 方法之外。 而且,它说函数是这样调用的:

int result = AddNumbers(10, 5);
Console.WriteLine(result);

我的猜测是你必须把这段代码放在 Main() 方法中,但它并没有说你必须首先制作对象,所以正确的代码是:

Program add = new Program();
int result = add.AddNumbers(10, 5);
Console.WriteLine(result);

'Program' 是父类的名称。

所以我现在很困惑。我不熟悉 C# 版本,但我的结论是 tutorial 适用于 C# 2.0。

由于本教程是谷歌“C#教程”的#2,我对我和未来学习者的问题是: 是这个错误还是你在 C# 2.0 中这样做的方式,或者它只是以这种方式编写的,所以对于绝对的初学者来说还不够清楚?

【问题讨论】:

标签: c# function methods


【解决方案1】:

您使用的教程具有误导性。在 c# 中没有独立的函数。所有可执行代码都放在属于类的方法中。

这就是为什么最好避免使用“函数”一词并使用常用的(类的)方法。

方法可以是静态的——那些在类上调用并且不需要类实例,或者实例方法——那些需要一个必须首先创建的现有实例

【讨论】:

    【解决方案2】:

    他们的示例对于初学者来说不是很清楚,但看起来他们假设您是在同一个类中调用该函数。

    所以这样的事情会起作用:

    public class Foo
    {
       public void Bar()
       {
         int result = Add(1, 3);
       }
    
       public int Add(int first, int second)
       {
         return first + second;
       }
    }
    

    这可能会在您的 Main 方法中使用,例如:

    public static Main()
    {
      var foo = new Foo();
      foo.Bar();
    }
    

    正如@Oded 在他的回答中指出的那样,作者可能已经理所当然地认为你不能嵌套函数。

    【讨论】:

    • Main 通常是 static,因此就本教程而言,Add 方法也必须是 static,或者实例化的类才能正常工作。
    • 在这种情况下,引用 Main 可能会造成混淆。我使用它是因为 OP 做到了。我会改变它以避免混淆。
    【解决方案3】:

    方法与实例相关,你应该通过从类中创建一个实例来调用它们,然后调用“和你一样”的方法

    但是,static 方法是类方法,因此您可以在不创建实例的情况下调用它们

     public static int AddNumbers(int number1, int number2) 
      {
     int result = number1 + number2;
     return result; 
      }
    

    然后你通过类名Program.AddNumbers(1,2)调用方法

    但是,如果方法是静态的,您可以在同一类中的静态方法中调用它,而无需指定类的名称

     AddNumber(1,2)
    

    因为AddNumber 是在同一个类中调用的静态方法Program

    【讨论】:

      【解决方案4】:

      本教程可能认为方法不能嵌套是理所当然的。

      方法不能包含方法 - 方法应该在类或结构中。

      您所做的 - 就教程而言,您得到的解决方案是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        相关资源
        最近更新 更多