【发布时间】:2026-01-20 08:00:01
【问题描述】:
我的类目前有两个构造函数,都是重载:
public CustomRangeValidationAttribute(string value) {}
和
public CustomRangeValidationAttribute(object value) {}
这似乎工作正常:当我使用string 调用该方法时,调用了第一个构造函数,当我使用不同的值(例如integer 或boolean)时,调用了第二个构造函数。
我假设有一个规则强制特定类型匹配到更具体的重载中,防止
var c = new CustomRangeValidationAttrubute("test");
来自调用对象重载。
这是“安全代码”,还是应该(或可以)改进代码?我有一种唠叨的感觉,这不是最佳做法。
【问题讨论】:
-
取决于,你想达到什么目标?
-
我需要确保绝对没有调用错误构造函数的风险。如果不是这样的话,在某种程度上它仍然是一种不好的做法。
-
如果基于
object的方法会做一些根本不同/错误如果它碰巧用string调用,那可能是一个逻辑错误 首先创建重载,但与调用代码无关。 -
请记住,重载将在编译时选择,因此如果您有一个实际上是字符串的对象引用,则将调用第二个重载(除非您将对象转换为字符串) .
-
@mjwills - 很难使用构造函数,因为在链接之前无法运行逻辑(在 C# 中)
标签: c# overloading constructor-overloading