大家好,我是華山自控編程的朱老師
前幾天一個學員在學習C#與數據庫交互時。創建數據庫的時候,一直出現語法錯誤
截圖如下:
不知道什么原因。
其實很多初學者在學習vs和數據庫交互時,都會遇到類似的問題,不知道是動態庫dataGridView1控件問題,還是代碼問題。下面我們就對這個問題進行詳細分析。
問題分析:
根據報錯提示,字段初始值設定項無法引用非靜態字段、方法或性
“Form1.dataGridView1”:
這個錯誤其實提示很清晰了。對于老司機來說,可能一下就知道問題點在哪里。但是對于新手來說,看到這個語法錯誤,還是會一籌莫展。不知道如何去定位問題。
接下來 我就教該同學如何去定位和解決問題。
首先:我讓該同學確定該變量是靜態變量還是非靜態變量:dataGridView1:單擊該字段右鍵轉到定義功能.如下圖:
通過定義語句可以看出該字段是非靜態變量:
到此,我們就知道怎么使用該變量了,根據非靜態變量由非靜態方法調用的原則。我們將該代碼放到實例化的方法里面即可,比如窗體加載事件,按鈕點擊事件等等。如下圖:
通過以上調試方法,該同學學會了C#使用靜態變量和非靜態變量的基本技能。
另外在衍生下c#靜態變量和非靜態變量的區別:
一、靜態資源在首次訪問時會調用靜態構造器創建類類型對象(靜態屬于類,動態屬于對象,靜態被靜態構造器創建,動態被普通構造創建,所以實例對象的時候,靜態不會被重新構造)
二、類型對象的生存周期是整個應用程序域的生存周期,也就說被訪問過的靜態資源,只有它所在的應用程序域被卸載時才會被卸載,靜態變量始終存在著,也就是說它的生存期為整個源程序。
三,當頁面第一次被訪問的時候,相當于頁面被構造,靜態變量被靜態構造器初始化,然后再次訪問這個頁面的時候,雖然非靜態資源重新被構造,但是此時靜態資源并不被重新構造并一直存在(也可以用來做頁面狀態保持,不過不建議用,因為一直占用資源,不像session還定時被回收),直至應用程序域被回收。(構造類靜態若局部未賦以初值,則由系統自動賦以0值。 )
四、如果是application級的,用靜態變量來代替application對象是可以的,優點是速度快(存儲區域不同,而且不用裝箱拆箱),缺點是沒有application對象通用(application對象可以隨意存儲任何對象)
五、就是頁面的靜態變量頁面第一次被訪問時被初始化,在應用程序域一直保存,動態變量只在一個http請求作用(每次http請求相當于實例一次頁面這個類)
六、靜態變量在靜態存儲區內分配存儲單元。在程序整個運行期間都不釋放。而變量屬于動態存儲類別,存儲在動態存儲區空間(而不是靜態存儲區空間),函數調用結束后即釋放。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.