c# - Complex inheritance situation. Returning base object from derived class -
this question has answer here:
i have complex situation involving inheritance. have base dataobject class invoice class inherits from. want save invoice object using dataobject save method , return invoice object saved.
public abstract class dataobject { public virtual dataobject save() { // save data return this; } } derived classes
public class invoiceobject : dataobject { // base data class goes here } public class invoice : invoiceobject { public override dataobject save() { // somehow return invoice object here return base.save(); } } i want avoid using casts if possible. insight helpful. arguments sake structure must remain same. cannot remove invoiceobject object , save method must return entire invoice object saved database. not sure if possible, hope is.
working within constraints, seems easiest way declare save abstract (as invoiceobject), , letting concrete templatized subclasses override it, so:
public abstract class dataobject<t> { public abstract t save(); } public abstract class invoiceobject<t> : dataobject<t> { // base data class goes here } public class invoice : invoiceobject<invoice> { public override invoice save() { return this; } } edit: in response comment, having default "save" implementation means whatever object save returns must dataobject<t>, since default implementation of save return this; inside of dataobject<t> (hope makes sense).
you can using curiously recurring template pattern, doing requires return dataobject<t> save, so:
public abstract class dataobject<t> t : dataobject<t>{ public virtual dataobject<t> save(){ return this; } } public abstract class invoiceobject<t> : dataobject<t> t : dataobject<t> { // base data class goes here } public class invoice : invoiceobject<invoice> { }
Comments
Post a Comment