Зачем разработчику включать параметр в функцию, которая ссылается на класс, в котором он используется? - PullRequest
0 голосов
/ 08 марта 2012

Итак, у меня следующая ситуация:

class Child : Base, IBase
{
    Response OnOperationResponse(Base base, Parameters params)
    {
       // Code code code
    }
}

public class Base
{
    protected void OnOperationResponse(Parameters params);
}

public interface IBase
{
    Response OnOperationResponse(Base base, Parameters params);
}

Я многое упускаю, но я добавил части, которые меня смущают.

Итак, * 1006Класс * и интерфейс IBase содержат одно и то же имя функции, но я хочу использовать вызов интерфейса OnOperationResponse.Где я запутываюсь, почему разработчик библиотеки добавил параметр Base в интерфейс?Разве интерфейс не должен понимать, что функция должна ссылаться на this?

Я что-то здесь упускаю?Или под капотом скрыто что-то, что скрывает эта библиотека?

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Разве интерфейс не должен понимать, что функция должна ссылаться на это?

Параметр типа Base, передаваемый в OnOperationResponse, может быть любой экземпляр типа Base - почему вы предполагаете, что он должен совпадать с экземпляром IBase, к которому он вызывается?

Вариант использования (по общему признанию) может быть дополнениемили изменение Response аналогично декоратору:

class Child : Base, IBase
{
    Response OnOperationResponse(Base someBase, Parameters p)
    {
        var response = someBase.OnOperationResponse(p);
        response.Foo = "bar";
        return response;
    }
}
0 голосов
/ 08 марта 2012

Вам не нужно внедрять IBase в Child.Но вы можете.Реализация просто означает, что он не только обладает свойствами «базового» объекта, но также может обрабатывать ответы с передаваемыми объектами «базового» типа. Возможно, разработчик хотел разделить эти идеи и позволить вам специализировать одну или другую.,

Либо создайте улучшенный обработчик, который реализует IBase и принимает дочерние элементы, и прекрасно обрабатывает их, либо расширяя Base и создавая что-то грандиозное, что еще можно передать обратно Child для ответа.

...