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" };
创建了Test
class的新实例,但是运行两个应用程序ProjectA
和ProjectB
不交换数据!他们完全分开了。
class 属性也是如此。
我完全是 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" };
创建了Test
class的新实例,但是运行两个应用程序ProjectA
和ProjectB
不交换数据!他们完全分开了。
class 属性也是如此。