// input is interface, reader.Get result is concrete class
    protected override IReadResultModel Test(IReadParamModel param)
    {
        var result = reader.Get(param);

        return(result);
    }
    // input is interface, reader.Get result is interface
    protected virtual IReadResultModel Test(IReadParamModel param)
    {
        var result = reader.Get(param);

        return(result);
    }