字段初始化器不能使用委托引用非静态字段

本文关键字:字段 引用 静态 初始化 不能 | 更新日期: 2023-09-27 18:13:06

我是c#新手。我正在学习更多关于代表的知识。当我运行这段代码时,我得到以下错误:

字段初始化项不能在以下行引用非静态字段:

CalArepointer cpointer = CalculateArea;

下面是我的程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace calculatearea
{
    class Program
    {
        delegate double CalArepointer(int r);    
        CalArepointer cpointer = CalculateArea;
        static void Main(string[] args)
        {    
            double area = cpointer.Invoke(20);    
            Console.ReadKey();   
        }
        double CalculateArea(int r)
        {
            return 3.14 * r * r;
        }
    }
}

字段初始化器不能使用委托引用非静态字段

您应该在Main方法的静态上下文中初始化cpointer的值,因为在那里您将使用它:

class Program
{
    delegate double CalArepointer(int r);    
    CalArepointer cpointer;
    static void Main(string[] args)
    {   
        cpointer = CalculateArea; 
        double area = cpointer.Invoke(20);    
        Console.ReadKey();   
    }
    double CalculateArea(int r)
    {
        return 3.14 * r * r;
    }
}

为了在main方法之外初始化cpointer的值,您希望使用Static成员

   class Program
    {
        delegate double CalArepointer(int r);
        static CalArepointer cpointer = CalculateArea;
        static double CalculateArea(int r)
        {
            return 3.14 * r * r;
        }

        static void Main(string[] args)
        {
            double area = cpointer.Invoke(20);
            Console.WriteLine(area);
            Console.ReadKey();
        }
    }