using System;

namespace director_propertyNamespace {

public class runme
{
  static void Main()
  {
    {
      Foo a = new MyFoo();
      if (a.getA() != "") {
        throw new Exception( "Test failed" );
      }
      a.setA("Hello");
      if (a.getA() != "Hello set from MyFoo") {
        throw new Exception( "Test failed" );
      }
      a.setAByRef("Hello");
      if (a.getA() != "Hello setAByRef from MyFoo") {
        throw new Exception( "Test failed" );
      }
      a.Dispose();
    }

    {
      Foo a_original = new MyFoo();
      Foo a = Foo.get_self(a_original);
      if (a.getA() != "") {
        throw new Exception( "Test failed" );
      }
      a.setA("Hello");
      if (a.getA() != "Hello set from MyFoo") {
        throw new Exception( "Test failed" );
      }
      a.setAByRef("Hello");
      if (a.getA() != "Hello setAByRef from MyFoo") {
        throw new Exception( "Test failed" );
      }
      a.Dispose();
    }
  }
}

public class MyFoo : Foo
{
  public MyFoo()
    : base()
  {
  }

  public override void setA(string a)
  {
    base.setA(a + " set from MyFoo");
  }

  public override void setAByRef(string a)
  {
    base.setA(a + " setAByRef from MyFoo");
  }
}

}