我是C#的新手,我在使用Main()
方法调用函数方面遇到了一些问题。
class Program
{
static void Main(string[] args)
{
test();
}
public void test()
{
MethodInfo mi = this.GetType().GetMethod("test2");
mi.Invoke(this, null);
}
public void test2()
{
Console.WriteLine("Test2");
}
}
我在test();
中遇到编译器错误:
非静态字段需要对象引用。
我还不太了解这些修饰语,所以我做错了什么?
我真正想做的是在test()
内部使用Main()
代码,但是当我这样做时,它会给我一个错误。
答案 0 :(得分:5)
将所有逻辑放到另一个类
class Class1
{
public void test()
{
MethodInfo mi = this.GetType().GetMethod("test2");
mi.Invoke(this, null);
}
public void test2()
{
Console.Out.WriteLine("Test2");
}
}
和
static void Main(string[] args)
{
var class1 = new Class1();
class1.test();
}
答案 1 :(得分:4)
如果您仍希望将test()
作为实例方法:
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.test();
}
void Test()
{
// I'm NOT static
// I belong to an instance of the 'Program' class
// You must have an instance to call me
}
}
或者更确切地说它是静态的:
class Program
{
static void Main(string[] args)
{
Test();
}
static void Test()
{
// I'm static
// You can call me from another static method
}
}
获取静态方法的信息:
typeof(Program).GetMethod("Test", BindingFlags.Static);
答案 2 :(得分:1)
该方法必须是静态的才能调用它。