gpt4 book ai didi

c# - 最佳实践 : Creating methods, 不同的重载

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:38 25 4
gpt4 key购买 nike

比方说,我们有一个方法,为了便于讨论,我们将其称为 MethodOne;

public void MethodOne()
{
//do stuff.
}

现在假设我们要创建一个可选的参数,我们可能决定创建另一个具有相同名称的方法,例如采用不同的重载;

public void MethodOne()
{
//do stuff.
}

public void MethodOne(bool checkVar)
{
if(checkVar)
{
//do stuff
}
else
{
//do other stuff
}
}

现在我们有了一个方法,它有两个不同的重载组合(?)。这在实践中是否比使用一种方法更好,例如只检查可选重载是否为 null 或是否包含信息;

 public void MethodOne(int? testVar)
{
if(testVar != null)
{
//do stuff
}
}

这对于一个重载来说似乎微不足道,但想象一下我有 5 个我想传递的变量,我会创建 5 个方法,同名但不同的重载,还是只创建一个方法并检查传递的变量?

最佳答案

对此有一些解决方法。例如,您可以使用一个枚举器和一个对象数组作为包含实际参数值的第二个参数,以便您知道如何通过切换枚举器来处理数据……或者您可以只声明 5 个对象参数,然后检查它们输入一个开关,相应地框住它们并继续。但这两种选择都是非常糟糕的做法。

我建议你坚持使用不同的重载:

public void MethodOne(Boolean value)
{
// Process the value...
}

public void MethodOne(Int32 value)
{
// Process the value...
}

public void MethodOne(Int32 value, String text)
{
// Process the value and the text...
}

// And so on...

或者参数声明中的默认数据:

public void MethodOne(Int32 integer = 1, String text = "hello", ...)
{
// Process everything inside the method...
}

或者参数化方法(如果每个对象类型都有共同的处理):

public void MethodOne(params Object[] parameters)
{
for (int i = 0; i < parameters.Length; ++i)
// Check type of parameter and process the value...
}

或者如果您的设计允许的话,方法冒泡(这是我最喜欢的方法,因为第一个方法只会产生大量代码冗余,而第二个方法有时可能会让您或与您一起工作的其他开发人员感到困惑):

public void MethodOne(Int32 value)
{
MethodOne(value, "hello");
}

public void MethodOne(Int32 value, String text)
{
// Process everything inside the method...
}

关于c# - 最佳实践 : Creating methods, 不同的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com