C#变量作用域
c# Variable scope
全部,
我在 SqlConnection RTTConn 的范围方面遇到一些问题。
我的代码如下:
namespace RTT_API
{
public partial class Request : Form
{
private static readonly HttpClient client = new HttpClient();
private static SqlConnection RTTConn;
public Request()
{
InitializeComponent();
}
private void Request_Load(object sender, EventArgs e)
{
string connString = @""; << I removed the connection string just for this post
option 1
SqlConnection RTTConn = new SqlConnection(connString);
option 2
RTTConn.ConnectionString = connString; << "Object reference not set to an instance of an object"
RTTConn.Open();
}
private void cmbRefresh_Click(object sender, EventArgs e)
{
MessageBox.Show(RTTConn.State.ToString()); << Option 1 - "Object reference not set to an instance of an object"
ProcessRepositories();
}
}
}
如果我使用选项 1,那么我会在 cmbRefresh 的错误中得到错误。我想我已经创建了变量的两个实例 - 一个在 class 级别,一个在 request_load 代码中?因此 class 级别的那个还没有分配对象?
如果我使用选项 2,则会收到 request_load 中的错误。我想这是因为我还没有创建对象?
我希望能帮助解决两个问题?:
- 我上面的理解正确吗?
- 最好的纠正方法是什么?我可以将 class 级别声明更改为:
SqlConnection RTTConn = new SqlConnection("ConnectionString");
但是我不知道这样是否正确?
克劳斯和Damien_The_Unveliever的回答都是正确的。我不能接受它们,因为它们是评论,所以我添加了一个引用它们的答案。
全部,
我在 SqlConnection RTTConn 的范围方面遇到一些问题。
我的代码如下:
namespace RTT_API
{
public partial class Request : Form
{
private static readonly HttpClient client = new HttpClient();
private static SqlConnection RTTConn;
public Request()
{
InitializeComponent();
}
private void Request_Load(object sender, EventArgs e)
{
string connString = @""; << I removed the connection string just for this post
option 1
SqlConnection RTTConn = new SqlConnection(connString);
option 2
RTTConn.ConnectionString = connString; << "Object reference not set to an instance of an object"
RTTConn.Open();
}
private void cmbRefresh_Click(object sender, EventArgs e)
{
MessageBox.Show(RTTConn.State.ToString()); << Option 1 - "Object reference not set to an instance of an object"
ProcessRepositories();
}
}
}
如果我使用选项 1,那么我会在 cmbRefresh 的错误中得到错误。我想我已经创建了变量的两个实例 - 一个在 class 级别,一个在 request_load 代码中?因此 class 级别的那个还没有分配对象?
如果我使用选项 2,则会收到 request_load 中的错误。我想这是因为我还没有创建对象?
我希望能帮助解决两个问题?:
- 我上面的理解正确吗?
- 最好的纠正方法是什么?我可以将 class 级别声明更改为:
SqlConnection RTTConn = new SqlConnection("ConnectionString");
但是我不知道这样是否正确?
克劳斯和Damien_The_Unveliever的回答都是正确的。我不能接受它们,因为它们是评论,所以我添加了一个引用它们的答案。