c#在类之间传递变量而不公开它们

时间:2013-01-30 20:38:59

标签: c# variables

我正在编写一个WPF应用程序,它根据一些最小的用户输入搜索,解析和写入文件。我在mainwindow类中有一个方法调用(到另一个类中的方法),需要从两个单独的文件中解析出许多不同的信息。目前,我有另一种解析源文件的方法,并为应用程序的另一个函数返回解析数据的数组。在该方法中,我有一些公共变量来存储第一次调用所需的信息。这是我可以计算如何访问这些项目的唯一方法,而无需编写单独的方法来搜索每个单独信息的解析数据我附加了一些代码以帮助澄清我目前的情况:

//From mainwindow.xaml.cs

private void button1_Click(object sender, RoutedEventArgs e)
        {
        string[] path = ff.Search(fw.sysName, fw.design, fw.partNumber);//From FileFinder class
        string[] parsedData = fp.Parse(path);//From FileProcessor class
        string[] summary = fw.SummaryWriter(parsedData, fw.masterList);//From FileWriter class
        Output.Text = "";
        foreach (string str in summaryvalues)
        {
            Output.Text += (str + "\n");
        }
    }

ff.Search()和fw.SummaryWriter()中使用的变量是从FileWriter.cs调用的:

   class FileWriter
   {

    public string sysName;
    public string design;
    public string partNumber;
    public List<string> masterList = new List<string>();

    public string[] MasterWriter(string input, int source)
    {
          //Do stuff. The data for the public variables is mined from this method.

    }

    public string[] SummaryWriter(string[] parsedData, List<string> moduleMasterList)
    {
          //Do stuff
    }
}

我的问题很简单,如何在不公开变量的情况下访问这些变量?

2 个答案:

答案 0 :(得分:3)

首先,而不是让公共字段如何将它们封装在公开私有字段的公共属性中?例如:

private string somePrivateField;
public string SomePrivateField
{
    get
    {
        return this.somePrivateField;
    }
    set
    {
        this.somePrivateField = value;
    }
}

See this site for info about properties

其次,当我遇到可能需要返回多个值的方法时,您可以为方法输出参数或将返回值封装到自己的类中,只返回该类的实例:

public void SomeMethod(int inputParameter, out int outvar1, out int outvar2)
{
...
}

See this site for the out keyword

public SomeMethodOutput SomeMethod(int inputParameter)
{
...
return new SomeMethodOutput(number1, number2);
}

其中SomeMethodOutput是一个具有两个属性的类。

答案 1 :(得分:0)

制作一个getter方法。

class Foo
{
private int _bar;

public void GetBar()
{ return _bar;}
}