Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';ViewComponent类是否有调用方法的抽象定义?_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 为什么';ViewComponent类是否有调用方法的抽象定义?

C# 为什么';ViewComponent类是否有调用方法的抽象定义?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我想知道为什么微软没有在ViewComponent抽象类中定义一个抽象方法Invoke或InvokeAsync,而Invoke方法对于视图组件的工作至关重要 有什么原因吗?这只是设计决策。调用视图组件时,您可以传递任意数量的参数和任意类型的参数。所有这些参数都将传递给InvokeAsync方法。要避免将它们打包到类似于object[]array的东西中,可以使用任意数量的强类型参数定义InvokeAsync方法: public async Task InvokeAsync(int arg1, s

我想知道为什么微软没有在
ViewComponent
抽象类中定义一个抽象方法
Invoke
InvokeAsync
,而
Invoke
方法对于视图组件的工作至关重要


有什么原因吗?

这只是设计决策。调用视图组件时,您可以传递任意数量的参数和任意类型的参数。所有这些参数都将传递给
InvokeAsync
方法。要避免将它们打包到类似于
object[]
array的东西中,可以使用任意数量的强类型参数定义
InvokeAsync
方法:

public async Task InvokeAsync(int arg1, string arg2) {
    // ...
}
在调用过程中,将通过反射检查ViewComponent的方法,并将为此调用选择一个具有正确签名的方法。因此(
InvokeAsync
)的任意参数-无法将此方法声明为抽象(或虚拟)

您也可以在其他地方看到相同的设计,例如,
Startup
类可以具有名为
Configure
的方法,该方法接受任意数量的参数,这些参数将从DI容器中解析,但Startup类不会覆盖父类中的任何方法(实际上,在本例中根本没有父类)