【c#基础知识大盲扫2】
1/// <summary>
/// 主题:委托基本操作实例
/// 描述:用于定义委托和构造方法
/// 作者:白宁超
/// </summary>
/// <summary> /// 主题:委托类 /// 描述:用于定义委托和构造方法 /// 作者:白宁超 /// </summary> public class myclass { public delegate void obj(string name); public void objDelegateMsg(obj Method, string name) { Method("hello:" + name); } }
static void Main(string[] args) { //主题:StringBuilder类的操作,提高性能,多次使用避免建立多个对象 StringBuilder stb = new StringBuilder("hello"); myclass my = new myclass();//实例化类 my.objDelegateMsg(x => Console.WriteLine(x), "朋友!");//lambda表达式输出 Console.ReadKey(); //hello:朋友 }
利用委托自定义方法,每次调用只能调委托方法,可以带有多个参数,StringBuilder提高访问性能,如果多个对象访问同一资源,第二次以后直接从缓存中加载
2 //主题:格式转换
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("F"));//2013年1月5日 9:50:19
Console.WriteLine(dt.ToString("yyyy年MM月dd日hh时mm分ss秒") + "<br>");//2013年01月05日 9时50分19秒
Console.WriteLine(dt.ToString("ddd"));//周六
Console.ReadKey();
格式转化在一些特殊情况以特定格式输出时,则显得很重要了。
3//主题:集合元素遍历的时候,把集合锁定
static void Main(string[] args) { //主题:集合元素遍历的时候,把集合锁定 ArrayList al = new ArrayList(); al.Add("aaa"); al.Add("bbb"); al.Insert(0, "cc");//指定插入位置 lock (al.SyncRoot) // SyncRoot摘要: 获取可用于同步 System.Collections.ArrayList 访问的对象。 { for (int i = 0; i < al.Count; i++) { foreach (string item in al) { Console.WriteLine(item); } } } Console.ReadKey(); }
集合可以指定位置添加,排序,指定范围等多个操作
4 //主题:应用程序域和程序集操作
//作者:白宁超
AppDomain domain = AppDomain.CreateDomain("MyDomain");//创建应用程序域 Console.WriteLine(" " + AppDomain.CurrentDomain.FriendlyName); //显示当前应用程序域的友好名称 Console.WriteLine(" " + domain.FriendlyName);//显示新建应用程序域的友好名称 Console.ReadKey();
static void Main(string[] args) { //创建与卸载应用程序域 Console.WriteLine("创建一个应用程序域:"); AppDomain domain = AppDomain.CreateDomain("MyDomain", null); Console.WriteLine("主机程序域: " + AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("新建程序域: " + domain.FriendlyName); Console.ReadKey();
// 卸载应用程序域
AppDomain.Unload(domain);
Console.WriteLine("主机程序域: " + AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("新建程序域: " + domain.FriendlyName); //下面这行代码会产生异常,因为domain对象被卸载了
Console.ReadKey(); }
// 将程序集加载到应用程序域中
// 将程序集加载到应用程序域中 static void Main(string[] args) { AppDomain ad = AppDomain.CurrentDomain;//取得当前应用程序域 Assembly a = ad.Load("~/Microsoft.Silverlight.ServiceReference.dll"); //加载ClassLibrary831应用程序集 Type t = a.GetType("ServiceReference.dll");//取得应用程序集中的NewClass类型 object o = Activator.CreateInstance(t);//创建NewClass类型的实例 //给对象的属性赋值 PropertyInfo p1 = t.GetProperty("MyName"); PropertyInfo p2 = t.GetProperty("MyInfo"); p1.SetValue(o, "中国", null); p2.SetValue(o, "China", null); MethodInfo mi = t.GetMethod("show");//调用对象的show方法 mi.Invoke(o, null); }
//创建一个新的应用程序域,并加载执行程序集
//创建一个新的应用程序域,并加载执行程序集 static void Main(string[] args) { AppDomain currentDomain = AppDomain.CurrentDomain; Console.WriteLine(currentDomain.FriendlyName); AppDomain secondDomain = AppDomain.CreateDomain("New AppDomain"); //创建新的应用程序域 secondDomain.ExecuteAssembly("AssemblyA.exe");//在新的应用程序域中加载执行AssemblyA.exe程序集 }
5延迟加载:实现目录后下面显示英雄全名和技能等,正常加载时显示名称和技能后显示加载信息,现在我们想相反效果:go、。。。
创建英雄和技能类
public class Hero { public string FullName { get; set; } public string Name { get; set; } #region 引入Lazy后 private readonly Lazy<SpecialSkill> skill;//Lazy<T>按需延迟加载,属性和类的关联 public SpecialSkill Skill { get{ return skill.Value;} } public Hero(string name) { Name = name; FullName = "Super " + name; skill = new Lazy<SpecialSkill>(() => new SpecialSkill(name)); } #endregion }
技能类
public class SpecialSkill { public int Power { get; set; } public string SkillName { get; set; } public int StrengthSpent { get; set; } public SpecialSkill(string name) { Console.WriteLine("加载特殊技能 ....."); Power = name.Length; StrengthSpent = name.Length * 3; SkillName = name + "筋斗云"; Console.WriteLine(SkillName + ",... 一个跟头十万八千里!"); } }
主函数:
static void Main(string[] args) { ////延迟加载 Hero hero = new Hero("wukong"); Console.WriteLine("\n\n..................Press Enter to continue.................\n\n"); Console.WriteLine("英雄的技能是: " + hero.Skill.SkillName); Console.Read(); }
6////返回多个参数以及out参数使用
/// <summary>
/// 返回多个值,原函数返回空
/// </summary>
/// <param name="strOut">使用out关键字返回的字符串</param>
/// <param name="i">使用out关键字返回的数值</param>
static void ReturnMulValue(out string strOut, out int i) { i = 1; strOut = "out function"; }
/// <summary>
/// 返回多个值,原函数返回数值
/// </summary>
/// <param name="strOut">使用out关键字返回的字符串</param>
/// <returns>原函数直接返回的数值</returns>
static int ReturnMulValue(out string strOut) { int i = 2; strOut = "out function 2"; return i; }
主函数:////返回多个参数以及out参数使用
static void Main(string[] args) { ////返回多个参数以及out参数使用 int value; string strOutValue; ReturnMulValue(out strOutValue, out value); Console.WriteLine("Call ReturnMulValue(out string strOut, out int i)"); Console.WriteLine("value = {0:N}", value);//value = 1.00 Console.WriteLine("Out string value = " + strOutValue); //Out string value = out function//调用函数函数原返回值与参数中均得到返回的值18 value = ReturnMulValue(out strOutValue); Console.WriteLine("Call ReturnMulValue(out string strOut)"); Console.WriteLine("value = {0:N}", value);//value = 2.00 //Console.WriteLine("Out string value = " + strOutValue);//Out string value = out function Console.Read(); }
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。