public void CloneDerivedClassThroughBaseClassReference()
        {
            var source = new ClassWithReferenceToBaseClass {
                Reference = new BaseClass {
                    BaseClassName = "Foo"
                }
            };
            var clone = source.Clone();

            Assert.AreEqual("Foo", clone.Reference.BaseClassName);

            source.Reference = new DerivedClass {
                BaseClassName = "Bar", DerivedClassName = "Baz"
            };

            clone = source.Clone();
            var derivedClone = clone.Reference as DerivedClass;

            Assert.IsNotNull(derivedClone);
            Assert.AreEqual("Bar", derivedClone.BaseClassName);
            Assert.AreEqual("Baz", derivedClone.DerivedClassName);
        }
        public void CloneDerivedClassThroughBaseClassReference()
        {
            var source = new ClassWithReferenceToBaseClass {Reference = new BaseClass {BaseClassName = "Foo"}};
            var clone = source.Clone();

            Assert.AreEqual("Foo", clone.Reference.BaseClassName);

            source.Reference = new DerivedClass {BaseClassName = "Bar", DerivedClassName = "Baz"};

            clone = source.Clone();
            var derivedClone = clone.Reference as DerivedClass;

            Assert.IsNotNull(derivedClone);
            Assert.AreEqual("Bar", derivedClone.BaseClassName);
            Assert.AreEqual("Baz", derivedClone.DerivedClassName);
        }