有关确切规则,请参阅重载分辨率规范。但是简单地说,它是这样的。
首先,列出所有 可访问的 构造函数。
public EffectOptions ( params object [ ] options )public EffectOptions ( IEnumerable<object> options ) public EffectOptions ( string name )public EffectOptions ( object owner ) public EffectOptions ( int count ) public EffectOptions ( Point point )
接下来,消除所有 不适用的
构造函数。适用的构造函数是每个形式参数都有对应参数的构造函数,该参数可隐式转换为形式参数类型。假设Point是一个值类型,我们将删除“ int”和“
Point”版本。那离开
public EffectOptions ( params object[] options )public EffectOptions ( IEnumerable<object> options ) public EffectOptions ( string name )public EffectOptions ( object owner )
现在,我们必须考虑带有“ params”的参数是适用于其 展开 形式还是 未 展开
形式。在这种情况下,这两种形式都适用。发生这种情况时,我们将放弃 展开的 表格。这样就离开
public EffectOptions ( object[] options )public EffectOptions ( IEnumerable<object> options ) public EffectOptions ( string name )public EffectOptions ( object owner )
现在,我们必须确定 最 合适的候选人。最佳规则很复杂,但是简短的规则是, 更具体胜于更具体
。长颈鹿比哺乳动物更具体,哺乳动物比动物更具体,动物比物体更具体。
该
object版本比所有版本都不太具体,因此可以删除。该
IEnumerable<object>版本不如该版本特定
object[](您知道为什么吗?),因此也可以将其删除。那离开
public EffectOptions ( object[] options )public EffectOptions ( string name )
现在我们陷入困境。
object[]既不比也不具体
string。因此,这产生了歧义错误。
那只是一个简短的草图;真正的平局决胜法要复杂得多。但这是基础。



