c# this关键字用法代码详解

在本篇文章里小编给大家整理的是关于c# this关键字用法以及相关实例代码,有兴趣的朋友们可以学习下。

用法1 为原始类型扩展方法

先说一下,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 List m_Index = new List(); ///  /// 缓存数据 ///  private Dictionary> m_CachedData = new Dictionary>(); ///  /// List数据源 ///  private List m_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 { List list = 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) { List values = 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 

给EPList创建索引,并添加数据

 private EPList GetEPListData() { 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 EPList GetEPListData() { 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 IEnumerable CreateChildren(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关键字用法代码详解的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程