勇哥注:
这个系列的贴子主要是为了培训用(专职自动化设备的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
版权声明:本文为博主原创文章,转载请附上博文链接!