模块封装
程序设计
使用面向对象逻辑实现的计算器
class Calcuator
{
public int Add(int i, int j)
{
return i + j;
}
public int Mul(int i, int j)
{
return i - j;
}
public int Max(int i, int j)
{
return i * j;
}
public int Div(int i, int j)
{
return i / j;
}
}
private void button1_Click(object sender, EventArgs e)
{
int num1 = int.Parse(textBox1.Text);
int num2 = int.Parse(textBox2.Text);
string type = comboBox1.SelectedItem.ToString();
Calcuator calc = new Calcuator();
if (type=="+")
{
label2.Text =calc.Add(num1, num2).ToString();
}
else if (type=="-")
{
label2.Text = calc.Mul(num1, num2).ToString();
}
}
新问题的引出
首先刚才是这款软件的第一个版本能够实现整数的基础运算。这个软件上线之后很多客户都在正常使用。
但是很多用户提出来了一些问题:
- 除法运算无法求出小数部分
- 运算的功能较少能否再添加一些功能
- 上个计算器类是由程序员A编写的,现在解决问题只能由程序员B来维护
关键问题:上个计算器类是由程序员A编写的,现在由程序员B来维护除过Calculator类以外的所有程序,客户的要求要更改但是程序员B不知道A编写的源码,如果计算器类需要变动只能由A来完成,与B无关,假如你是程序员A为了解决这个隐患如何做。
问题点:两个人写的代码在同一个项目中,无法满足客户要求
导致最终问题:这个程序假如更改完成,面临的是要将之前的第一个版本先下线,然后将新的程序第二个版本再上线,用户会有很多烦恼:计算机上出现了1.0、 1.1、1.2、1.3、…等一系列版本,
如何解决上述一系列问题
使用模块封装
- 右键解决方案>>选择“新建项目”>>(.NET Framework)类库
2 向类库中添加Calc类,并编写方法
public class Calc
{
/// <summary>
/// 加法运算
/// </summary>
/// <param name="i">参数1</param>
/// <param name="j">参数2</param>
/// <returns></returns>
public int Add(int i, int j)
{
return i + j;
}
/// <summary>
/// 减法运算
/// </summary>
/// <param name="i">参数1</param>
/// <param name="j">参数2</param>
/// <returns></returns>
public int Mul(int i, int j)
{
return i - j;
}
/// <summary>
/// 乘法运算
/// </summary>
/// <param name="i">参数1</param>
/// <param name="j">参数2</param>
/// <returns></returns>
public int Max(int i, int j)
{
return i * j;
}
/// <summary>
/// 除
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
public double Div(int i, int j)
{
return Convert.ToDouble(i) /Convert.ToDouble(j);
}
}
3.右键选择生成类库项目,并打开类库程序文件夹Debug找到对应的类库.dll文件,这个dll(Dynamic Link Library)动态来接库文件,里面包含了这个类库中我们添加的所有的类,类中的所有方法,以对其内部C#代码编译后的结果进行保存(dll是一个.NET平台上能够直接执行的机器语言集合)
4. 在主项目中添加对Calculator.dll文件的引用
- 在项目中使用Calculator类库中的Calc对象
Calc calc = new Calc();
private void button1_Click(object sender, EventArgs e)
{
int num1 = int.Parse(textBox1.Text);
int num2 = int.Parse(textBox2.Text);
string type = comboBox1.SelectedItem.ToString();
if (type=="+")
{
label2.Text = calc.Add(num1,num2).ToString();
}
else if (type=="-")
{
label2.Text =calc.Mul(num1,num2).ToString();
}
else if (type=="×")
{
label2.Text =calc.Max(num1,num2).ToString();
}
else if (type=="÷")
{
label2.Text = calc.Div(num1, num2).ToString() ;
}
}
模块封装的应用
检查更新-》下载文件-》升级替换-》应用新模块