存储属性值,以便可以在其他类中使用

时间:2018-06-14 22:41:45

标签: c# winforms

在Windows窗体项目中,我有两个类:createTextDef和CreateTextFile

在CreateTextFile类中,我有一个如下所示的构造函数:

public string Price { get; private set; }
public string Unlock { get; private set; }
public string Stock { get; private set; }

public CreateTextFile(string Price,string Unlock, bool stock)
{
    this.Price = Price;
    this.Unlock = Unlock;
    if (stock)
        Stock = "true";
    else
        Stock = "false";
}

在我的createTextDef类中,我必须使用在CreateTextFile类构造函数中创建的属性,如下所示:

public void CreateSingle()
{
string path = Common.PathToTextFile + CreateTextFile.TextName;
string text = File.ReadAllText(Common.templatePath + "Text files\\"+ "File.txt")
    .Replace("10",    CreateTextFile.Unlock)
    .Replace("100", CreateTextFile.Price)
    .Replace("true1", CreateTextFile.Stock)

   File.WriteAlltext(path, text)
}

在Form1类中,我调用了CreateTextFile:

private void GenerateFile_Text_Click_1(object sender, EventArgs e)
{
    if(single)
        createText = new CreateTextFile(price, unlockLvl, true);
}  

但是当我尝试在createTextDef类中访问这些属性值时,我只获得空值。当我在Form1类中调用CreateTextFile构造函数时,当我尝试从createTextDef类到达它时,值就消失了。我不知道如何继续,所以当我尝试从另一个类调用它们时,是否有人知道如何使属性值不会消失?

更清楚:我有3个值,我应该用CreateSingle方法中的其他字符串值替换它们但它们都只是用空字符串替换,因此我创建的文本文件是空的。当我调用CreateTextFile构造函数时,我没有放入空字符串。

我最好不要使用静态成员。

1 个答案:

答案 0 :(得分:1)

空属性值的最可能原因是您在createText设置了GenerateFile_Text_Click_1实例的属性,但在CreateSingle中方法您从名为CreateTextFile的其他实例读取属性。

最有可能的解决方案是在阅读信息时使用您为其指定值属性的createText实例。

请注意,我也改变了替换顺序,因为调用.Replace(10)也会替换字符串100的前两个字符,您也将其用作占位符。

public void CreateSingle()
{
    string source = Path.Combine(Common.templatePath, "Text files", "File.txt");
    string dest = Path.Combine(Common.PathToTextFile, CreateTextFile.TextName);

    string text = File.ReadAllText(source)
        .Replace("100", createText.Price)
        .Replace("10", createText.Unlock)
        .Replace("true1", createText.Stock)

   File.WriteAlltext(dest, text)
}

理想情况下,您可以考虑使用更多唯一字符串来代表模板中的占位符,例如"[Unlock]""[Price]""[Stock]",以避免Replace中的含糊不清码。那条线看起来像:

string text = File.ReadAllText(source)
    .Replace("[Unlock]", createText.Unlock)
    .Replace("[Price]", createText.Price)
    .Replace("[Stock]", createText.Stock)