2017-10-06 59 views
1

改變屬性時,我讀過範圍封閉範圍&閉幕書章你不知道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; 
    } 
} 
+3

爲什麼你想申請JS成語C#?你想用'模塊模式'解決什麼問題? C#有其他解決相同問題的方法(例如命名空間)。 – mjwills

+0

讀這本書只是一個嘗試。也許PublicAPIClass是不必要的,但我想知道爲什麼我得到這個錯誤。 @mjwills – Jaraxuss

+0

謝謝。 @mjwills – Jaraxuss

回答

0

PublicAPIClass您嘗試訪問的Module非靜態場 - 這是不允許的。 如果沒有該類別的實例,則無法讀取其他類別的非靜態字段

要解決這個問題,你需要更改action2static

static Action action2 =() => { Console.WriteLine("API2"); }; 

或更改你是從action2閱讀方式:

PublicAPI = new Module().action2; //no longer an error here 
相關問題