我有一个类,它具有三个重载方法。假设有:
class MyChildClass
{
public void myMethod(int i)
{ /* do something with i */ }
public void myMethod(int a, string b)
{ /* get i from a and b and call: */ myMethod(i); }
public void myMethod(string c, string d)
{ /* get i from c and d and call: */ myMethod(i); }
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望该类成为其他(父)类中的私有字段,但我需要这三种方法可以访问。现在,我只是做了:
class MyBaseClass
{
private MyChildClass myObject = new myChildClass(); // or similar
public void myMethod(int i)
{ myObject.myMethod(i); }
public void myMethod(int a, string b)
{ myObject.myMethod(a, b); }
public void myMethod(string c, string s)
{ myObject.myMethod(c, d); }
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以将其作为一种简短的方法来实现?看起来像这样的东西:
public void myMethod(unknownListOfArgumentsOfDifferentTypes args)
{ myObject.myMethod(args); }
Run Code Online (Sandbox Code Playgroud)
我尝试使用,public void myMethod(params object[] something)但是没有用。是否有可能,还是我必须将每种方法“投影”到另一个方法中?
编辑:子类具有各种方法和字段,我只希望可用于父类访问。这就是为什么我不希望父母在此之后派生。我没有解释,很抱歉,如果子类只包含这三个方法。这些是我希望可以作为父类的公共方法访问的方法。
您可以使用public void myMethod(params object[] something)如下所示:
public static void Main()
{
UnknownArgumentsMethod1(1, 2, 3, "foo");
}
public static void UnknownArgumentsMethod1(params object[] list)
{
UnknownArgumentsMethod2(list);
}
public static void UnknownArgumentsMethod2(params object[] list)
{
foreach (object o in list)
{
if (o.GetType() == typeof(int))
{
Console.WriteLine("This is an integer: " + (int)o);
}
else if (o.GetType() == typeof(string))
{
Console.WriteLine("This is a string: " + (string)o);
}
}
}
Run Code Online (Sandbox Code Playgroud)