Я хотел бы вызывать вызовы метода для объекта c в C#. Не могу понять, как я это сделаю. Я опубликую пример kotlin, как я это сделал для шаблона MVP в нашем приложении android.
Базовая презентация generi c Реализация:
interface IBasePresenter<in T> {
fun takeView(view: T)
fun dropView()
}
class BasePresenter<T> : IBasePresenter<T> {
private var view: T? = null
final override fun takeView(view: T) {
this.view = view
}
final override fun dropView() {
view = null
}
fun onView(action: T.() -> Unit) {
if (view != null) {
action.invoke(view!!) // Magic :-)
}
}
}
Простой контракт для Реализация MVP:
interface IMyView {
fun doSomeRendering(int width, int height)
}
interface IMyPresenter : IBasePresenter<IMyView> {
fun onButtonClicked()
}
Реализация представления и предъявителя:
class MyView : Fragment(), IMyView {
....
override fun doSomeRendering(int width, int height) {
// Do some rendering with width and height...
}
....
}
class MyPresenter : BasePresenter<IMyView> {
override fun onButtonClicked() {
// onView action block is context aware of IMyView functions...
onView { doSomeRendering(800, 400) } // Magic :-)
}
}
У меня все настроено в C#, кроме следующего:
fun onView(action: T.() -> Unit) {
if (view != null) {
action.invoke(view!!)
}
}
Может ли это быть сделано в C# так же, как в kotlin? Все, что мне нужно, - это иметь возможность выполнять следующий вызов в конкретной реализации презентатора,
onView { doSomeRendering(800, 400) }
, чтобы я мог сохранять частный вид своего представления в BasePresenter и не предоставлять его конкретной реализации.