调用单独函数中的变量

时间:2017-06-22 00:37:06

标签: c# winforms variables call var

我在检索2个变量的值时遇到了一些问题。我开始在一个函数(private void loadButton_lick_1(object sender, EventArgs e)

中单击按钮期间创建的变量
// Generate the folder name
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var stringChars = new char[20];
var random = new Random();

for (int i = 0; i < stringChars.Length; i++)
{
    stringChars[i] = chars[random.Next(chars.Length)];
}
var finalString = new String(stringChars);
// Folder name generated

// Generate the dll name
var dllChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var dllStringChars = new char[10];
var dllRandom = new Random();

for (int i = 0; i < dllStringChars.Length; i++)
{
    stringChars[i] = dllChars[random.Next(dllChars.Length)];
}
var dllString = new String(stringChars);
// dll name generated

现在我调用变量&#34; finalString&#34;和&#34; dllString&#34;稍后在相同的void中创建一个包含它创建的文本的文件夹,然后下载并重命名一个创建了第二个名称的文件。

// Making the folder and populating it
string path = "C:\\temp\\" + finalString + "\\";
if (!Directory.Exists(path))
{
    DirectoryInfo di = Directory.CreateDirectory(path);
    di.Attributes = FileAttributes.Directory;
}
WebClient wb = new WebClient();
wb.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.33 Safari/537.36");
wb.DownloadFile("https://yt3.ggpht.com/-nPmtKfa70lE/AAAAAAAAAAI/AAAAAAAAAAA/E66oeUI2kFw/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", "C:\\temp\\" + finalString + "\\" + dllString +".dll"); // Downloads an image now for proof of concept but changes the extension to a .dll
// Folder is now populated

我现在想在另一个函数(公共类)中再次调用finalStringdllString变量来使用在上一步中创建的项目,我无法放置项目公共类进入上一个函数,因为它停止工作。如何使变量finalStringdllString可用于同一C#Visual窗体中的多个函数?非常感谢任何帮助:D

3 个答案:

答案 0 :(得分:0)

在方法之外声明了dllChars,因此可以通过多种方法访问。请考虑以下示例:

private string dllChars;

public main()
{
    foo();
    bar();
}

public void foo()
{
    dllString = new String(stringChars);
}

public void bar()
{
    if (dllChars.Equals("urmom"))
        MessageBox.Show("Hi, mom");
}

如果不需要在类之外访问dllString,则将其设置为public是不必要的。出于安全原因以及面向对象编程原则,封装设计,使您的成员保密是一个好主意。但是,如果需要在课堂外阅读,请更改

private string dllChars;

到此:

public string dllChars
{
    set; private set;
}

如果您确实希望在类之外修改变量,那么删除&#34; private&#34;

答案 1 :(得分:0)

假设finalStringdllString位于以下函数中:

public void someFunction()
{
    var finalString = new String(stringChars);
    var dllString = new String(stringChars);
}

要在另一个方法上访问它们,只需在函数外声明它们:

var finalString;
var dllString;

public void someFunction()
{
    finalString = new String(stringChars);
    dllString = new String(stringChars);
}

答案 2 :(得分:0)

无法访问方法外的局部变量。 一旦方法结束,方法中创建的局部变量就会被删除,因为它们是本地的,它们不再可访问,只有在没有删除时才会占用空间。

在不同时间调用多个方法中访问变量的唯一方法是在方法外创建它们:

public class YourClass()
{
    string finalString, dllString;
    private void loadButton_lick_1(object sender, EventArgs e)
    {
        // Do you stuff and set the values to finalString and dllString
    }

    private void YourSecondMethod()
    {
        // Happily acess finalString and dllString
    }
}

另见:What are the best practices for class, method, variable cases/names for objects in C# class library?