代码之家  ›  专栏  ›  技术社区  ›  David Kasabji

当在另一个项目C中调用时,getter中的字符串为空#

  •  -1
  • David Kasabji  · 技术社区  · 10 年前

    我完全是C#编程语言的初学者。我正在尝试使用Getter和Setter,以便在项目A中设置字符串,并在项目B中检索字符串。

    项目B使用Windows窗体,我没有设置TextBox的值 使用检索到的字符串。

    项目A是一个控制台项目,它只是从 文件并将其存储在字符串中,我想检索该字符串。

    然而,这是我在项目B中的呼吁:

     string cardOwner = Transmit.Program.CardOwner;
                Debug.WriteLine("Card owner = " + cardOwner);
                tb_cardholder.Text = cardOwner;
    

    这是我在项目A中的Getter/Setter:

    private static string _cardOwner;
      public static string CardOwner
            {
                get
                {
                    return _cardOwner;
                }
    
                set
                {
                    _cardOwner = value;
                }
            }
    
     _cardOwner = System.Text.Encoding.ASCII.GetString(bCardOwner);
    

    但在项目B中,我得到了“”空字符串。

    我已将项目A包括在项目B中(添加参考,并写下“使用项目A”)。

    你知道怎么了吗?

    谢谢

    3 回复  |  直到 10 年前
        1
  •  1
  •   Thorsten Dittmar    10 年前

    仅仅因为您在项目B中包含了一个项目并使用了它的类,这并不意味着您也使用 实例 这些类别中的一个。

    参加以下课程:

    public class Test
    {
        public string Message { get; set; }
    }
    

    您可以将该类放入DLL项目中( Tools )并从其他项目中引用它,如WinForms项目 ProjectA 和控制台项目 ProjectB .

    在这两个项目中,您可以编写如下内容:

    Test t = new Test() { Message = "Hello" };
    

    这将创建 Test 类,但两个正在运行的应用程序 项目A 项目B 不要交换数据!它们完全分离。

    类属性也是如此。

        2
  •  0
  •   NineBerry    10 年前

    您无法在两个不同的应用程序之间如此轻松地共享信息。静态属性仅在同一应用程序域中共享数据,即在同一Windows进程中的大多数简单星座中。

    如果要在两个不同的进程之间传输数据,则需要使用明确的进程间通信机制。

        3
  •  0
  •   Zachary Sloss    10 年前

    此行何时执行?

    _cardOwner = System.Text.Encoding.ASCII.GetString(bCardOwner);
    

    您需要将其放入一个方法中并调用该方法(知道调用发生的时间有助于您理解为什么 _cardOwner 未设置:

    public static void Init()
    {
        _cardOwner = System.Text.Encoding.ASCII.GetString(bCardOwner);
    }
    

    然后在您知道将在需要之前执行的某个地方调用此方法 _卡片所有者 :

    Transmit.Program.Init();
    string cardOwner = Transmit.Program.CardOwner;     
    tb_cardholder.Text = cardOwner;