在config文件中添加如下configSections
<?xml version="1.0" encoding="Windows-1252"?> <configuration> <configSections> <section name="FavoriteUrls" type="System.Configuration.NameValueSectionHandler" /> </configSections> <appSettings> </appSettings> <FavoriteUrls> <add key="Microsoft" value="http://www.microsoft.com/" /> <add key="DotNetSpider" value="http://www.DotNetSpider.com/" /> <add key="AsianSpider" value="http://www.AsianSpider.com/" /> </FavoriteUrls> </configuration>
在C#代码中访问配置文件:
1。 添加命名空间:
using System.Collections.Specialized; using System.Configuration;
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, “Courier New”, courier, monospace; background-color: #ffffff; /*white-space: pre;*/ [...]
C#4.0的动态绑定依赖于Dynamic Language Runtime(DLR),但这不是动态版的CLR,而是CLR之上的一个库(System.Dynamic)。它的主要任务是提供运行时的服务来统一(unify)动态语言——包括静态和动态类型的语言。这意味着例如C#、VB、IronPython和IronRuby语言都是用通用的协议动态的调用函数,运行它们共享库文件并且调用其他语言写的代码。DLR还提供了call-site caching的优化机制,这避免了DLR在动态绑定时重复去做昂贵的方法匹配(member resolution decisions)。
语言绑定(Language Binding) static void Main(string[] args) { int x=3,y=5; Console.WriteLine(Mean(x, y)); } private static dynamic Mean(dynamic x, dynamic y) { return (x + y) / 2; }
这样的写法使得Mean方法适用于所有的数值类型,但也丢失了编译器的静态类型保护。如:
string s = Mean(x, y);这样的语句只有在运行时才会报错。 我们可以通过时用泛型类型来避免这个错误,并在计算的时候映射为dynamic类型。 private static T Mean<T>(T x, T y) { dynamic result = ((dynamic)x + [...]
独立线程的运行和控制:
const int Repetitions = 1000; public static void ThreadStart() { System.Threading.Thread thread = new System.Threading.Thread(DoWork); thread.Start(); for (int count = 0; count < Repetitions; count++) { Console.Write(‘-’); } thread.Join(); } private static void DoWork() { for (int count = 0; count < Repetitions; count++) { Console.Write(‘.’); } }
向线程传递参数:
const int Repetitions [...]
委托,就是一个能够表示方法的数据类型。
准备工作,写一个冒泡排序
public static void BubbleSort(int[] items,ComparisonHandler comparionsMethod) { int i; int j; int temp; if (items == null) return; if (comparionsMethod == null) throw new ArgumentNullException("comparionsMehtod"); for (i = items.Length – 1; i >= 0; i–) { for (j = 1; j <= i; j++) { if (comparionsMethod(items[j - 1], items[j])) { temp [...]