由于软件需要用C#进行二次开发,看了一段时间的语法之后,开始接触官网提供demo工程文件,将从头开始读一个C#项目所遇到的一些知识点记录下来。
一般C#项目中会有一个program.cs
文件,可以称为主程序,Main
方法为主程序中的入口点,通常是如下模板:
static class Program
{
///
/// The main entry point for the application.
///
[STAThread] //WR 单线程,为应用程序分配主线程,Main方法是主线程的入口点
static void Main()
{
Application.EnableVisualStyles(); //WR 启用应用程序可视样式
Application.SetCompatibleTextRenderingDefault( false ); //WR 控件使用GDI+
Application.Run( new samlight_client_csharp() ); //WR 设置当前项目主窗体
}
}
public partial class
`partial` 是部分类/局部类,在另一个`.cs`文件中可以再定义这个类名。
name
属性应该修改成有意义的名字,不要使用默认的Form1
、Label1
等。
对应的初始化代码为:
this.BUTTON_CONNECT_ETHERNET = new System.Windows.Forms.Button();
InitializeComponent()
方法建一个C#窗体项目,在Form1.cs
和Form1.Designer.cs
里分别有一个InitializeComponent()
函数。
Form1.Designer.cs
里的是定义 (函数名后面有大括号包含定义内容);
Form1.cs
里的是调用 (函数名后面分号结尾)。
partial
表示以下创建的是分布类代码,也就是说 一个类的定义代码 可以写在两个不同的页面,
Form1.cs
和 Form1.Designer.cs
目的:在主窗口中通过点击一个按钮,打开子窗口。子窗口打开之后仍然能够操作主窗口。
private void BUTTON_TEXT_Click( object sender, EventArgs e )
{
//WR 确保打开的text_frm子窗口数量为1
if( Application.OpenForms.OfType().Count() == 0)
{
text_frm text_form = new text_frm(ClientCtrl1);
text_form.Show();
}
}
Application.OpenForms
属性,包含属于此应用程序的所有当前打开窗体的FormCollection
,表示所有由应用程序窗体组成的只读集合。属于System.Windows.Forms
命名空间。
FormCollection
的扩展方法OfType
,可以根据指定类型筛选IEnumerable
的元素。FormCollection 通过使用 Application 对象列表中整个当前打开的窗体的OpenForms 属性。属于System.Collections
命名空间。
Enumerable.Count()
返回序列中的元素数,返回值为int32
型,属于System.Linq
命名空间。
方法:打开一个窗体设计器(designer),在工具箱中右键“选择项”,弹出的对话框中选择“添加COM组件”,添加需要的ocx控件,然后将其拖入设计器中。在解决方案视图的“引用”选项卡下会自动添加AxSAMLIGHT_CLIENT_CTRL_OCLib
, 在Form1.Designer.cs
中的InitializeComponent()
方法中会添加一行
private AxSAMLIGHT_CLIENT_CTRL_OCXLib.AxScSamlightClientCtrl axScSamlightClientCtrl1;
COM组件:
COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。
COM组件必须隐藏(封装)其内部实现细节。
COM组件不是DLL,只是利用DLL来给组件提供动态链接的能力。
COM组件不是一个API函数集。
COM组件不是类。
可以把COM
看作是某种(软件)打包技术,即把它看作是软件的不同部分,按照一定的面向对象的形式,组合成可以交互的过程和一组支持库。ActiveX
是指宽松定义的、基于COM的技术集合。
COM和一般DLL的区别
1、COM组件以接口对功能分类,便于组织;DLL特别是大的DLL,函数一大堆,难以组织;
2、COM组件便于升级维护,功能扩充,只需添加接口就行;DLL升级困难,函数不能随意改变;
3、COM创建调用有很好的安全性,DLL没有;
4、COM组件可轻松实现进程间调用,DLL很困难;
5、COM组件可轻松实现分布式调用,DLL不可能;
6、COM组件具有封装、继承、多态的面向对象特征,DLL只有封装;