【C#】从头开始看一个C#项目

由于软件需要用C#进行二次开发,看了一段时间的语法之后,开始接触官网提供demo工程文件,将从头开始读一个C#项目所遇到的一些知识点记录下来。

C#项目的入口

一般C#项目中会有一个program.cs文件,可以称为主程序,Main方法为主程序中的入口点,通常是如下模板:

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [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属性

应该修改成有意义的名字,不要使用默认的Form1Label1等。
这里写图片描述
对应的初始化代码为:

this.BUTTON_CONNECT_ETHERNET = new System.Windows.Forms.Button();

InitializeComponent()方法

建一个C#窗体项目,在Form1.csForm1.Designer.cs里分别有一个InitializeComponent()函数。

Form1.Designer.cs里的是定义 (函数名后面有大括号包含定义内容);
Form1.cs 里的是调用 (函数名后面分号结尾)。

partial表示以下创建的是分布类代码,也就是说 一个类的定义代码 可以写在两个不同的页面,
Form1.csForm1.Designer.cs

调用子窗口

目的:在主窗口中通过点击一个按钮,打开子窗口。子窗口打开之后仍然能够操作主窗口。

private void BUTTON_TEXT_Click( object sender, EventArgs e )
        {
            //WR 确保打开的text_frm子窗口数量为1
           if( Application.OpenForms.OfType<text_frm>().Count() == 0)
            {
                text_frm text_form = new text_frm(ClientCtrl1);
                text_form.Show();
            }           
        }

Application.OpenForms属性,包含属于此应用程序的所有当前打开窗体的FormCollection,表示所有由应用程序窗体组成的只读集合。属于System.Windows.Forms命名空间。

FormCollection的扩展方法OfType<TResult>(),可以根据指定类型筛选IEnumerable的元素。FormCollection 通过使用 Application 对象列表中整个当前打开的窗体的OpenForms 属性。属于System.Collections命名空间。

Enumerable.Count()返回序列中的元素数,返回值为int32型,属于System.Linq命名空间。

调用ActiveX控件

方法:打开一个窗体设计器(designer),在工具箱中右键“选择项”,弹出的对话框中选择“添加COM组件”,添加需要的ocx控件,然后将其拖入设计器中。在解决方案视图的“引用”选项卡下会自动添加AxSAMLIGHT_CLIENT_CTRL_OCLib, 在Form1.Designer.cs中的InitializeComponent()方法中会添加一行
private AxSAMLIGHT_CLIENT_CTRL_OCXLib.AxScSamlightClientCtrl axScSamlightClientCtrl1;

  • Interop.xxx.dll是自动化(COM dll)包装器,可以在命名空间中操作对象;
  • AxInterop.xxx.dll是ActivateX控件的控件包装器,可以将它拖到窗体上。

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只有封装;

  • 22
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值