我是C#的新手,请你告诉我这里有什么问题。 我知道这对你很简单,但不适合我:(
我的简短代码:
class A
{
private int B;
public void b(){ }
public void c(){ B = b( );}
static void Main ( string [ ] args )
{
c();
}
}
我的错误是:
非静态字段,方法或属性'GMBL.Program.Start()'
需要对象引用
我该如何解决?
答案 0 :(得分:6)
Main
是static
方法 - 它与您班级的实例无关。
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();