伙计们,我需要一些帮助, 我有错误 第50行:CS0236 C#字段初始值设定项不能引用非静态字段,方法或属性 第51行:CS0236 C#字段初始值设定项不能引用非静态字段,方法或属性
namespace ConsoleApplication5
{
public delegate string Metodo(string t1, string t2);
class Program
{
static void Main(string[] args)
{
}
}
public class ExemploDel
{
public static string NomeMetodo(string t1, string t2)
{
return t1 + t2;
}
Metodo meuMetodo = NomeMetodo;
}
public class Metodos
{
public string Method1(string tx1, string tx2)
{
return tx1 + tx2;
}
public string Method2(string tx1, string tx2)
{
return tx2 + tx1;
}
}
public class DelegatesEx
{
public static string NomeMetodo(string t1, string t2)
{
return t1 + t2;
}
Metodos obj = new Metodos();
Metodo m1 = obj.Method1;
Metodo m2 = obj.Method2;
Metodo m3 = NomeMetodo;
}
}
答案 0 :(得分:0)
首先,您已将调用代码放在错误的位置,以下4行应该放在程序的Main方法中:
class Program
{
static void Main(string[] args)
{
Metodos obj = new Metodos();
Metodo m1 = obj.Method1;
Metodo m2 = obj.Method2;
Metodo m3 = NomeMetodo;
}
}
其次,在尝试为其分配实例方法时,已将委托标记为static
,因此要么在声明中使委托非静态,要使方法保持静态。
public delegate string Metodo(string t1, string t2);
如果你想让Metodo
委托保持静态,那么你的方法也应该像:
public class Metodos
{
public static string Method1(string tx1, string tx2)
{
return tx1 + tx2;
}
public static string Method2(string tx1, string tx2)
{
return tx2 + tx1;
}
}
现在您的主方法代码也将被更改,因为静态方法是使用类而不是它的实例进行访问:
class Program
{
static void Main(string[] args)
{
Metodo m1 = Metodos .Method1;
Metodo m2 = Metodos .Method2;
Metodo m3 = NomeMetodo;
}
}