public void BehaviorsCanFilterVirtualMethods() { var alpha = ClayActivator.CreateInstance <Anything>(new IClayBehavior[] { new InterfaceProxyBehavior(), new AnythingModifier() }); dynamic dynamically = alpha; Anything statically = alpha; IClayPlus interfacially = alpha; Assert.That(dynamically.Hello, Is.EqualTo("[World]")); Assert.That(statically.Hello, Is.EqualTo("[World]")); Assert.That(interfacially.Hello, Is.EqualTo("[World]")); Assert.That(dynamically.Add(3, 4), Is.EqualTo(9)); Assert.That(statically.Add(3, 4), Is.EqualTo(9)); Assert.That(interfacially.Add(3, 4), Is.EqualTo(9)); Assert.That(interfacially.Add(3, 5), Is.EqualTo(10)); Assert.That(interfacially.Add(3, 6), Is.EqualTo(11)); }
public void SubclassFromAnythingMembersRemainAvailableStaticallyAndDynamicallyAndViaInterface() { var alpha = ClayActivator.CreateInstance <Anything>(new[] { new InterfaceProxyBehavior() }); var type = alpha.GetType(); Assert.That(type, Is.Not.EqualTo(typeof(Anything))); dynamic dynamically = alpha; Anything statically = alpha; IClayPlus interfacially = alpha; Assert.That(dynamically.Hello, Is.EqualTo("World")); Assert.That(statically.Hello, Is.EqualTo("World")); Assert.That(interfacially.Hello, Is.EqualTo("World")); Assert.That(dynamically.Add(3, 4), Is.EqualTo(7)); Assert.That(statically.Add(3, 4), Is.EqualTo(7)); Assert.That(interfacially.Add(3, 4), Is.EqualTo(7)); Assert.That(interfacially.Add(3, 5), Is.EqualTo(8)); Assert.That(interfacially.Add(3, 6), Is.EqualTo(9)); }