c# this关键字用法代码详解
用法1为原始类型扩展方法
先说一下,this后面跟的类型,就是要拓展方法的类型。注意要写在静态类中的静态方法,不然有些情况下访问
//////扩展类用于为原始类扩展方法 /// publicstaticclassAM_Extends { //////为string类扩展了一个child方法,实现某功能 /// ////// publicstaticvoidChild(thisstringstr,stringnew_str) { objectobj=str; str=new_str; } } 定义扩展方法
privatevoidForm1_Load(objectsender,EventArgse) { stringst1="123"; stringst2=""; stringst3=""; st3=st2.Child(st1);//st3的值为“123” } 调用实例
用法2this代表当前类的实例对象
用法3用this串联构造函数
publicclassTest { publicTest() { Console.WriteLine("无参构造函数"); } //this()对应无参构造方法Test() //先执行Test(),后执行Test(stringtext) publicTest(stringtext):this() { Console.WriteLine(text); Console.WriteLine("有参构造函数"); } }
用法4索引器(基于索引器封装EPList,用于优化大数据下频发的Linq查询引发的程序性能问题,通过索引从list集合中查询数据)
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Reflection; usingSystem.Text; namespaceMyDemo.Web { //////EPList支持为List创建索引 /// ///类型 publicclassEPList { #region成员变量 /// ///索引 /// privateListm_Index=newList (); /// ///缓存数据 /// privateDictionary>m_CachedData=newDictionary >(); /// ///List数据源 /// privateListm_ListData=newList (); /// ///通过索引值取数据 /// ///索引字段 /// 字段值 /// publicList this[string[]indexFields] { get { stringkey=string.Join(",",indexFields); if(m_CachedData.ContainsKey(key))returnm_CachedData[key]; returnnewList (); } } #endregion #region公共方法 /// ///创建索引 /// ///索引字段 publicvoidCreateIndex(string[]indexFields) { if(m_Index.Contains(indexFields))return; m_Index.Add(indexFields); } /// ///添加 /// ///记录 publicvoidAdd(Trecord) { m_ListData.Add(record); m_Index.ForEach(indexFields=> { stringkey=getKey(record,indexFields); if(m_CachedData.ContainsKey(key)) { m_CachedData[key].Add(record); } else { List list=newList {record}; m_CachedData.Add(key,list); } }); } #endregion #region私有方法 /// ///获取值 /// ///记录 /// 字段名 /// privateobjectgetValue(Trecord,stringfieldName) { Typetype=typeof(T); PropertyInfopropertyInfo=type.GetProperty(fieldName); returnpropertyInfo.GetValue(record,null); } /// ///获取Key /// ///记录 /// 索引字段 privatestringgetKey(Trecord,string[]indexFields) { List values=newList (); foreach(varfieldinindexFields) { stringvalue=Convert.ToString(getValue(record,field)); values.Add(field+":"+value); } returnstring.Join(",",values); } /// ///获取Key /// ///索引字段 /// 字段值 /// privatestringgetKey(string[]indexFields,object[]fieldValues) { if(indexFields.Length!=fieldValues.Length)returnstring.Empty; for(inti=0;i 给EPList创建索引,并添加数据
privateEPListGetEPListData() { EPList eplist=newEPList (); eplist.CreateIndex(newstring[]{"ParentId"}); stringsql="selectId,ParentId,Code,NamefromSysDepart"; SqlHelper.ExecuteReader(sql,null,(reader)=> { SysDepartInforecord=newSysDepartInfo(); record.Id=Convert.ToString(reader["Id"]); record.ParentId=Convert.ToString(reader["ParentId"]); record.Code=Convert.ToString(reader["Code"]); record.Name=Convert.ToString(reader["Name"]); eplist.Add(record); }); returneplist; } 给EPList创建索引,并添加数据 privateEPListGetEPListData() { EPList eplist=newEPList (); eplist.CreateIndex(newstring[]{"ParentId"}); stringsql="selectId,ParentId,Code,NamefromSysDepart"; SqlHelper.ExecuteReader(sql,null,(reader)=> { SysDepartInforecord=newSysDepartInfo(); record.Id=Convert.ToString(reader["Id"]); record.ParentId=Convert.ToString(reader["ParentId"]); record.Code=Convert.ToString(reader["Code"]); record.Name=Convert.ToString(reader["Name"]); eplist.Add(record); }); returneplist; } 给EPList创建索引,并添加数据
//////获取子节点 /// ////// privateIEnumerable CreateChildren(EPList data,TreeInfonode) { stringid=node==null?"0":node.id; List childNodes=newList (); //ParentId字段上创建了索引,所以这里就可以通过索引值直接取出下一层子节点数据,避免Linq查询引发的效率问题 varindexValues=newstring[]{"ParentId:"+id}; varchildData=data[indexValues]; childData.ForEach(record=> { varchildNode=newTreeInfo { id=record.Id, text=record.Code+""+record.Name }; childNodes.Add(childNode); childNode.children=CreateChildren(data,childNode); }); returnchildNodes.OrderBy(record=>record.text); } 通过索引高效查询数据 以上就是小编整理的全部相关知识点内容,感谢大家的学习和对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。