错误:'object'不包含'methodName'的定义

时间:2010-12-14 20:01:07

标签: c#

我需要传递从不同类中实例化的不同对象,它们具有相同名称的函数,我想调用该函数。

例如:

Class1 object1;
Class2 object2;
Class3 object3;

Object object = object1;
object1->functionname();

Object object = object2;
object2->functionname();

Object object = object3;
object3->functionname();

这在c#...

中是不可能的

在php中很简单,你可以像上面的示例一样使用对象,但是在c#中我得到这个错误:错误:'object'不包含'methodName'的定义

我认为在对象对象上调用任何方法名称是合法的!因为它不知道里面到底是什么。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

创建两个类都实现的接口 然后通过您的接口类型将对象传递给您的函数:

interface IAnimal
{
    void Speak();
}

class Cat : IAnimal
{
    public void Speak()
    {
        MessageBox.Show("Meow!");
    }
}

class Dog : IAnimal
{
    public void Speak()
    {
        MessageBox.Show("Woof!");
    }
}


static class Program
{

    static void SpeakPlease(IAnimal animal)
    {
        animal.Speak();
    }
 //...
 }

答案 1 :(得分:3)

  

我认为在对象对象上调用任何方法名称是合法的!因为它不知道里面到底是什么。

不,除了Object本身定义的方法之外,调用任何方法非法。也许你在考虑dynamic

但我认为你应该创建一个通用界面。

interface IProcessable
{
    void Process();
}

答案 2 :(得分:0)

c#是静态类型的:它在编译代码时查找方法名称,而不是在运行时查找。 object没有该方法名称,因此您不能期望调用该函数。