c#this关键字用法代码详解
用法1 为原始类型扩展方法
10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有恭城免费网站建设让你可以放心的选择与我们合作。
先说一下,this 后面跟的类型,就是要拓展方法的类型。注意要写在静态类中的静态方法,不然有些情况下访问
////// 扩展类 用于为原始类扩展方法 /// public static class AM_Extends { ////// 为string类扩展了一个child方法,实现某功能 /// /// /// public static void Child( this string str,string new_str) { object obj = str; str=new_str; } } 定义扩展方法
private void Form1_Load(object sender, EventArgs e) { string st1 = "123"; string st2 = ""; string st3 = ""; st3 = st2.Child(st1);//st3的值为“123” } 调用实例
用法2 this代表当前类的实例对象
用法3 用this串联构造函数
public class Test { public Test() { Console.WriteLine("无参构造函数"); } // this()对应无参构造方法Test() // 先执行Test(),后执行Test(string text) public Test(string text) : this() { Console.WriteLine(text); Console.WriteLine("有参构造函数"); } }
用法4 索引器(基于索引器封装EPList,用于优化大数据下频发的Linq查询引发的程序性能问题,通过索引从list集合中查询数据)
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; namespace MyDemo.Web { ////// EPList 支持为List创建索引 /// ///类型 public class EPList{ #region 成员变量 /// /// 索引 /// private Listm_Index = new List (); /// /// 缓存数据 /// private Dictionary> m_CachedData = new Dictionary >(); /// /// List数据源 /// private Listm_ListData = new List (); /// /// 通过索引值取数据 /// /// 索引字段 /// 字段值 ///public List this[string[] indexFields] { get { string key = string.Join(",", indexFields); if (m_CachedData.ContainsKey(key)) return m_CachedData[key]; return new List (); } } #endregion #region 公共方法 /// /// 创建索引 /// /// 索引字段 public void CreateIndex(string[] indexFields) { if (m_Index.Contains(indexFields)) return; m_Index.Add(indexFields); } ////// 添加 /// /// 记录 public void Add(T record) { m_ListData.Add(record); m_Index.ForEach(indexFields => { string key = getKey(record, indexFields); if (m_CachedData.ContainsKey(key)) { m_CachedData[key].Add(record); } else { Listlist = new List { record }; m_CachedData.Add(key, list); } }); } #endregion #region 私有方法 /// /// 获取值 /// /// 记录 /// 字段名 ///private object getValue(T record, string fieldName) { Type type = typeof(T); PropertyInfo propertyInfo = type.GetProperty(fieldName); return propertyInfo.GetValue(record, null); } /// /// 获取Key /// /// 记录 /// 索引字段 private string getKey(T record, string[] indexFields) { Listvalues = new List (); foreach (var field in indexFields) { string value = Convert.ToString(getValue(record, field)); values.Add(field + ":" + value); } return string.Join(",", values); } /// /// 获取Key /// /// 索引字段 /// 字段值 ///private string getKey(string[] indexFields, object[] fieldValues) { if (indexFields.Length != fieldValues.Length) return string.Empty; for (int i = 0; i < indexFields.Length; i++) { fieldValues[i] = indexFields[i] + ":" + fieldValues[i]; } string key = string.Join(",", fieldValues); return key; } #endregion } } 创建EPList
给EPList创建索引,并添加数据
private EPListGetEPListData() { EPList eplist = new EPList (); eplist.CreateIndex(new string[] { "ParentId" }); string sql = "select Id,ParentId,Code,Name from SysDepart"; SqlHelper.ExecuteReader(sql, null, (reader) => { SysDepartInfo record = new SysDepartInfo(); 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); }); return eplist; } 给EPList创建索引,并添加数据
private EPListGetEPListData() { EPList eplist = new EPList (); eplist.CreateIndex(new string[] { "ParentId" }); string sql = "select Id,ParentId,Code,Name from SysDepart"; SqlHelper.ExecuteReader(sql, null, (reader) => { SysDepartInfo record = new SysDepartInfo(); 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); }); return eplist; }
给EPList创建索引,并添加数据
////// 获取子节点 /// /// /// private IEnumerableCreateChildren(EPList data, TreeInfo node) { string id = node == null ? "0" : node.id; List childNodes = new List (); // ParentId字段上创建了索引,所以这里就可以通过索引值直接取出下一层子节点数据,避免Linq查询引发的效率问题 var indexValues = new string[] { "ParentId:" + id }; var childData = data[indexValues]; childData.ForEach(record => { var childNode = new TreeInfo { id = record.Id, text = record.Code + " " + record.Name }; childNodes.Add(childNode); childNode.children = CreateChildren(data, childNode); }); return childNodes.OrderBy(record => record.text); } 通过索引高效查询数据
以上就是小编整理的全部相关知识点内容,感谢大家的学习和对创新互联的支持。
当前名称:c#this关键字用法代码详解
文章来源:http://cdiso.cn/article/pjehge.html