You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否存在同签名的公共与私有构造函数?如何高效实现?

签名相同的私有与公共构造函数能否共存?

不能。在C#中,构造函数的签名(参数类型、数量、ref/out修饰符)是区分重载的唯一依据,访问修饰符(public/private)不属于签名的一部分。因此,签名完全相同的构造函数,不管访问权限如何,都会被编译器判定为重复定义,直接报错。

高性能解决方案

方案1:直接初始化默认结构体实例并赋值私有字段

因为Wouble是值类型(结构体),内部方法可以直接访问私有字段。这种方式完全跳过构造函数调用,性能最优:

public static Wouble operator +(Wouble a, Wouble b)
{
    Wouble result = default;
    result.value = a.value + b.value;
    return result;
}

方案2:给私有构造函数添加标记参数(你的初始方案优化版)

通过添加一个无意义的参数来构造重载,同时用私有常量提升代码可读性:

private const int SkipValidation = 0;

// 私有构造函数,第二个参数仅用于区分重载
private Wouble(double value, int _)
{
    this.value = value;
}

public static Wouble operator +(Wouble a, Wouble b)
{
    return new Wouble(a.value + b.value, SkipValidation);
}

这里用下划线_作为参数名,明确表示该参数无实际用途,符合编码规范。

方案3:私有静态工厂方法(可选,可读性优先)

如果觉得构造函数重载不够直观,可以用私有静态方法封装实例创建逻辑,但性能略逊于方案1:

private static Wouble CreateWithoutValidation(double value)
{
    Wouble result = default;
    result.value = value;
    return result;
}

public static Wouble operator +(Wouble a, Wouble b)
{
    return CreateWithoutValidation(a.value + b.value);
}

总结

优先选择方案1,既满足高性能要求,又不需要额外的构造函数重载或辅助方法,完全符合你的需求。

内容的提问来源于stack exchange,提问作者FreddyFlares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:38