穿着马甲的编码方式----链式
我们要做实干家,不做意淫者。哈~
上代码:
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using System.Diagnostics;
3 using System;
4
5 namespace Demo.TestProject
6 {
7 /// <summary>
8 /// 链式编码Demo
9 /// </summary>
10 [TestClass]
11 public class UnitTest
12 {
13
14 [TestMethod]
15 public void TestMethod1()
16 {
17 string hello = "Hello ";
18 string world = "World";
19
20 try
21 {
22 //例1: 有返回值(返回本身)的例子
23 new TestClasslmp { UName = "HLS" }
24 .StrStart()
25 .StrAppend(hello, world)
26 .StrEnd();
27 //例2: 无返回值的例子
28 new TestClasslmp2 { UName = "HLSTwo" }
29 .Do<TestClasslmp2>(p => p.StrStart())
30 .Do(p => p.StrAppend(hello, world))
31 .Do(p => p.StrEnd());
32
33 }
34 catch (Exception e)
35 {
36 throw new Exception("Error:" + e.Message);
37 }
38
39
40 }
41 }
42
43 /*****例1: 有返回值(返回本身)的例子*****/
44 public interface ITestClass
45 {
46 ITestClass StrStart();
47 ITestClass StrAppend(string hello, string world);
48 ITestClass StrEnd();
49 }
50
51 public class TestClasslmp : ITestClass
52 {
53 public string UName { get; set; }
54 #region ITestClass 成员
55
56 public ITestClass StrStart()
57 {
58 Trace.WriteLine("开始输出...");
59 return this;
60 }
61
62 public ITestClass StrAppend(string hello, string world)
63 {
64 Trace.WriteLine("输出: " + this.UName + " Say: " + hello + " " + world + ".");
65 return this;
66 }
67
68 public ITestClass StrEnd()
69 {
70 Trace.WriteLine("完成!");
71 return this;
72 }
73
74 #endregion
75 }
76
77
78 /*****例2: 无返回值(返回本身)的例子*****/
79 public interface ITestClass2
80 {
81 void StrStart();
82 void StrAppend(string hello, string world);
83 void StrEnd();
84 }
85
86 public class TestClasslmp2 : ITestClass2
87 {
88 public string UName { get; set; }
89 #region ITestClass 成员
90
91 public void StrStart()
92 {
93 Trace.WriteLine("开始输出...");
94 }
95
96 public void StrAppend(string hello, string world)
97 {
98 Trace.WriteLine("输出: " + this.UName + " Say: " + hello + " " + world + ".");
99 }
100
101 public void StrEnd()
102 {
103 Trace.WriteLine("完成!");
104 }
105
106 #endregion
107 }
108
109 /*****定义一个处理了链式void的方法*****/
110 public static class MyClass
111 {
112 public static T Do<T>(this T t, Action<T> action)
113 {
114 action(t);
115 return t;
116 }
117 }
118 }
2 using System.Diagnostics;
3 using System;
4
5 namespace Demo.TestProject
6 {
7 /// <summary>
8 /// 链式编码Demo
9 /// </summary>
10 [TestClass]
11 public class UnitTest
12 {
13
14 [TestMethod]
15 public void TestMethod1()
16 {
17 string hello = "Hello ";
18 string world = "World";
19
20 try
21 {
22 //例1: 有返回值(返回本身)的例子
23 new TestClasslmp { UName = "HLS" }
24 .StrStart()
25 .StrAppend(hello, world)
26 .StrEnd();
27 //例2: 无返回值的例子
28 new TestClasslmp2 { UName = "HLSTwo" }
29 .Do<TestClasslmp2>(p => p.StrStart())
30 .Do(p => p.StrAppend(hello, world))
31 .Do(p => p.StrEnd());
32
33 }
34 catch (Exception e)
35 {
36 throw new Exception("Error:" + e.Message);
37 }
38
39
40 }
41 }
42
43 /*****例1: 有返回值(返回本身)的例子*****/
44 public interface ITestClass
45 {
46 ITestClass StrStart();
47 ITestClass StrAppend(string hello, string world);
48 ITestClass StrEnd();
49 }
50
51 public class TestClasslmp : ITestClass
52 {
53 public string UName { get; set; }
54 #region ITestClass 成员
55
56 public ITestClass StrStart()
57 {
58 Trace.WriteLine("开始输出...");
59 return this;
60 }
61
62 public ITestClass StrAppend(string hello, string world)
63 {
64 Trace.WriteLine("输出: " + this.UName + " Say: " + hello + " " + world + ".");
65 return this;
66 }
67
68 public ITestClass StrEnd()
69 {
70 Trace.WriteLine("完成!");
71 return this;
72 }
73
74 #endregion
75 }
76
77
78 /*****例2: 无返回值(返回本身)的例子*****/
79 public interface ITestClass2
80 {
81 void StrStart();
82 void StrAppend(string hello, string world);
83 void StrEnd();
84 }
85
86 public class TestClasslmp2 : ITestClass2
87 {
88 public string UName { get; set; }
89 #region ITestClass 成员
90
91 public void StrStart()
92 {
93 Trace.WriteLine("开始输出...");
94 }
95
96 public void StrAppend(string hello, string world)
97 {
98 Trace.WriteLine("输出: " + this.UName + " Say: " + hello + " " + world + ".");
99 }
100
101 public void StrEnd()
102 {
103 Trace.WriteLine("完成!");
104 }
105
106 #endregion
107 }
108
109 /*****定义一个处理了链式void的方法*****/
110 public static class MyClass
111 {
112 public static T Do<T>(this T t, Action<T> action)
113 {
114 action(t);
115 return t;
116 }
117 }
118 }