程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C# 學習筆記(2)

C# 學習筆記(2)

編輯:.NET實例教程
.       ConfigurationManager
ConfigurationManager
是用來替代ConfigurationSettings類來進行當前程序的配置文件的讀寫操作的。配置文件是和assembly同名的.config文件。例子

      //打開配置文件
        configuration config = webconfigurationmanager.openwebconfiguration("~");
        //
獲取aPPSettings節點
        appsettingssection appsection = (appsettingssection)config.getsection("aPPSettings");
        //
aPPSettings節點中添加元素
        aPPSection.settings.add("addkey1", "key1s value");
        aPPSection.settings.add("addkey2", "key2s value");
        config.save();

 

2.       進程間通信和線程間通信
進程是一個具有獨立功能的程序,他是關於某個數據集合的一次可以並發執行的運行活動。進程作為構成系統的基本細胞,不僅是系統內部獨立運行的實體,而且是獨立競爭資源的實體。
 
線程也被稱為輕量級進程,同一進程的線程共享全局變量和內存,使得線程之間共享數據很容易也很方便,但會帶來某些共享數據的互斥問題。
 
 
許對程序為了提高效率也都是用了線程來編寫。
 
父子進程的派生是非常昂貴的,而且父子進程的通訊需要ipc或者其他方法來實現,比較麻煩。而線程的創建就花費少得多,並且同一進程內的線程共享全局存儲區,所以通訊方便。
 
 
線程的缺點也是由它的優點造成的,主要是同步、異步和互斥的問題,值得在使用的時候小心設計。
下面的例子是在同一個類的不同線程之間對於全局變量的同步所做的鎖操作:

    public class MultiThreadClass

    {

        //check if the Instance is Running

        private int running = 0;    //0: false; 1: true.

        public bool Running

        {

        …

        public void SomeFunction()

        {

            //delete temp files

            System.Threading.Interlocked.Exchange(ref this.running, 0);

        }  

System.Threading.Interlocked 類為多線程對於公共成員訪問提供原子操作。

3.       ref,  out的區別

Ref out都是是傳遞引用,out是返回值,兩者有一定的相同之處,不過也有不同點。

使用ref前必須對變量賦值,out不用。

out的函數會清空變量,即使變量已經賦值也不行,退出函數時所有out引用的變量都要賦值,ref引用的可以修改,也可以不修改。

下面是使用outref進行數組修改的例子:

static void FillArray(out int[] arr)

{

        // Initialize the array:

        arr = new int[5] { 1, 2, 3, 4, 5 };

}

 

static void FillArrayRef(ref int[] arr)

{

        // Create the array on demand:

        if (arr == null)

        {

                arr = new int[10];        }

        // Fill the array:

        arr[0] = 1111;

        arr[4] = 5555;

}

 

 

4.       yIEld return 
Ref1   Ref2.
yIEld
C#2.0引入的新關鍵字,它主要是用來遍歷函數返回的對象,其主要功能是在il代碼中生成了狀態信息,使用戶不用自己維護遍歷器的狀態信息。下面是一個例子:每次調用GetInt()都會得到一個增加的數:

public static IEnumerable<int> GetInt()
{
   for (int i = 0; i < 5; i++)
       yIEld return i;
}

下面是調用:

class Program
{
        static void Main(string[] args)
        {
            foreach (int i in GetInt())
                Console.WriteLine("Got " + i.ToString());
        }

        public static IEnumerable<int> GetInt()
        {
            for (int i = 0; i < 5; i++)
                yIEld return i;
        }
}

yIEld通常用在實現IEnumerable接口的GetEnumerator()函數中。

class TestClass: IEnumerable<int>
{
        #region IEnumerable<int> Members

        public IEnumerator<int> GetEnumerator()
        {
            for (int i = 0; i < 5; i++)
       &nbsp;        yIEld return i;
        }

        #endregion

        #region IEnumerable Members

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion

}

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved