class Api : DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if ((int)args[0] == 55)
result = "Match";
else
result = "No match";
return true;
// or return the result of the original method which can be an
// exception if the method does not exist
// return base.TryInvokeMember(binder, args, out result);
}
}
给定上一个示例,请按如下方式使用它
dynamic api = new Api();
string result = api.get_account_id(55);
2条答案
按热度按时间p3rjfoxz1#
很抱歉,伙计,但不幸的是,在C#中没有等效的。
我个人希望PHP的神奇方法是在C#中。它将为开发人员提供一把大而漂亮的钥匙,打开全新的各种设计模式。
但是,唉,开发领域的大多数人正试图做相反的事情。试图打击他们认为是“反模式”的设计或模式,并迫使 * 啊哈 * 我的意思是“教育”,我们如何最好地编程。
它有一些优点,但并不总是如此。每个解决方案不应该总是以相同的方式设计。
这种“教育”的一个很好的现代例子是一切都必须是DI(依赖注入)或MVC。任何超出这两个的东西,例如在Web开发中,通常被认为是低劣的。
zz2j4svz2#
从DynamicObject继承你的类并重写
TryInvokeMember
方法。通过下面的例子你将有机会调用不存在的方法作为__call
php重载或者访问私有成员。这里有一个例子
给定上一个示例,请按如下方式使用它
我希望这能帮上忙