2012-03-23 188 views
0

我宣佈DLLA一個靜態變量,我想從另一個DLLB共享變量

訪問我如何可以共享其在同一運行兩個DLL之間的可變處理?

問題是:在下面的代碼中localB變量不能被檢索。如何在Main方法中讀取變量B?

  • DLLA

    namespace A 
    { 
    public class ProgramA 
    { 
    
    public static string variableA = "John"; 
    public static void Main(string[] args) 
    { 
    
        b.Program.variableB = variableA; 
    } 
    
  • DLLB

    namespace b 
    { 
    public class Program 
        { 
        public static string variableB; 
        public static void Main(string[] args) 
        { 
         string localB = variableB; 
        } 
    

回答

1

如果DLL2有DLL1參考你只需要標記該變量(和包含它的類)作爲public

+0

當我你說,可變在不運行DLL1的情況下被讀取。運行DLL1後我必須閱讀它! – kmxillo 2012-03-23 15:13:22

+0

如果您需要在DLL1內部運行某些內容,請執行以下操作:** BEFORE **某人讀取UserName,然後編寫一個靜態構造函數(您將確保在訪問該類的任何靜態字段之前調用它)。而且,你用_running DLL1_表示什麼? – 2012-03-23 15:30:00

+0

該場景是:DLL1設置一個變量,所以首先我必須運行DLL1。然後運行DLL2,DLL1中設置的變量必須由DLL2讀取。 – kmxillo 2012-03-23 15:35:04

1

在第一DLL(First.DLL)

namespace MyGlobalVar 
{ 
    public static class MyAppVars 
    { 
     public static string UserName; 
    } 
} 

在第二DLL(Second.DLL)參考First.DLL然後如使用:

using MyGlobalVar 
.... 

MyAppVars.UserName = "John"; 
+0

爲什麼可以在不初始化第一個DLL的情況下讀取變量? – kmxillo 2012-03-23 15:11:20

+0

因爲該類聲明爲靜態。因此,每個公共變量也是靜態的,並且在首次使用該類時由運行時自動創建/初始化。不需要用new來聲明這個類的實例。 (編譯器不會讓你創建一個實例)。有關靜態類的更多信息,請參見[MSDN](http://msdn.microsoft.com/zh-cn/library/79b3xss3(v = vs.100).aspx) – Steve 2012-03-23 15:20:01

+0

當類不是靜態的時候?如何從另一個類讀取變量?我編輯了我最初的問題。 – kmxillo 2012-03-23 16:07:56