Fork me on GitHub

C#实现jQuery的方法连缀

   jQuery的方法连缀使用起来非常方便,可以简化语句,让代码变得清晰简洁。那C#的类方法能不能也实现类似的功能呢?基于这样的疑惑,研究了一下jQuery的源代码,发现就是需要方法连缀的函数方法最后返回对象本身即可。既然javascript可以,C#应该也是可以的。

  为了验证,编写一个jQPerson类,然后用方法连缀对其ID,Name,Age等属性进行设置,请看下面的代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace CSharpMethodLikeJQuery
 8 {
 9     public class jQPerson
10     {
11         string Id { set; get; }
12         string Name { set; get; }
13         int Age { set; get; }
14         string Sex { set; get; }
15         string Info { set; get; }
16 
17         public jQPerson()
18         {
19 
20         }
21         /// <summary>
22         /// 设置ID,返回this,即jQPerson实例
23         /// </summary>
24         /// <param name="Id"></param>
25         /// <returns></returns>
26         public jQPerson setId(string Id)
27         {
28             this.Id = Id;
29             return this;
30         }
31         /// <summary>
32         /// 返回this,即jQPerson实例
33         /// </summary>
34         /// <param name="name"></param>
35         /// <returns></returns>
36         public jQPerson setName(string name)
37         {
38 
39             this.Name = name;
40             return this;
41         }
42         /// <summary>
43         /// 返回this,即jQPerson实例
44         /// </summary>
45         /// <param name="age"></param>
46         /// <returns></returns>
47         public jQPerson setAge(int age)
48         {
49 
50             this.Age = age;
51             return this;
52         }
53         /// <summary>
54         /// 返回this,即jQPerson实例
55         /// </summary>
56         /// <param name="sex"></param>
57         /// <returns></returns>
58         public jQPerson setSex(string sex)
59         {
60 
61             this.Sex = sex;
62             return this;
63         }
64         /// <summary>
65         /// 返回this,即jQPerson实例
66         /// </summary>
67         /// <param name="info"></param>
68         /// <returns></returns>
69         public jQPerson setInfo(string info)
70         {
71 
72             this.Info = info;
73             return this;
74         }
75         /// <summary>
76         /// tostring输出键值对信息
77         /// </summary>
78         /// <returns></returns>
79         public string toString()
80         {
81 
82             return string.Format("Id:{0},Name:{1},Age:{2},Sex:{3},Info:{4}", this.Id, this.Name, this.Age, this.Sex, this.Info);
83 
84 
85         }
86 
87     }
88 }

  然后可以对上面进行测试,看方法连缀是否生效:

 1         /// <summary>
 2         ///toString 的测试
 3         ///</summary>
 4         [TestMethod()]
 5         public void toStringTest()
 6         {
 7             jQPerson target = new jQPerson();
 8             target.setId("2")
 9                   .setName("jack")
10                   .setAge(26)
11                   .setSex("man")
12                   .setInfo("ok");
13             string expected = "Id:2,Name:jack,Age:26,Sex:man,Info:ok";
14             string actual;
15             actual = target.toString();
16             Assert.AreEqual(expected, actual);
17             //Assert.Inconclusive("验证此测试方法的正确性。");
18         }

  可以看到,方法连缀确实可以让代码变得直观和简洁,增加可阅读性。

posted @ 2015-11-10 10:41  JackWang-CUMT  阅读(3062)  评论(14编辑  收藏  举报