C# gRPC功能是否可能过载?

C# gRPC功能是否可能过载?,c#,grpc,C#,Grpc,我正在用C中的gRPC启动一个小的示例项目,当我实现这个原型文件时,当我键入相同名称的函数但不同的参数时,会出现一些错误 我可以在proto文件中重载函数吗?否,protobuf中服务中的RPC名称必须是唯一的 实现有点像重载的最简单方法是使用单个请求类型和单个响应类型,但在顶层使用oneof来指定一个子请求或子响应。然后,您可以很容易地在C代码中创建另一个分部类,并在其中编写重载,这基本上是从子请求消息中适当地创建请求,然后提取适当的子响应 或者,如果您的RPC真的只想做一件事,并且您只想让它

我正在用C中的gRPC启动一个小的示例项目,当我实现这个原型文件时,当我键入相同名称的函数但不同的参数时,会出现一些错误


我可以在proto文件中重载函数吗?

否,protobuf中服务中的RPC名称必须是唯一的

实现有点像重载的最简单方法是使用单个请求类型和单个响应类型,但在顶层使用oneof来指定一个子请求或子响应。然后,您可以很容易地在C代码中创建另一个分部类,并在其中编写重载,这基本上是从子请求消息中适当地创建请求,然后提取适当的子响应

或者,如果您的RPC真的只想做一件事,并且您只想让它更容易以不同的方式调用,这是最合适的重载形式,那么您可以只添加分部类。例如,如果您有这样的服务:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
。。。然后,如果生成的代码如下所示:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
公共部分类MathClient { 公共虚拟AddResponse addrequest请求,CallOptions选项 { ... } 公共虚拟异步调用AddAsyncAddRequest请求, headers=null,DateTime?deadline=null, CancellationToken CancellationToken=默认值 { ... } 公共虚拟异步调用AddAsync AddRequest请求,CallOptions选项 { ... } } 。。。然后您可以编写自己的部分类,如下所示:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
公共部分类MathClient { 公共整数加法x,整数y { var request=newaddrequest{X=X,Y=Y}; var-response=Addrequest; 返回响应。结果; } //类似地,异步 }
否,protobuf中服务中的RPC名称必须是唯一的

实现有点像重载的最简单方法是使用单个请求类型和单个响应类型,但在顶层使用oneof来指定一个子请求或子响应。然后,您可以很容易地在C代码中创建另一个分部类,并在其中编写重载,这基本上是从子请求消息中适当地创建请求,然后提取适当的子响应

或者,如果您的RPC真的只想做一件事,并且您只想让它更容易以不同的方式调用,这是最合适的重载形式,那么您可以只添加分部类。例如,如果您有这样的服务:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
。。。然后,如果生成的代码如下所示:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
公共部分类MathClient { 公共虚拟AddResponse addrequest请求,CallOptions选项 { ... } 公共虚拟异步调用AddAsyncAddRequest请求, headers=null,DateTime?deadline=null, CancellationToken CancellationToken=默认值 { ... } 公共虚拟异步调用AddAsync AddRequest请求,CallOptions选项 { ... } } 。。。然后您可以编写自己的部分类,如下所示:

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
公共部分类MathClient { 公共整数加法x,整数y { var request=newaddrequest{X=X,Y=Y}; var-response=Addrequest; 返回响应。结果; } //类似地,异步 }
谢谢我现在看得更清楚了。谢谢!我现在看得更清楚了。