繁体   English   中英

OOP类设计

[英]OOP Class Design

我有这个代码,

public abstract class BaseClass
{
    public object CommonMethod<T>()
    {
        //Common code

        CustomMethod(); //Call child method

        return (T)CustomObject;
    }

    internal abstract void CustomMethod();
}


public class ChildClass : BaseClass
{
    public MyDTO CommonMethod()
    {
        return (MyDTO)base.CommonMethod<MyDTO>(); //Call Base class common code
    }

    internal override void CustomMethod()
    {
        //Custom Code, specific to child class
    }
}

我有一些常见的代码,我已经放在基类(BaseClass.CommonMethod),但最后同样的方法应该运行子类特定的代码(ChildClass.CustomMethod)。

这个实现是否正确或是否有任何其他首选/更好的实现来实现这一目标?

编辑

最终代码(根据答案更新):

public abstract class BaseClass<T> where T : IDTO
{
    public T CommonMethod()
    {
        //Common code

        CustomMethod(); //Call child method

        return (T)CustomObject;
    }

    internal abstract void CustomMethod();
}


public class ChildClass : BaseClass<MyDTO>
{
    internal override void CustomMethod()
    {
        //Custom Code, specific to child class
    }
}

我认为你不需要演员(MyDTO)base.CommonMethod<MyDTO>(); 因为您的基本方法已经在转换结果。

你需要确保将CustomObjectT ,这个位看起来很可疑。

CustomerObject必须从MyDTO继承,因此T必须实现MyDTO我认为

通过小的修正,您的代码看起来很好。 但是,如果将返回值设为T,则不需要覆盖CommonMethod:

public abstract class BaseClass<T>
{
    public T CommonMethod()
    {
        //Common code

        T result = CustomMethod(); //Call child method

        return result;
    }

    internal abstract T CustomMethod();
}

public class ChildClass : BaseClass<MyDTO>
{
    internal override MyDTO CustomMethod()
    {
        //Custom Code, specific to child class
    }
}

在我的示例中,我假设您从CustomMethod返回CustomObject,否则我不太确定您从哪里获取此对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM