2012-03-23 153 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