public void OperatingOnFields()
{
var cd = new CodeTypeDeclaration("TestFields") { IsClass = true };
var cmm = new CodeMemberMethod();
cmm.Name = "UseFields";
cmm.Attributes = MemberAttributes.Public | MemberAttributes.Static;
cmm.ReturnType = new CodeTypeReference(typeof(int));
cmm.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(int)), "i"));
cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference("ClassWithFields"), "number", new CodeObjectCreateExpression("ClassWithFields")));
var binaryOpExpression = new CodeBinaryOperatorExpression(
new CodeFieldReferenceExpression(
new CodeVariableReferenceExpression("number"), "NonStaticPublicField"), CodeBinaryOperatorType.Add,
new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("number"), "UsePrivateField", new CodeVariableReferenceExpression("i")));
cmm.Statements.Add(new CodeMethodReturnStatement(new CodeBinaryOperatorExpression(
binaryOpExpression, CodeBinaryOperatorType.Add, new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("ClassWithFields"), "StaticPublicField"))));
cd.Members.Add(cmm);
AssertEqual(cd,
@"public class TestFields
{
public static int UseFields(int i)
{
ClassWithFields number = new ClassWithFields();
return ((number.NonStaticPublicField + number.UsePrivateField(i)) + ClassWithFields.StaticPublicField);
}
}");
}