2013-04-28 3 views
5

В Objective-C делегаты, такие как UITableViewControllerDelegate, являются протоколами, поэтому я могу реализовать несколько в одном классе.Как реализовать несколько делегатов в Monotouch?

В Monotouch все делегаты iOS отображаются как классы C#. Это делает невозможным реализацию двух делегатов в одном классе контроллера, поскольку C# (по правде говоря, IMO) допускает только одно наследование.

Существуют ли декларации делегатов как интерфейсы C# где-то в рамках Monotouch? (Это было бы самым близким к протоколу от Objective-C)

Каковы мои варианты, если мне нужно реализовать несколько делегатов в классе в Monotouch/C#?

ответ

5

Чтобы сделать это, вы можете использовать WeakDelegate, но вы должны иметь все правильные Export. Документация о слабых делегатах у основания here. Here - пример UITableViewSource со слабыми делегатами.

Я не уверен, почему именно Xamarin пришлось использовать классы вместо интерфейсов для протоколов Obj-C, но я предполагаю, что это ограничение, которое они должны были обходным путем.

+0

Классы причин используются вместо интерфейсов, так это то, что протоколы Obj-C могут иметь необязательные методы. Управляемые интерфейсы не могут. –

+0

Это имеет смысл ... Было бы неплохо, если бы был набор открытых строковых констант для всех селекторов, используемых в MonoTouch, чтобы помочь с этим - все эти строки уже есть, просто не отображаются. – jonathanpeppers

+0

@jonathanpeppers http://tirania.org/tmp/rosetta.html – dalexsoto

Смежные вопросы