VSTO开发入门教程
上QQ阅读APP看书,第一时间看更新

2.12 类的创建和使用

C#中,类可以拥有自己的成员和函数,每个类以文件的形式存储于项目文件夹中。从功能上分,类还分为非静态类和静态类。

本节视频:类的创建和使用.wmv

■2.12.1 非静态类

非静态类在被调用时,需要使用new关键字实例化方可访问和使用类的成员。下面通过一个例子来说明非静态类的用法。

启动Visual Studio 2012,创建一个名为“WindowsFormsApplication20160625”的窗体应用程序,在窗体Form1上放入一个button按钮控件。

单击菜单【项目/添加类】,在出现的对话框中重命名类名为UCase.cs,如图2.10所示。

图2.10 添加类

在UCase类模块中,编写一个countCapital函数,用于计算一个字符串中大写字母的个数。UCase类模块代码如下:

    1  using System;
    2  using System.Collections.Generic;
    3  using System.Linq;
    4  using System.Text;
    5  using System.Threading.Tasks;
    6
    7  namespace WindowsFormsApplication20160625
    8  {
    9     class UCase
    10     {
    11        public int countCapital(string source)
    12        {
    13            int cnt = 0;
    14            foreach (char c in source)
    15            {
    16                if (c >= 'A' && c <= 'Z')
    17                {
    18                      cnt++;
    19                }
    20            }
    21            return cnt;
    22        }
    23     }
    24 }

上述代码中,第11~22行为笔者添加,其余部分为模板自动生成。countCapital函数的实现原理是,用foreach循环遍历source字符串中的每一个字符,如果字符是大写字母,则给cnt自加1,最后函数返回cnt。

下面演示如何在窗体中调用该类中的函数。

回到窗体的设计视图,双击button1,修改其单击事件过程:

    1         private void button1_Click(object sender, EventArgs e)
    2         {
    3             UCase U = new UCase();
    4             MessageBox.Show(U.countCapital("Microsoft Office PPT").ToString());
    5         }

需要特别注意的是,第3行代码声明了一个Ucase变量U,那么U就是UCase类的一个实例,接下来在第4行中,使用U.countCapital就调用了这个类中的函数。

启动调试,单击窗体上的按钮,对话框中出现5,这是因为字符串中含有5个大写字母。

■2.12.2 静态类

静态类与非静态类的区别是,在被调用时,不需要使用new关键字来实例化,使用引用类名称即可。在实际编程应用中,可以利用这一特点,把一些共用的变量或函数放在静态类中。

往项目中添加静态类的方法和一般的类添加步骤是一样的。下面举一个例子,通过单击窗体上的按钮,在按钮上显示已经单击了几次。

在上一小节的窗体应用程序中继续添加一个名为Counter的类,编辑该类中的代码为:

    1  using System;
    2  using System.Collections.Generic;
    3  using System.Linq;
    4  using System.Text;
    5  using System.Threading.Tasks;
    6
    7  namespace WindowsFormsApplication20160625
    8  {
    9     public static class Counter
    10     {
    11        public static int times = 0;
    12     }
    13 }

注意代码中第9行class Counter前面加了public static,这说明该类是静态类。该类中定义了一个静态的公有整型变量times。

在窗体的设计视图中继续添加一个名为button2的按钮控件,双击该按钮,编辑其Click 55事件:

    1         private void button2_Click(object sender, EventArgs e)
    2         {
    3             Counter.times++;
    4             this.button2.Text = "已经单击:" + Counter.times + "次。";
    5         }

启动调试,每单击一次button2按钮,该按钮的标题文字就显示总共单击它的次数。

要使用静态类中的成员,只需要使用Counter.times即可,无需实例化。