public void Properties()
{
CodeNamespace ns = new CodeNamespace("NS");
ns.Imports.Add(new CodeNamespaceImport("System"));
// create a class
CodeTypeDeclaration class1 = new CodeTypeDeclaration();
class1.Name = "Test";
class1.IsClass = true;
class1.BaseTypes.Add(new CodeTypeReference(typeof(Exception)));
ns.Types.Add(class1);
CodeMemberField int1 = new CodeMemberField(typeof(int), "int1");
class1.Members.Add(int1);
CodeMemberField tempString = new CodeMemberField(typeof(string), "tempString");
class1.Members.Add(tempString);
// basic property with get/set
CodeMemberProperty prop1 = new CodeMemberProperty();
prop1.Name = "prop1";
prop1.Type = new CodeTypeReference(typeof(int));
prop1.Attributes = MemberAttributes.Public;
prop1.HasGet = true;
prop1.HasSet = true;
prop1.GetStatements.Add(new CodeMethodReturnStatement(new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("int1"), CodeBinaryOperatorType.Add, new CodePrimitiveExpression(1))));
prop1.SetStatements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("int1"), new CodeVariableReferenceExpression("value")));
class1.Members.Add(prop1);
// override Property
CodeMemberProperty overrideProp = new CodeMemberProperty();
overrideProp.Name = "Text";
overrideProp.Type = new CodeTypeReference(typeof(string));
overrideProp.Attributes = MemberAttributes.Public | MemberAttributes.Override;
overrideProp.HasGet = true;
overrideProp.HasSet = true;
overrideProp.SetStatements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("tempString"), new CodeVariableReferenceExpression("value")));
overrideProp.GetStatements.Add(new CodeMethodReturnStatement(new CodePrimitiveExpression("Hello World")));
class1.Members.Add(overrideProp);
foreach (MemberAttributes attrs in new[] { MemberAttributes.Private, MemberAttributes.Family, MemberAttributes.Assembly })
{
CodeMemberProperty configuredProp = new CodeMemberProperty();
configuredProp.Name = attrs.ToString() + "Prop";
configuredProp.Type = new CodeTypeReference(typeof(int));
configuredProp.Attributes = attrs;
configuredProp.HasGet = true;
configuredProp.HasSet = true;
configuredProp.GetStatements.Add(new CodeMethodReturnStatement(new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("int1"), CodeBinaryOperatorType.Add, new CodePrimitiveExpression(1))));
configuredProp.SetStatements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("int1"), new CodeVariableReferenceExpression("value")));
class1.Members.Add(configuredProp);
}
// Static property
CodeMemberProperty staticProp = new CodeMemberProperty();
staticProp.Name = "staticProp";
staticProp.Type = new CodeTypeReference(typeof(int));
staticProp.Attributes = MemberAttributes.Public | MemberAttributes.Static;
staticProp.HasGet = true;
staticProp.GetStatements.Add(new CodeMethodReturnStatement(new CodePrimitiveExpression(99)));
class1.Members.Add(staticProp);
// this reference
CodeMemberMethod thisRef = new CodeMemberMethod();
thisRef.Name = "thisRef";
thisRef.ReturnType = new CodeTypeReference(typeof(int));
thisRef.Attributes = MemberAttributes.Public;
CodeParameterDeclarationExpression param = new CodeParameterDeclarationExpression(typeof(int), "value");
thisRef.Parameters.Add(param);
thisRef.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "privProp1"), new CodeVariableReferenceExpression("value")));
thisRef.Statements.Add(new CodeMethodReturnStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "privProp1")));
class1.Members.Add(thisRef);
// set value
CodeMemberMethod setProp = new CodeMemberMethod();
setProp.Name = "setProp";
setProp.ReturnType = new CodeTypeReference(typeof(int));
setProp.Attributes = MemberAttributes.Public;
CodeParameterDeclarationExpression intParam = new CodeParameterDeclarationExpression(typeof(int), "value");
setProp.Parameters.Add(intParam);
setProp.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "prop1"), new CodeVariableReferenceExpression("value")));
setProp.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression("int1")));
class1.Members.Add(setProp);
AssertEqual(ns,
@"namespace NS {
using System;
public class Test : System.Exception {
private int int1;
private string tempString;
public virtual int prop1 {
get {
return (int1 + 1);
}
set {
int1 = value;
}
}
public override string Text {
get {
return ""Hello World"";
}
set {
tempString = value;
}
}
private int PrivateProp
{
get
{
return (int1 + 1);
}
set
{
int1 = value;
}
}
protected virtual int FamilyProp
{
get
{
return (int1 + 1);
}
set
{
int1 = value;
}
}
internal virtual int AssemblyProp
{
get
{
return (int1 + 1);
}
set
{
int1 = value;
}
}
public static int staticProp
{
get
{
return 99;
}
}
public virtual int thisRef(int value)
{
this.privProp1 = value;
return this.privProp1;
}
public virtual int setProp(int value)
{
this.prop1 = value;
return int1;
}
}
}");
}