2using System.Collections.Generic;
72 #region Private Variables
75 private List<Type> parameters;
77 private string description;
82 #region Private Methods
84 private void Validate(Type type)
87 if (type ==
null || type == typeof(
void))
90 if (type != typeof(
int)
91 && type != typeof(
float)
92 && type != typeof(
bool)
93 && type != typeof(
double)
94 && type != typeof(
string)
95 && type != typeof(
char)
98 throw new ExecutionException(
"Der Typ '" + type.Name +
"' ist kein generischer Datentyp und es wurden keine Erweiterungen registriert.");
109 else if (type == typeof(
void))
111 else if (type == typeof(
int))
113 else if (type == typeof(
float))
115 else if (type == typeof(
double))
117 else if (type == typeof(
bool))
119 else if (type == typeof(
char))
121 else if (type == typeof(
string))
126 tmp = type.ToString().Replace(
"System.",
"").ToLower();
134 #region Public Methods
136 public Routine(Type result,
string name, List<Type> parameters) {
140 foreach (Type parameter
in parameters)
143 this.result = result;
145 this.parameters = parameters;
151 public Routine(Type result,
string name, List<Type> parameterTypes,
string description)
156 foreach (Type parameter
in parameterTypes)
159 this.result = result;
161 this.parameters = parameterTypes;
162 this.description = description;
167 public Routine(
string name) : this(null, name, new List<Type>())
171 public Routine(
string name,
string description) : this(null, name, new List<Type>(), description)
175 public Routine(Type result,
string name) : this(result, name, new List<Type>())
179 public Routine(Type result,
string name,
string description) : this(result, name, new List<Type>(), description)
183 public Routine(Type result,
string name, Type parameter) : this(result, name, new List<Type>())
185 parameters.Add(parameter);
188 public Routine(Type result,
string name, Type parameter,
string description) : this(result, name, new List<Type>(), description)
190 parameters.Add(parameter);
193 public Routine(Type result,
string name, Type parameter0, Type parameter1) : this(result, name, new List<Type>())
195 parameters.Add(parameter0);
196 parameters.Add(parameter1);
199 public Routine(Type result,
string name, Type parameter0, Type parameter1,
string description) : this(result, name, new List<Type>(), description)
201 parameters.Add(parameter0);
202 parameters.Add(parameter1);
205 public Routine(Type result,
string name, Type parameter0, Type parameter1, Type parameter2) : this(result, name, new List<Type>())
207 parameters.Add(parameter0);
208 parameters.Add(parameter1);
209 parameters.Add(parameter2);
212 public Routine(Type result,
string name, Type parameter0, Type parameter1, Type parameter2,
string description) : this(result, name, new List<Type>(), description)
214 parameters.Add(parameter0);
215 parameters.Add(parameter1);
216 parameters.Add(parameter2);
223 public void Verify(List<object> parameters)
226 if (parameters.Count !=
this.parameters.Count)
227 throw new ExecutionException(
"Die Routine '" + name +
"' wurde mit " + parameters.Count +
" statt erwarteten " +
this.parameters.Count +
" Parametern aufgerufen.");
229 for (
int i = 0; i < parameters.Count; i++)
232 if (
null == this.parameters[i] ||
null == parameters[i])
235 if (typeof(
void) == this.parameters[i] || typeof(
void) == parameters[i])
238 Type expected = this.parameters[i];
240 Type specified = parameters[i].GetType();
242 if (expected != specified)
243 throw new ExecutionException(
"Typ '" + specified.Name +
"' statt erwartetem Typ '" + expected.Name +
"' als " + (i + 1) +
" Parameter von '" + name +
"' angegeben.");
256 if (
null == this.result ||
null == result)
259 if (typeof(
void) == this.result || typeof(
void) == result)
262 if (result.GetType() !=
this.result)
263 throw new ExecutionException(
"Typ '" + result.GetType().Name +
"' statt erwartetem Typ '" +
this.result.Name +
"' als Ergebnis von '" + name +
"' erhalten.");
270 StringBuilder sb =
new StringBuilder();
281 for (i = 0; i < parameters.Count; i++)
293 return sb.ToString();
304 #region Public Properties
313 get {
return parameters; }
318 get {
return result; }
324 internal set { host = value; }
void Verify(List< object > parameters)
Verify the parameter types of a Routine. If null or void was specified values arent verified.
Routine(Type result, string name, Type parameter)
Routine(Type result, string name, Type parameter0, Type parameter1, string description)
Routine(Type result, string name, List< Type > parameterTypes, string description)
void Verify(object result)
Verify the result of a Routine. If null or void was specified values arent verified.
Routine(Type result, string name, Type parameter0, Type parameter1)
Routine(Type result, string name)
Routine(string name, string description)
Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2)
Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2, string description)
List< Type > ParameterTypes
Routine(Type result, string name, Type parameter, string description)
Routine(Type result, string name, string description)
Routine(Type result, string name, List< Type > parameters)
override string ToString()
The main interface to create a Host. A Host can implement Routine's to extend its functionality.