C#创建和使用函数

CaT*_*aTx 17 c# function

我需要C#编程方面的帮助; 我是新手,我来自C背景.我有一个这样的控制台应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Add_Function
{
   class Program
   {
      static void Main(string[] args)
      {
         int a;
         int b;
         int c;

         Console.WriteLine("Enter value of 'a':");
         a = Convert.ToInt32(Console.ReadLine());

         Console.WriteLine("Enter value of 'b':");
         b = Convert.ToInt32(Console.ReadLine());

         //why can't I not use it this way?
         c = Add(a, b);
         Console.WriteLine("a + b = {0}", c);
      }//END   Main

      public int Add(int x, int y)
      { 
         int result = x + y;
         return result;
      }//END   Add
   }//END      Program
}//END         Add_Function
Run Code Online (Sandbox Code Playgroud)

它在我调用Add()的行上给出了这个错误:

非静态字段,方法或属性'Add_Function.Program.Add(int,int)'需要对象引用

任何人都可以向我解释为什么我有这个问题.这是因为C#的架构与C不同,我称它的方式是错的吗?谢谢.

ean*_*533 49

注意:在C#中,术语"函数"通常被术语"方法"取代.为了这个问题没有区别,所以我只使用术语"功能".

其他答案已经给你一个快速的方法来解决你的问题(只是做Add一个static功能),但我想解释原因.

C#具有与C完全不同的设计范例.该范例称为面向对象编程(OOP).解释OOP和函数式编程之间的所有差异超出了本问题的范围,但这是适用于您的简短版本.

用C语言编写程序,你就可以创建一个添加两个数字的函数,该函数可以独立存在,并且可以从任何地方调用.在C#中,大多数函数不是独立存在的; 相反,它们存在于对象的上下文中.在您的示例代码中,只有该类的实例(对象)Program知道如何执行Add.换句话说,你必须创建一个实例Program,然后要求为你Program执行一个Add.

人们使用static关键字为您提供的解决方案绕过该设计.使用static关键字有点像说,"嘿,我定义的这个函数不需要任何上下文/状态,它只能被调用." 由于您的Add功能非常简单,这是有道理的.当你开始深入研究OOP时,你会发现你的函数变得更加复杂并依赖于了解它们的状态/上下文.

我的建议:拿起一本OOP书,准备将你的大脑从功能编程转换为OOP编程.你在旅途中.

  • 谢谢,我总是很感激那些解决问题根源的答案. (7认同)
  • 在C#中,函数和方法是两回事.例如,看看[匿名函数](https://msdn.microsoft.com/en-us/library/bb882516.aspx)和[匿名方法](https://msdn.microsoft.com/en) -us /库/ 0yw3tz5k.aspx). (2认同)

Ton*_*ion 18

你应该像这样做你的Add功能static:

static public int Add(int x, int y)
{ 
    int result = x + y;
    return result;
 } //END   Add
Run Code Online (Sandbox Code Playgroud)

static表示该函数不依赖于类实例.所以你可以调用它而无需创建类的类实例Program.

或者您应该在您的Program类的实例中创建,然后调用Add此实例.像这样:

Program prog = new Program();
prog.Add(5,10);
Run Code Online (Sandbox Code Playgroud)


das*_*ght 6

此代码会给您一个错误,因为您的Add函数需要static:

static public int Add(int x, int y)
Run Code Online (Sandbox Code Playgroud)

在C#中,对实例(非静态)操作的函数和不对实例(静态)进行操作的函数之间存在区别.实例函数可以调用其他实例函数静态函数,因为它们具有对实例的隐式引用.相反,静态函数只能调用静态函数,否则它们必须显式提供一个调用非静态函数的实例.

由于public static void Main(string[] args)是静态的,因此它调用的所有函数也必须是静态的.