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

String from getter is empty when called in another Project C#

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

Project B uses Windows Forms, and I wasnt to set the value of TextBox with the retrieved string.

Project A is a Console Project and it just reads out some stuff from file and stores it in string, which I want to retrieve.

但是,这是我在项目 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 中(添加了参考并写了 "using ProjectA")。

知道出了什么问题吗?

谢谢。

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

如果你想在两个不同的进程之间传输数据,你需要使用显式的进程间通信机制。

这行什么时候执行?

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

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

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

然后在你知道会在你需要之前执行的地方调用这个方法_cardOwner:

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

仅仅因为您包含了一个项目并在您的项目 B 中使用了它的 classes,并不意味着您也使用了这些 实例 32=]es.

采取以下class:

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

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

在这两个项目中,你可以这样写:

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

创建了Testclass的新实例,但是运行两个应用程序ProjectAProjectB不交换数据!他们完全分开了。

class 属性也是如此。