Inheritance - greuelpirat/DeepCopy GitHub Wiki
Use DeepCopyExtension
to create copies of instances within class hierarchy.
Example
Your code:
[DeepCopyExtension]
public static BaseClass DeepCopy(this BaseClass baseClass) => baseClass;
public class BaseClass { ... }
public class DerivedClass : BaseClass { ... }
public class OtherDerivedClass : BaseClass { ... }
What gets compiled:
public static BaseClass DeepCopy(this BaseClass baseClass) {
if (baseClass == null)
return (BaseClass) null;
if (baseClass is DerivedClass derivedClass)
return (BaseClass) new DerivedClass(derivedClass);
if (baseClass is OtherDerivedClass otherDerivedClass)
return (BaseClass) new OtherDerivedClass(otherDerivedClass);
return new BaseClass(baseClass);
}
Example for abstract base class
Your code:
[DeepCopyExtension]
public static AbstractBaseClass DeepCopy(this AbstractBaseClass baseClass) => baseClass;
public class AbstractBaseClass { ... }
public class DerivedClass : AbstractBaseClass { ... }
public class OtherDerivedClass : AbstractBaseClass { ... }
What gets compiled:
public static AbstractBaseClass DeepCopy(this AbstractBaseClass baseClass) {
if (baseClass == null)
return (AbstractBaseClass) null;
if (baseClass is DerivedClass derivedClass)
return (AbstractBaseClass) new DerivedClass(derivedClass);
if (baseClass is OtherDerivedClass otherDerivedClass)
return (AbstractBaseClass) new OtherDerivedClass(otherDerivedClass);
throw new InvalidOperationException();
}