//打開配置文件
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. 進程間通信和線程間通信
進程是一個具有獨立功能的程序,他是關於某個數據集合的一次可以並發執行的運行活動。進程作為構成系統的基本細胞,不僅是系統內部獨立運行的實體,而且是獨立
線程也被稱為輕量級進程,同一進程的線程共享全局變量和內存,使得線程之間共享數據很容易也很方便,但會帶來某些共享數據的互斥問題。
許對程序為了提高效率也都是用了線程來編寫。
父子進程的派生是非常昂貴的,而且父子進程的
線程的缺點也是由它的優點造成的,主要是同步、異步和互斥的問題,值得在使用的時候小心設計。
下面的例子是在同一個類的不同線程之間對於全局變量的同步所做的鎖操作:
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引用的可以修改,也可以不修改。
下面是使用out和ref進行數組修改的例子:
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++)
yIEld return i;
}
#endregion
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}