C#:相同签名的方法/构造函数和命名参数

标签 c# c#-4.0

假设我正在定义一个 Complex 类来表示复数。我想定义两个构造函数,这样我就可以这样写:

Complex z1 = new Complex(x: 4, y: 3);
Complex z2 = new Complex(r: 2, theta: Math.PI / 4);

但是,我不能这样定义构造函数:

public Complex(double x, double y) { ... }
public Complex(double r, double theta) { ... }

因为两个构造函数具有相同的签名,这是不允许的。但在 C# 4 中,我可以使用可选参数来编写:

public Complex(double x, double y) { ... }
public Complex(double r, double theta, bool unused=true) { ... }

它有效,然后我可以按预期使用上述构造函数调用。 unused 参数的唯一目的是使签名不同;在定义和调用构造函数时,它完全没有被使用。

对我来说这似乎是一个丑陋的把戏:还有更好的选择吗?

最佳答案

将构造函数设为私有(private)并具有静态工厂样式函数。

public static Complex CreateComplexPolar(double r, double theta);
public static Complex CreateComplex(double x, double y);

您可以根据输入的内容对其进行验证。

另一种可能性是创建一个封装输入的类型并使用您之前提到的构造函数。

public struct PolarCoordinates
{
  public double Rho;
  public double Theta;
}

public struct CartesianCoordinates
{
  public double X;
  public double Y;
}

public Complex(PolarCoordinates pc);
public Complex(CartesianCoordinates cc);

关于C#:相同签名的方法/构造函数和命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439234/

相关文章:

c# - NUnit 3 ExpectedException 与返回的对象

c# - If 语句逻辑和数组

css - 如何为单选按钮制作标签

c#-4.0 - ASP.NET 4.0错误处理除500状态外不起作用

asp.net - 重命名文件以上传到服务器 ASP.NET

.net - 使用异步 .net 4.0 返回数据表

c# - Azure 存储分析日志解析错误

c# - 数组C#错误Unity3D

c# - 网站扫描中的缓慢 HTTP POST 漏洞问题

c# - 在 ClickOnce Publish 上退出 list 后无法识别 .exe 文件