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 中的错误。我想这是因为我还没有创建对象?

我希望能帮助解决两个问题?:

  1. 我上面的理解正确吗?
  2. 最好的纠正方法是什么?我可以将 class 级别声明更改为:
SqlConnection RTTConn = new SqlConnection("ConnectionString");

但是我不知道这样是否正确?

克劳斯和Damien_The_Unveliever的回答都是正确的。我不能接受它们,因为它们是评论,所以我添加了一个引用它们的答案。