勇哥注:
这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。
C#基础知识在网上是最多的存在,不足主要下面几点:
1. 内容零碎,没有大纲来组织
2. 什么功能都有讲,就是没有按实际项目的常用程度来组织
3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔
勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,另外本套贴子属于经验性质的圈点知识,不属于完全小白式的教学。
如果读者有好的意见,请留言反馈。
索引器
索引器是C#中一种特殊的成员,它使用类似数组的 语法来访问类或结构的元素,就像数组一样。
演示代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp2 { /* 索引器是C#中一种特殊的成员,它使用类似数组的 语法来访问类或结构的元素,就像数组一样。 演示:勇哥 */ public class Class索引器 { //用索引器访问数组和二维数组 string[] names = new string[10]; string[,] newNames = new string[4, 4]; public string this[int index] { get { return names[index]; } set { names[index] = value; } } //这里演示了多个参数的索引器用法 public string this[int row, int col] { get { return newNames[row, col]; } set { newNames[row, col] = value; } } } public class Class索引器2 { //下面演示了索引器用来分别读取字典的key和value //注意这里比较有意义的是我们可以由字典的value返回key,这样索引器 //就封装了遍历查询的动作,外部使用起来就方便很多。这也是对字典应 //用索引器的实际意义 Dictionary<string, int> dic = new Dictionary<string, int>(); public int this[string keyName] { get { return dic[keyName]; } set { dic[keyName] = value; } } public string this[int indexValue] { get { foreach (var m in dic) { if (m.Value == indexValue) return m.Key; } return ""; } set { //要考虑字典是否有key if (dic.ContainsKey(value)) dic[value] = indexValue; else dic.Add(value, indexValue); } } } public class Class索引器3 { //演示如何用索引器读写类的属性 //这个例子只是表示可以这样用,但是意义不太大。 private List<People> list1 = new List<People>(); public object this[PeopleEnum fName, int index] { get { object v = null; if (fName == PeopleEnum.Name) v = list1[index].Name; else if (fName == PeopleEnum.Age) v = list1[index].Age; return v; } set { if (fName == PeopleEnum.Name) { if (list1.Count >= index + 1) { list1[index].Name = value.ToString(); } else { list1.Add(new People() { Name = value.ToString() }); } } else if (fName == PeopleEnum.Age) { if (list1.Count >= index + 1) { list1[index].Age = (int)value; } else { list1.Add(new People() { Age = (int)value }); } } } } } public class Class索引器4 { //演示了索引器索引器在接口方面的应用 //这样我们就可以按索引返回方法,这是一种非常常见的用法。 private Dictionary<SymbolEnum, ICalMethod> method = new Dictionary<SymbolEnum, ICalMethod>(); public Class索引器4() { //这里用索引器的set方法初始化内部的几组计算方法 //注意在外部使用的时候,还可以由用户set自己的计算方法,这显示出了灵活性 this[SymbolEnum.加法] = new MethodAdd(); this[SymbolEnum.减法] = new MethodSub(); this[SymbolEnum.乘法] = new MethodMul(); } public ICalMethod this[SymbolEnum methodName] { get { if (method.ContainsKey(methodName)) return method[methodName]; else return null; } set { if (method.ContainsKey(methodName)) method[methodName] = value; else method.Add(methodName, value); } } } public enum SymbolEnum { 加法 = 0, 减法, 乘法 } public class MethodAdd : ICalMethod { public int CalResult(int data1, int data2) { return data1 + data2; } } public class MethodSub : ICalMethod { public int CalResult(int data1, int data2) { return data1 - data2; } } public class MethodMul : ICalMethod { public int CalResult(int data1, int data2) { return data1 * data2; } } public interface ICalMethod { int CalResult(int data1, int data2); } public enum PeopleEnum { Name, Age } public class People { public string Name { get; set; } public int Age { get; set; } } }
调用者:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Class索引器 p = new Class索引器(); p[0] = "张三"; p[1] = "李四"; p[1, 2] = "1行3列"; p[2, 3] = "2行3列"; Class索引器2 m = new Class索引器2(); m["张三"] = 15; m["李四"] = 20; var name1 = m[15]; var name2 = m[20]; Class索引器3 k = new Class索引器3(); k[PeopleEnum.Name,0] = "张飞"; k[PeopleEnum.Age, 0] = 33; k[PeopleEnum.Name, 1] = "赵云"; k[PeopleEnum.Age, 1] = 23; var m1 = k[PeopleEnum.Name, 0]; var m2 = k[PeopleEnum.Age, 0]; Class索引器4 method = new Class索引器4(); var r1 = method[SymbolEnum.加法].CalResult(11, 12); var r2 = method[SymbolEnum.减法].CalResult(50, 20); var r3 = method[SymbolEnum.乘法].CalResult(10, 10); } } }
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


