C# 在方法之间共享c变量?
我有不同的方法如何在它们之间共享strHeaderFileName等变量? 例如,我需要btnSave\u Click方法中的strHeaderFileNameC# 在方法之间共享c变量?,c#,C#,我有不同的方法如何在它们之间共享strHeaderFileName等变量? 例如,我需要btnSave\u Click方法中的strHeaderFileName protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e) { // No Loop needed multiFileUpload_FileUploaded will be called for each file upl
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
// No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded
var strHeaderFileName = e.File.FileName;
// Use the filename as the Header Name
var strHeaderName = strHeaderFileName.Replace(".jpg", "");
// allow Underscore characters in FileName to become Spaces in the Display Name.
strHeaderName = strHeaderName.Replace("_", " ");
}
protected void btnSave_Click(object sender, EventArgs e)
{
// use the same strHeaderFileName value here?
}
在这种情况下,最合适的选项似乎是:使用实例字段:
string strHeaderFileName;
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
// ...
strHeaderFileName = e.File.FileName;
// ...
}
protected void btnSave_Click(object sender, EventArgs e)
{
// can use strHeaderFileName
}
有两种选择。由于这些方法是事件处理程序,不直接调用,因此这里的最佳方法可能是使变量类级别的成员:
private string strHeaderFileName;
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
strHeaderFileName = e.File.FileName;
// etc.
}
protected void btnSave_Click(object sender, EventArgs e)
{
// here you can access strHeaderFileName
}
作为类级成员,它们将可由该类中的任何方法访问。确保它们是私有的,否则其他对象也可以访问它们,这在本例中可能是不需要的。它们将在该类的任何给定实例的生命周期内存在
还要注意,这看起来像ASP.NET,它在类实例方面的行为与WinForms之类的稍有不同。页面的任何给定实例都不会在请求之间持久存在。因此,如果在一个处理程序中设置值,再次显示页面,然后调用另一个处理程序,则该值将不再存在。这是因为每个页面的类实例是根据请求创建的,然后在响应后销毁
要跨页面请求持久化,需要将该值保留在其他位置。例如,如果它需要在该用户会话的范围内活动,则可以将其置于会话状态:
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
Session["strHeaderFileName"] = e.File.FileName;
// etc.
}
protected void btnSave_Click(object sender, EventArgs e)
{
// here you can access Session["strHeaderFileName"]
}
根据值需要保留的范围,您还可以将其放在页面、cookie、数据库、某些缓存机制等中。您可以将其设置为成员变量,而不是局部变量,例如
string strHeaderFileName;
string strHeaderName;
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
// No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded
strHeaderFileName = e.File.FileName;
// Use the filename as the Header Name
strHeaderName = strHeaderFileName.Replace(".jpg", "");
// allow Underscore characters in FileName to become Spaces in the Display Name.
strHeaderName = strHeaderName.Replace("_", " ");
}
protected void btnSave_Click(object sender, EventArgs e)
{
// strHeaderFileName is now accessible here
}
将var strHeaderFileName声明为类的成员。
例如,如果这是一个页面
class Page
{
private string strHeaderFileName;
protected void multiFileUpload_FileUploaded(object sender, FileUploadedEventArgs e)
{
// No Loop needed multiFileUpload_FileUploaded will be called for each file uploaded
strHeaderFileName = e.File.FileName;
// Use the filename as the Header Name
var strHeaderName = strHeaderFileName.Replace(".jpg", "");
// allow Underscore characters in FileName to become Spaces in the Display Name.
strHeaderName = strHeaderName.Replace("_", " ");
}
protected void btnSave_Click(object sender, EventArgs e)
{
// use the same strHeaderFileName value here?
someFunctionUses(strHeaderFileName);
}
}
阅读关于@GrantWinney的文章,我通常会将它们放在类的顶部,但不想滚动1000行代码将它们放在上面。。lol希望有另一种方法。我想我从来没有听说过我不想滚动作为不在类级别定义变量的理由before@JoJo:如果您的类有1000行代码,那么这本身就是一个问题,与类级别变量无关。听起来有些功能应该重构到其他对象中。无论如何,必须滚动到文件顶部一次并不是不做某事的理由。您的整个应用程序将无法放入单个查看器窗口中…代码片段仅用于浏览器可运行的代码,它不适用于c