.Net——动态调用方法

一,使用InvokeMember

思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数。


示例(对普通方法和对静态方法的调用):

         #region 动态调用方法——使用InvokeMember对一般方法的调用

                //Type t = typeof(Calculator);
                //Calculator c = new Calculator(1, 2);
                //int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, c, null);
                //Console.WriteLine(result);

            #endregion

#region 动态调用方法——使用InvokeMember对静态含参数方法的调用

                //object[] paramas = { 6, 9 };
                //Type t = typeof(Calculator);
                //t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, paramas);//静态方法不是基于某个具体的类型实例,而是类型本身。方法参数还是以object数组传入的


            #endregion


二,使用MethodInfo.Invoke

使用思路:先通过type对象的getMethod方法,获取想要调用的方法对象,也就是Methodinfo对象,然后在该对象上调用Invoke方法。根据方法签名,可能还需要传递参数。


#region 动态调用方法——使用MethodInfo.Invoke调用方法

                Type t = typeof(Calculator);
                Calculator c = new Calculator(3, 4);
                MethodInfo mi = t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public);
                mi.Invoke(c, null);


 #endregion

其实有时候根据方法名称调用方法还是挺方便的,就是反射的带来的性能问题没有衡量过,都说性能不好,但是到底有多大影响,求解释?

### 方法调用方式 在 ASP.NET Core MVC 中,每一个公共方法都可以作为 HTTP 终端被调用[^2]。这意味着只要控制器中的方法是公开的,默认情况下就可以通过 URL 访问并执行这些方法。 对于控制器内的方法调用,通常是在浏览器或其他客户端发出请求时自动触发。例如,在 `StudentsController` 控制器中定义的方法可以通过相应的路由模式来访问: ```csharp namespace ContosoUniversity.Controllers { public class StudentsController : Controller { private readonly SchoolContext _context; public StudentsController(SchoolContext context) { _context = context; } // GET: /Students/ public IActionResult Index() { var students = _context.Students.ToList(); return View(students); } // Example of another action method within this controller. // This could be called via a route like "/Students/Details/{id}" public IActionResult Details(int id) { var student = _context.Students.Find(id); if (student == null) { return NotFound(); } return View(student); } } } ``` 当采用 MVC 规范实现控制器——即创建继承自 `ControllerBase` 类并将名称以 "Controller" 结尾的类时,则无需手动添加路由;预配置好的默认路由会匹配到相应控制器下的动作方法[^1]。 如果希望在一个视图内调用某个特定的动作方法,一般做法不是直接从视图内部调用方法,而是应该让用户的交互行为(比如点击链接或提交表单)指向那个动作对应的URL路径。这遵循了MVC设计模式的原则,保持了关注点分离的良好实践。 为了简化开发过程以及更好地管理权限验证逻辑,还可以利用特性属性如 `[Authorize]` 来限定哪些用户可以访问指定的操作方法[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值