好的,回到基础。我想知道如何正确重载带有params
参数的方法。
这是我的场景。我从我的常规方法开始:
public void MyMethod(MyObject mo)
{
// method body
}
我为它创建了一个看起来像这样的重载:
public void MyMethod(MyObject mo, params string[] fields)
{
// new method body
MyMethod(mo);
}
明显的意图是MyMethod(new MyObject());
执行原始方法并MyMethod(new MyObject(), "field0"/*, etc...*/);
执行重载方法。但我发现情况并非如此。
实际发生的是MyMethod(new MyObject());
执行重载的方法!
我不明白。在这种情况下,我将如何执行原始方法?
使用实际代码更新
好的,这是产生所描述行为的实际代码。
Class1Base.cs:
public class Class1Base
{
public virtual void MyMethod(MyObject ob)
{
Console.WriteLine("Called Class1Base");
}
}
Class1.cs:
public class Class1 : Class1Base
{
public override void MyMethod(MyObject ob)
{
Console.WriteLine("called overridden method");
}
public void MyMethod(MyObject ob, params string[] fields)
{
Console.WriteLine("called OVERLOADED method");
}
}
我的对象.cs:
public class MyObject
{
public int Id { get; set; }
public string Description { get; set; }
}
然后,当我以这种方式执行此代码时:
var myClass = new Class1();
var myObject = new MyObject();
myClass.MyMethod(myObject);
myClass.MyMethod(null);
myClass.MyMethod(null, "string");
控制台显示:
called OVERLOADED method
called OVERLOADED method
called OVERLOADED method
我原以为它会显示:
called overridden method
called overridden method
called OVERLOADED method
为什么不呢?