时间:2021-07-01 10:21:17 帮助过:18人阅读
多态是OOP的重要特性,我这里指的多态是其中的一小部分。 在Web Services方法中,我们往往使用的都是一个具体类型的参数。这个参数一般就是一个数据对象,所有的功能基本上只是为了存放数据。虽然这对于应用来说一般已经足够,我们大量使用了这样的Web Servi
多态是OOP的重要特性,我这里指的多态是其中的一小部分。
在Web Services方法中,我们往往使用的都是一个具体类型的参数。这个参数一般就是一个数据对象,所有的功能基本上只是为了存放数据。虽然这对于应用来说一般已经足够,我们大量使用了这样的Web Services,不也过得好好的吗?但是,在这一点上实在太不够面向对象了。
不过,我们到底如何在Web Services方法中运用多态呢?似乎最容易想到的办法就是在Web Services方法里使用接口或者抽象类型的参数,只要将不同的实现或者子类对象作为参数传递给Web Services方法就可以了。作为示例,我们希望看到最简单的东西,那么就使用这个方法吧。
首先,我们定义一个Employee抽象类:
Employee抽象类1 public abstract class Employee
2 {
3 private int _Years;
4 public int Years
5 {
6 get
7 {
8 return this._Years;
9 }
10 set
11 {
12 this._Years = value;
13 }
14 }
15
16 public string RealStatus
17 {
18 get
19 {
20 return this.GetType().Name;
21 }
22 }
23
24 public abstract int CalculateSalary();
25 }
Employee抽象类存放了一个员工的工龄,RealStatus属性返回了当前实例真正的类名,并且定义了一个CalculateSalary方法,可以让子类提供不同的实现。
我们又写了一个Web Services方法CalculateSalary,用于计算一个员工的薪水,并将信息返回。代码如下:
CalculateSalary方法
1 [WebMethod]
2 public string CalculateSalary(Employee employee)
3 {
4 return "I'm " + employee.RealStatus + ", my salary is " + employee.CalculateSalary() + ".";
5 }
这样,我们只要传入不同的Employee子类的实例,就能获得不同的信息了。那么我们现在开始分配薪水吧(以下数据纯属虚构,如有雷同,实属巧合)!
首先是实习生。可怜的实习生,不管干多少年永远只有2000元:
Intern类代码
1 public class Intern : Employee
2 {
3 public override int CalculateSalary()
4 {
5 return 2000;
6 }
7 }
接下来是签第三方公司的合同工,底薪5000,每年增加1000:
Vendor类代码
1 public class Vendor : Employee
2 {
3 public override int CalculateSalary()
4 {
5 return 5000 + 1000 * (Years - 1);
6 }
7 }
最后是正式员工(全职工),底薪12000,每年增加2000:
FulltimeEmployee类代码
1 public class FulltimeEmployee : Employee
2 {
3 public override int CalculateSalary()
4 {
5 return 12000 + 2000 * (Years - 1);
6 }
7 }
然后我们应该如何告诉Atlas将不同类型的实例传递给Web Services方法的参数呢?答案便是使用“__serverType”指定类型。我们通过示例代码查看这一点:
首先我们还是来看简单的HTML代码:
HTML代码
1
2
3
4
5 Status:
6
11
12
13 Result:
14
有一个文本框,在里面输入年份。还有一个下拉框,可以选择想要传递给Web Services方法的参数类型。点击“Calculate!”按钮则会调用Web Services方法,并将结果显示在最后的DIV上。
下面是所用到的Javascript代码:
Javascript代码
1