public override CodeTypeMember CreateBinaryOperator( string argumentTypeName, string firstArgumentName, string secondArgumentName, CodeOverridableOperatorType operatorType, string returnTypeName, CodeStatementCollection statements, MemberAttributes attributes) { StringBuilder sb = new StringBuilder(); AppendMemberAttributeString(sb, c_memberAttributeKeywordMappings, attributes); sb.Append(" "); sb.Append(returnTypeName); sb.Append(" operator "); sb.Append(GetOverridableOperatorString(operatorType)); sb.Append(" ("); sb.Append(argumentTypeName); sb.Append(" "); sb.Append(firstArgumentName); sb.Append(", "); sb.Append(argumentTypeName); sb.Append(" "); sb.Append(secondArgumentName); sb.Append(") {"); StringWriter writer = new StringWriter(sb); // CodeGeneratorOptions options = new CodeGeneratorOptions (); foreach (CodeStatement statement in statements) { Generator.GenerateCodeFromStatement(statement, writer, null); } sb.Append(" }"); return(new CodeSnippetTypeMember(sb.ToString())); }
public virtual CodeTypeMember CreateBinaryOperator( string argumentTypeName, string firstArgumentName, string secondArgumentName, CodeOverridableOperatorType operatorType, string returnTypeName, CodeStatementCollection statements, MemberAttributes attributes) { throw new NotSupportedException(this.GetType().FullName + " does not support operator overriding."); }
private string GetOverridableOperatorString(CodeOverridableOperatorType operatorType) { switch (operatorType) { case CodeOverridableOperatorType.Equality: return("=="); case CodeOverridableOperatorType.Inequality: return("!="); case CodeOverridableOperatorType.BitwiseAnd: return("&"); case CodeOverridableOperatorType.BooleanOr: return("|"); case CodeOverridableOperatorType.GreaterThan: return(">"); case CodeOverridableOperatorType.GreaterThanOrEqual: return(">="); case CodeOverridableOperatorType.LessThan: return("<"); case CodeOverridableOperatorType.LessThanOrEqual: return("<="); case CodeOverridableOperatorType.Add: return("+"); case CodeOverridableOperatorType.Multiply: return("*"); case CodeOverridableOperatorType.Subtract: return("-"); case CodeOverridableOperatorType.Divide: return("/"); case CodeOverridableOperatorType.Modulus: return("%"); default: throw new ArgumentException("Invalid CodeOverridableOperatorType value: " + operatorType.ToString(), "operatorType"); } }