gpt4 book ai didi

c# - 更好的重载构造函数设计?

转载 作者:行者123 更新时间:2023-11-30 15:30:27 27 4
gpt4 key购买 nike

我一直在研究构造函数并注意到在大多数代码中重载的构造函数是:

public class ClassFirst
{
public string Name { get; set; }
public int Height { get; set; }
public int Weight { get; set; }

public ClassFirst(string name, int height, int weight)
{
Name = name;
Height = height;
Weight = weight;

}

public ClassFirst(string name)
: this(name, 0, 0)
{ }

public ClassFirst(string name, int height)
: this(name, height, 0)
{ }

}

哪个会调用'underloading'而不是重载,因为添加的构造函数会削弱完整的构造函数......而且似乎比我直觉上想要重载的方式是 ->

 public class ClassSecond
{
public string Name { get; set; }
public int Height { get; set; }
public int Weight { get; set; }

public ClassSecond(string name)
{
Name = name;

}

public ClassSecond(string name, int height): this (name)
{

Height = height;
}

public ClassSecond(string name, int height, int weight): this (name, height)

{
Weight = weight;
}
}

为什么这样使用构造函数?一定有优点...

回答:下面是一个很好的例子,说明如何使用默认参数在 .net 4.0 中简洁地编写重载构造函数。

上一个 Stack Overflow 答案: 我发现有一个解决构造函数重载问题的上一个问题:C# constructor chaining? (How to do it?)

最佳答案

进行重载 - 但在默认构造函数中提供默认参数(或最低级别,视情况而定):

public class ClassSecond
{
public string Name { get; set; }
public int Height { get; set; }
public int Weight { get; set; }

public ClassSecond(string name)
{
Name = name;
Height = 100;
Weight = 100;
}

public ClassSecond(string name, int height)
: this(name)
{
Height = height;
}

public ClassSecond(string name, int height, int weight)
: this(name, height)
{
Weight = weight;
}
}

由于调用构造函数的顺序,您将变量设置为它们的默认值,然后用用户指定的值覆盖它们。只要您的属性不针对 setter 执行某种逻辑,这就是有效的。

话虽这么说,因为您已经发布了一个答案,我假设您对 .Net 4 默认参数没有问题。在这种情况下,所有这些都可以替换为:

public MyClass(string name = "Ben", int height = 100, int weight = 20)
{
Name = name;
Weight = weight;
Height = height;
}

这将包含您在问题中构建的所有重载的功能,然后是一些。

示例(所有有效代码都按您的预期执行):

MyClass a = new MyClass();
MyClass b = new MyClass("bob");
MyClass c = new MyClass("bob", 100);
MyClass d = new MyClass("bob", 141, 300);
MyClass e = new MyClass("bob", weight: 300);
MyClass f = new MyClass(height: 50);

关于c# - 更好的重载构造函数设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108545/

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