/**//* *可空类型 */ using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class CSharp20_Nullable : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { // 针对值类型的可空类型 Nullable<DateTime> dt =null; DateTime? dt2 =null; // ??分配默认值 int? x =null; int y = x ??-1; // x的默认值为0 Response.Write(y.ToString()); } }
运行结果 -1
匿名方法
/**//* * 匿名方法 */ using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class CSharp20_AnonymousMethod : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { Button btn =new Button(); btn.Text ="按钮"; // 一般方法 btn.Click +=new EventHandler(btn_Click); // 省略掉委托类型 btn.Click += btn_Click2; // 不带参数的匿名方法 btn.Click +=delegate{ Response.Write("按钮被单击(不带参数的匿名方法)<br />"); }; // 带参数的匿名方法(参数数量和类型要一致) btn.Click +=delegate(object obj, EventArgs er) { Response.Write("按钮被单击(带参数的匿名方法)<br />"); }; Page.Form.Controls.Add(btn); } void btn_Click(object sender, EventArgs e) { Response.Write("按钮被单击<br />"); } void btn_Click2(object sender, EventArgs e) { Response.Write("按钮被单击(省略掉委托类型)<br />"); } }
/**//* * 迭代器 * 要实现foreach必须实现接口IEnumerable或者IEnumerator */ using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; publicclass Charp20Yield { publicstatic IEnumerable YieldTest() { string[] ary =newstring[] { "a", "b", "c", "d", "e", "f", "g" }; foreach (string s in ary) { if (s !="e") { // 产生枚举元素 yield return s; } else { // 中断迭代 yield break; } } } } public partial class CSharp20_Iterator : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { // 使用自定义迭代器 foreach (string s in Charp20Yield.YieldTest()) { Response.Write(s); Response.Write("<br />"); } } }
运行结果 a b c d
partial类
/**//* * partial类 */ using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; // partial类可以写在不同的文件里,实际上就是取并集,类的修饰符要一致 public partial class PartialTest : IDisposable { publicstring Get() { return"PartialTest"; } } // partial类可以写在不同的文件里,实际上就是取并集,类的修饰符要一致 public partial class PartialTest { publicvoid Dispose() { // 略 } } public partial class CSharp20_Partial : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { PartialTest pt =new PartialTest(); Response.Write(pt.Get()); pt.Dispose(); } }
运行结果 PartialTest
其它
/**//* * 其它 */ using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; // 指定别名 using xyz = System.Text; public partial class CSharp20_Other : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { CSharp20_Other_Test c =new CSharp20_Other_Test(); c.CurrentTime = DateTime.Now; // 下面这句会报错 // Response.Write(c.CurrentTime.ToLongDateString()); // 没问题,因为set是internal的 c[2] ="insert"; Response.Write(c[2]); Response.Write("<br />"); // 自定义类与framework类 类名重复时,自定义类优先 // xyz是命名空间别名 // 访问全局的话用gloab Response.Write(xyz::Encoding.Default.EncodingName); } } publicclass CSharp20_Other_Test { private DateTime _currentTime; public DateTime CurrentTime { // 给访问器增加修饰符 // 如果接口定义访问器了,则所有继承的都是public protectedget{ return _currentTime; } set{ _currentTime = value; } } privatestring[] ary =newstring[] { "a", "b", "c", "d", "e", "f", "g" }; publicstringthis[int index] { get{ return ary[index]; } // 给索引器增加修饰符 internalset{ ary[index] = value; } } }