1:泛型
不多说了,个人理解泛型就是泛参数化,即用T表示所有的类型。
public class WSView<T>{
public virtual DataTable searchView(T sp)
{。。。。。。}
}
[WebMethod] public ViewEntity[] ViewSummary(SumParameters sp) { WSView<SumParameters> view = new WSView<SumParameters>(); DataTable dt = view.searchView(sp); return view.Convert2Entity(dt); } [WebMethod] public ViewEntity[] ViewDetail(DetParameters dp) { WSView<DetParameters> view = new WSView<DetParameters>(); DataTable dt = view.searchView(dp); return view.Convert2Entity(dt); }
2:匿名方法
没有匿名方法的时候(C# 1.0)
addButton.Click += new EventHandler(AddClick);
void AddClick(object sender,EventArgs e){ listBox.Items.Add(textBox.Text);}
有了匿名方法之后(C# 2.0)
addButton.Click += delegate{ listBox.Items.Add(textBox.Text);}
匿名方法的机制
C# 2.0中的匿名方法仅仅是通过编译器的一层额外处理,来简化委托实例化的工作。它与C# 1.0的代码不存在根本性的差别。
通过ILDasm.exe反汇编工作,我们可以获得对匿名方法的深入了解: - 静态方法中的匿名方法 - 实例方法中的匿名方法 - 匿名方法中的外部变量
静态方法中的匿名方法
public delegate void D(); static void F() { D d = delegate{Console.WriteLine("text");}; }
上面的代码被编译器转换为:
static void F() { D d = new D(Method1); } static void _Method1() { Console.WriteLine("test"); }
实例方法中的匿名方法
class Test { int x; void F() { D d = delegate{Console.WriteLine(this.x);}; } }
上面的代码被编译器转换为:
void F() { D d = new D(Method1); } void _Method1() { Console.WriteLine(this.x); }
匿名方法的外部变量
void F() { int y = 123; D d = delegate{Console.WriteLine(y);}; }
上面的代码被编译器转换为:
class _Temp { public int y; public void _Method1() { Console.WriteLine(y); } } void F() { _Temp t = new _Temp(); t.y = 123; D d = new D(t._Method1); }
3:迭代器
一个简单的例子:class MyStack:IEnumerable { int[] items = { 1, 2, 3, 4, 5, 6, 7, 8 }; public IEnumerator GetEnumerator() { for (int i = 0; i < items.Length; i++) { yield return items[i]; } } }使用:MyStack stack = new MyStack(); foreach (int i in stack) { listBox1.Items.Add(i); }
4:不完全类型