对象引用需要非静态字段,方法或属性“Module.action2”的方法
问题描述:
改变属性时,我读过范围封闭节范围&闭幕书的章你不知道js。该部分的网址:You don't know js对象引用需要非静态字段,方法或属性“Module.action2”的方法
我不知道是否有可能实现在C#部分中提到的模块模式?
我试过下面的代码,但在标题中得到错误,我做错了什么?或者有其他方法可以实现这一目标?
的C#代码
class Program
{
static void Main(string[] args)
{
Module module = new Module();
Module.PublicAPIClass publicAPIClass = module.GetAPI();
publicAPIClass.PublicAPI.Invoke();
publicAPIClass.ChangeAPI();
publicAPIClass.PublicAPI.Invoke();
}
}
public class Module
{
protected Action action1 =() => { Console.WriteLine("API1"); };
protected Action action2 =() => { Console.WriteLine("API2"); };
public class PublicAPIClass
{
public Action PublicAPI { get; set; }
public void ChangeAPI()
{
PublicAPI = action2; //error here
}
}
public PublicAPIClass GetAPI()
{
PublicAPIClass publicAPIClass = new PublicAPIClass();
publicAPIClass.PublicAPI = action1;
return publicAPIClass;
}
}
答
在PublicAPIClass
您尝试访问的Module
非静态场 - 这是不允许的。 如果没有该类别的实例,则无法读取其他类别的非静态字段。
要解决这个问题,你需要更改action2
是static
:
static Action action2 =() => { Console.WriteLine("API2"); };
或更改你是从action2
阅读方式:
PublicAPI = new Module().action2; //no longer an error here
为什么你想申请JS成语C#?你想用'模块模式'解决什么问题? C#有其他解决相同问题的方法(例如命名空间)。 – mjwills
读这本书只是一个尝试。也许PublicAPIClass是不必要的,但我想知道为什么我得到这个错误。 @mjwills – Jaraxuss
谢谢。 @mjwills – Jaraxuss