annotate HowTo/Patterns/DuckTyping.cs @ 5:f7d63a092920

Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author cin
date Tue, 10 Mar 2015 16:02:11 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Patterns;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 namespace HowTo.Patterns
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 //[TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 public class DuckTyping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 // By default, all interface methods are optional.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public interface OptionalInterface
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 // If the source object does not implement the [b]Method1[/b], a NotImplementedException is thrown at [i]run time[/i].
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 void Method1();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 // If the source object does not implement the [b]Method2[/b], a TypeBuilderException is thrown at [i]build time[/i].
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /*[a]*/[MustImplement]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 void Method2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 // If the source object does not implement the [b]Method3[/b], an empty stub is genegated.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 // The return value and all output parameters will be set to default values.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 /*[a]*/[MustImplement(false, false)]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 int Method3();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 // The MustImplement attribute also can control the entire interface.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 /*[a]*/[MustImplement]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public interface RequiredInterface
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 // If the source object does not implement the [b]Method1[/b], a TypeBuilderException is thrown at [i]build time[/i].
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 void Method1();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 // If the source object does not implement the [b]Method2[/b], a NotImplementedException is thrown at [i]run time[/i].
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /*[a]*/[MustImplement(false)]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 void Method2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 // If the source object does not implement the [b]Method3[/b], an empty stub is genegated.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 // The return value and all output parameters will be set to default values.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /*[a]*/[MustImplement(false, false)]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 int Method3();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public class TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 public int Method3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 return 3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 // Two or more interfaces can be mixed together.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public interface InterfaceMix : RequiredInterface, OptionalInterface
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 InterfaceMix duck = /*[a]*/BLToolkit.Patterns.DuckTyping.Implement/*[/a]*/<InterfaceMix>(new TestClass());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 RequiredInterface duck1 = duck;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 OptionalInterface duck2 = duck;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 duck1.Method1();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 duck2.Method1();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 }