一、单例模式
1、非线程安全
public static MainForm instance;
public static MainForm CreateForm()
{
if (instance == null || instance.IsDisposed)
{
instance = new MainForm();
}
return instance;
}
2、线程安全且不用用锁
public static readonly FanucDataWatch instance = new FanucDataWatch();
---------------------------------------------------------------------------------------
二、事件重装理解
如何理解事件处理this.Paint+=new PaintEventHandler(Form1_Paint)?
this:指的是Form1窗体运行时的实例
this.Paint:指是这个窗体运行时实例的Paint事件,这个事件是所有继承Form都有的事件
new PaintEventHandler(Form1_Paint); 创建了一个PaintEventHandler事件,这个事件调用的方法是Form1_Paint(这个方法是你自己写的那个)
+=就是事件重载的方法,相当于将上面创建的事件,挂到this.Paint的事件下。
当this.Paint事件触发后,就会自动调用你写的Form1_Paint这个方法。
你先理解一下,这个主要涉及到事件,这个你需要看看一些资料,理解的会更好一些。
---------------------------------------------------------------------------------------
三、解释下c#中List<string>的用法
List<string> listdata=new List<string> ();是什么意思?
这是创建了一个只能装T类型的泛型集合。
也可以理解为一个高级的数组,List<T>比普通的数组拥有更多的属性和方法。能完成更复杂的业务需求。
比如普通的数组必须定义长度且长度是固定的,而List<T>是可以随意改变长度的。
泛型顾名思义通用类型集合在List<>里面可以放任何类型数据或者实体类
string[]只能存放string格式数据
比如利用List<>存放一个实体类User
List<User> list=new List<User>();
User为你构造出来的对象,里面可以有属性,方法等,这就是面向对象。
而String[]只是存放值而已,不是对象,区别大吧。
----------------------------------------------------------------------------------------
四、lambda用法
lambda的具体写法形式:隐式表达即没有指定参数类型(因为编译器能够根据上下文直接推断参数的类型)
(x, y) => x * y //多参数,隐式类型=>表达式x => x * 5 //单参数,隐式类型=>表达式
x => { return x * 5; } //单参数,隐式类型=>语句块
(int x) => x * 5 //单参数,显式类型=>表达式
(int x) => { return x * 5; } //单参数,显式类型=>语句块
() => Console.WriteLine() //无参数
Lambda表达式规则:
表达式位于=>运算符的右侧 (input parameters)=>expression
当Lambda只有一个输入参数的时候,括号才是可选的,否则括号是必须的。
例如:(x,y)=>x==y
有时候当编译器无法判断类型的时候,出现这种情况,你可以显式指定参数类型
例如:(int x,string y)=>s.length > x
当使用空括号表示指定0个参数
例如:()=>SomeMethod()
---------------------------------------------------------------------------------------
五、Form.cs和Form.Designer.cs
Form.cs和Form.Designer.cs其实是一个类,Visual Studio为了让我们方便管理,用partial关键字把窗体类给拆开了,Form.Designer.cs存放的是窗体的布局,你的窗体定义了哪些控件,那些控件的名字、属性等等,都是存放在Form.Designer.cs里面的,而Form.cs则是用来存放处理方法的,比如你的按钮点击事件绑定了Button_Click这个方法,就会出现在Form.cs里,而Form.resx则是用来存放你的窗体资源的,比如你自定义了你的窗体的图标,这个图标就会出现在Form.resx里面。其实在早期版本的Visual Studio里,是没有Form.Designer.cs的,窗体的设计类和逻辑类全在一个文件里。那么好处就显而易见了:便于管理。让你编程的时候能够更加直观。