sdg*_*sdh 4 c# parameters struct
假设我有一个函数需要一对坐标x和y:
myFunction(int x, int y)
{
// Do stuff...
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以将这些参数包装到一个Point结构中:
struct Point
{
int x;
int y;
}
myFunction(Point p)
Run Code Online (Sandbox Code Playgroud)
或者甚至向程序员提供这两个选项:
myFunction(int x, int y)
myFunction(Point p)
{
myFunction(p.x, p.y)
}
Run Code Online (Sandbox Code Playgroud)
使用结构对参数进行分组而不是单独传递参数有哪些优点和缺点?
这些权衡在编程语言之间是否有所不同?
结构是首选方式!
当您有一个或两个参数(如您的示例中)时,没有太大区别,但当您有 4 个或更多参数时,区别就很明显(您必须键入更少的代码)。
如果您想将参数作为指针或引用传递,您必须键入更少的代码。
使用struct 的另一个优点是代码更容易维护。
让我们用你自己的例子来看看它的实践
想象一下,您正在创建一个 CAD 应用程序,并且在最初的想法中,程序仅在平面 (X, Y) 上工作,因此您将拥有许多使用一个或多个点作为参数的函数,如下所示:
struct point
{
int x;
int y;
}
func Foo1(point a) {}
func Foo2(point a, point b) {}
.
.
.
Run Code Online (Sandbox Code Playgroud)
但几个月后,应用程序设计发生了变化,现在它需要在空间(3D 世界)中工作,因此您需要将 Z 坐标添加到点中。
如果您使用的是结构体,您唯一需要做的就是将 Z 变量添加到结构体中并完成(当然,您需要更新函数中的公式),但如果您没有使用结构体,则需要将 Z 参数添加到每个使用点作为参数的函数。
func Foo1(int x, int y, int z) {}
func Foo2(int p1x, int p1y, int p1z, int p2X, int p2Y, int p2Z) {}
Run Code Online (Sandbox Code Playgroud)
您可以在这里查看更详细的解释https://en.wikipedia.org/wiki/Struct_(C_programming_language)