2013-11-27 3 views
0

Я хотел бы сделать метод цепочки, например, как это:Метод цепочки без круглых скобок, как?

Car myCar = new Car(); 

// Chaining 
myCar.config.engine.cylinders("4"); 

Но как же мне делать цепное, без использования скобок в «конфигурации» или «двигатель»?

Я могу только понять, чтобы сделать это следующим образом:

myCar.config().engine().cylinders("4"); 
+10

Вы пробовали свойства? :) –

+1

Если вы хотите вызвать метод, вы должны использовать круглые скобки. Если у вас есть контроль над классом, вы можете определить _properties_ вместо методов. – knittl

+1

Я думаю, что вы вводите в заблуждение методы и свойства. В этом случае я бы использовал свойства вместо методов. –

ответ

3

Вы можете сделать это, объявив Config свойство в вашем Car классе. Тогда Engine свойство в CarConfig классе, как это:

public class Car 
{ 
    public CarConfig Config { get; set; } 
} 

Затем вы можете приковать звонки.

+0

Пример с использованием свойства 'Config', доступного только для чтения, но с явно написанным получателем может быть более подходящим для этой конкретной ситуации. –

+0

@ O.R.Mapper: или авто-свойство с приватным сеттером: 'public CarConfig Config {get; частный набор; } ' – knittl

+0

« Получает »автоматически возвращает новый экземпляр класса CarConfig? И какой модификатор доступа должен иметь класс CarConfig? Спасибо. –

0

Вы можете использовать свойства, как многие предлагают, но все это воняет от взлома Law of Demeter (или принцип наименьшего знания). В основном вы нарушаете инкапсуляцию класса Car. Вы можете взглянуть на Builder Pattern, особенно на беглую реализацию (например, here).

Ваш код может выглядеть следующим

Car myCar = new CarBuilder().WithEngineCylinders("4"); 
Смежные вопросы