c#方法错误CS0236

时间:2017-04-04 15:31:10

标签: c#

伙计们,我需要一些帮助, 我有错误 第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;

    }
}

1 个答案:

答案 0 :(得分:0)

首先,您已将调用代码放在错误的位置,以下4行应该放在程序的Main方法中:

解决方法1:

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);

溶液2:

如果你想让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;
    }
}