我需要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编程.你在旅途中.
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)
此代码会给您一个错误,因为您的Add函数需要static:
static public int Add(int x, int y)
Run Code Online (Sandbox Code Playgroud)
在C#中,对实例(非静态)操作的函数和不对实例(静态)进行操作的函数之间存在区别.实例函数可以调用其他实例函数和静态函数,因为它们具有对实例的隐式引用.相反,静态函数只能调用静态函数,否则它们必须显式提供一个调用非静态函数的实例.
由于public static void Main(string[] args)是静态的,因此它调用的所有函数也必须是静态的.
| 归档时间: |
|
| 查看次数: |
223891 次 |
| 最近记录: |