Code
Mixin can be implemented in C# 3.0 using an extension method.
Functionality can be added by extending
the interface implemented by the class.
Consider the following example.Code
1: using System;Code
2:Code
3: namespace MixinCode
4:Code
5: {Code
6:Code
7: class Person : IPersonCode
8:Code
9: {Code
10:Code
11: private int _age;Code
12:Code
13: private string _name;Code
14:Code
15: #region IPerson MembersCode
16:Code
17: public int ageCode
18:Code
19: {Code
20:Code
21: getCode
22:Code
23: {Code
24:Code
25: return _age;Code
26:Code
27: }Code
28:Code
29: setCode
30:Code
31: {Code
32:Code
33: if (value > 0)Code
34:Code
35: {Code
36:Code
37: _age = value;Code
38:Code
39: }Code
40:Code
41:Code
42: }Code
43:Code
44: }Code
45:Code
46:Code
47: public string nameCode
48:Code
49: {Code
50:Code
51: getCode
52:Code
53: {Code
54:Code
55: return _name;Code
56:Code
57: }Code
58:Code
59: setCode
60:Code
61: {Code
62:Code
63: if (!string.IsNullOrEmpty(value))Code
64:Code
65: {Code
66:Code
67: _name = value;Code
68:Code
69: }Code
70:Code
71: elseCode
72:Code
73: {Code
74:Code
75: _name = "Unknown";Code
76:Code
77: }Code
78:Code
79: }Code
80:Code
81: }Code
82:Code
83: #endregionCode
84:Code
85: }Code
86:Code
87: interface IPersonCode
88:Code
89: {Code
90:Code
91: int age { get; set; }Code
92:Code
93: String name { get; set; }Code
94:Code
95: }Code
96:Code
97: static class ExtendIPersonCode
98:Code
99: {Code
100:Code
101: public static bool CanDrive(this IPerson testPerson, bool isDriver)Code
102:Code
103: {Code
104:Code
105: if (isDriver)Code
106:Code
107: return true;Code
108:Code
109: return false;Code
110:Code
111: }Code
112:Code
113: }Code
114:Code
115: class ProgramCode
116:Code
117: {Code
118:Code
119: static void Main(string[] args)Code
120:Code
121: {Code
122:Code
123: IPerson ip = new Person();Code
124:Code
125:Code
126: ip.name = "ABC";Code
127:Code
128: ip.age = 21;Code
129:Code
130: if(ip.CanDrive(true))Code
131:Code
132: {Code
133:Code
134: Console.WriteLine(ip.name +" can drive");Code
135:Code
136: }Code
137:Code
138: Console.ReadLine();Code
139:Code
140: }Code
141:Code
142: }Code
143:Code
144: }Code
145:Code
Code
In this example, we implemented mixin by extending the IPerson interfaceCode
[line 87] using CanDrive extension method definedCode
in the ExtendIPerson static class[line 101].Code
Notice the code on line 130 ip.CanDrive - an example of C# mixin.Code
Another explanation of the mixin can be found atCode
Code
http://mikehadlow.blogspot.com/2008/05/interface-extension-methods-mixin.html
Join the conversation! Your thoughts help the community grow.