在c#中调用方法或函数

时间:2012-01-30 22:01:28

标签: c#

我是C#的新手,请你告诉我这里有什么问题。 我知道这对你很简单,但不适合我:(

我的简短代码:

class A 
{ 
    private int B; 
    public void b(){ }
    public void c(){ B = b( );}
    static void Main ( string [ ] args ) 
    {
        c(); 
    }
} 

我的错误是:

  

非静态字段,方法或属性'GMBL.Program.Start()'

需要对象引用

我该如何解决?

9 个答案:

答案 0 :(得分:6)

Mainstatic方法 - 它与您班级的实例无关。

c实例方法 - 它在您班级的实例上运行。
您只能在实例上调用c

答案 1 :(得分:2)

更改 public void c()

public static void c()

创建new的{​​{1}} 实例 并调用 实例成员 class A

c();

正如@SLaks所指出的那样,你不能从同一static void Main ( string [ ] args ) { var foo = new A(); foo.c(); } 的{​​{1}}或其他instance members的{​​{1}}中呼叫type,而不是参考static member

答案 2 :(得分:0)

您正在引用静态函数c()中的非静态函数Main()。要么c()为静态,要么创建A的实例并在其上调用c()

A a = new A();
a.c();
// do something with a

答案 3 :(得分:0)

您必须为A类创建一个对象。

ClassA a1 = new classA();
a1.c();

答案 4 :(得分:0)

Main函数移出到另一个静态类,并在其中创建A的实例,并调用方法:

class A 
{ 
    private B; 
    public void b(){ }
    public void c(){ B = b( );}
} 

class Program 
{
    public static void Main ( string [ ] args ) 
    {
        A a = new A();
        a.c(); 
    }
}

应用程序的入口点通常应该位于自己的独立类中。

答案 5 :(得分:0)

如果你不想实例化一个新类,那么简单地使c静态,例如:

public static void c()

答案 6 :(得分:0)

首先,你不能写私人B,你必须给一个类型。 第二,b不返回任何值,因此您无法将其分配给B

答案 7 :(得分:0)

您的代码中有两个问题。

问题#1 :您不能在静态方法中使用非静态成员。

要在方法中使用 c(),您必须将 c()更改为静态方法,例如

public static void c(){....}

或者为您的班级 A 宣布一个对象,然后使用该对象实例调用 c(),例如

A objA = new A();
objA.c();

问题#2 :声明

B = b( );

错误,因为 b()方法没有返回任何值。

首先改变

private B;

private int B; // Or some thing like this

然后

public void b(){ }

public int b(){}

希望这有帮助。

答案 8 :(得分:0)

静态方法与类实例无关。在你的情况下,方法C()是一个非静态方法,即它与一个类实例相关联,并且从静态方法访问C(),你必须首先创建一个类A的对象。然后从中调用C()对象

所以在Main()方法中使用2行以下

A obj = new A();
obj.C();